アフィリエイト広告を利用しています

2023年03月02日

システム管理: OpenBSD のアップグレード作業 ── 2023 年 3 月 (2)

昨日の作業の続きを行う.
ベースシステムのコンパイルが終わっているのでマージしてデバイスファイルを作成する.

# sysmerge
# cd /dev/ && ./MAKEDEV all


次いで, X 関連ファイルのコンパイルとインストールを行う.

# cd /usr/xenocara
# make bootstrap
# make obj
# make build


パッケージのアップデート.

# pkg_add -uv

以上で OpenBSD のアップグレード作業が完了する.

2023年03月01日

システム管理: OpenBSD のアップグレード作業 ── 2023 年 3 月 (1)

月初めなので, OpenBSD のアップグレード作業を行う.

ソースツリーのアップデート.

$ cd /usr/src # ベースシステムのソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/xenocara # X のソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/ports # ports ツリーのアップデート.
$ cvs -q up -Pd -A
# sysupgrade -s # システムの最新のスナップショットへのアップグレード.

再起動したシステム上で urxvt を起動しようとしたらエラーになった.

$ urxvt
ListUtil.c: loadable library and perl binaries are mismatched (got handshake key 0xeb80000, needed 0xec00000)

ローダブルライブラリーのバージョンと urxvt の使用する Perl バイナリーのバージョンの対応が正しくない.
これは後でパッケージをアップデートすれば解決するだろう.
代わりに xterm を起動して作業を続ける.

カーネルのコンパイルとインストール.

# cd /sys/arch/amd64/compile/GENERIC.MP
# make obj
# make config
# make && make install

マルチプロセッサー対応のカーネルが生成される.

ベースシステムのコンパイル.

# cd /usr/src
# make obj && make build

これは終了するまで半日以上かかるので, 今日は区切りを付ける.

2023年02月19日

Haskell: 簡単なプログラムを実行してみる

昨日実行環境を整えた Haskell を使ってみる.

教科書は Graham Hutton 著/山本和彦訳『Programming in Haskell 2nd edition』を使う.

本に載っているリストの和を求めるプログラムを sum.hs の名前で保存する.

sum :: Num a => [a] -> a
sum [] = 0
sum (n:ns) = n + sum ns

これを Haskell インタープリターからロードする.

ghci> :load sum

ところが以下のようなエラーが出た.

ghci> :load
sum [1 of 1] Compiling Main ( sum.hs, interpreted )

sum.hs:3:18: error: Ambiguous occurrence ‘sum’ It could refer to
either ‘Prelude.sum’, imported from ‘Prelude’ at sum.hs:1:1
(and originally defined in ‘Data.Foldable’) or ‘Main.sum’,
defined at sum.hs:2:1
||
3 | sum (n:ns) = n + sum ns
| ^^^ |
Failed, no modules loaded.

少し調べたら, sum という関数は Haskell 自身ですでに定義されているので, 同じ名前の関数を定義しようとしたことで名前の衝突が起こったためとわかった.
これを回避するために sum.hs の冒頭に次の一行を追加する.

import Prelude hiding (sum)

sum :: Num a => [a] -> a
sum [] = 0
sum (n:ns) = n + sum ns

これでロードができるようになる.

[1 of 1] Compiling Main ( sum.hs, interpreted )
Ok, one module loaded.

いくつかの計算をしてみる.

ghci> sum [1,3,5,7,9,11]
36
ghci> sum [1..10]
55

この調子で勉強を続けていくつもりである.

2023年02月18日

プログラミング: Haskell をインストールする

圏論でモナドを勉強して, Haskell を使いたくなった.
GHC (Glasgow Haskell Compiler) をインストールする.

ところがエラーになった.

# pkg_add -v ghc
Update candidates: quirks-6.98 -> quirks-6.101
quirks-6.101 signed on 2023-02-14T11:05:49Z
quirks-6.98->6.101: ok
Can't install ghc-9.2.5p0 because of libraries
|library c.97.0 not found
| /usr/lib/libc.so.96.1 (system): bad major
| /usr/lib/libc.so.96.2 (system): bad major
| /usr/lib/libc.so.96.4 (system): bad major
| /usr/lib/libc.so.96.5 (system): bad major
|library pthread.27.0 not found
| /usr/lib/libpthread.so.26.1 (system): bad major
| /usr/lib/libpthread.so.26.2 (system): bad major
| /usr/lib/libpthread.so.26.3 (system): bad major
| /usr/lib/libpthread.so.26.4 (system): bad major
Direct dependencies for ghc-9.2.5p0 resolve to libffi-3.4.4 libiconv-1.17 gmp-6.2.1p0
Full dependency tree is libffi-3.4.4 gmp-6.2.1p0 libiconv-1.17
Read shared items: ok
Couldn't install ghc-9.2.5p0

libc.so と libpthread.so のメジャー番号が古く, インストールできない.
最新の GHC パッケージにシステムが対応していない.

それで, https://cdn.openbsd.org/pub/OpenBSD から安定板の ghc-9.2.4p2.tgz をダウンロードしてインストールする.

# pkg_add -v ghc-9.2.4p2.tgz

これで GHC がインストールされた.

Emacs から Haskell を使うためには haskell-mode を使う.

M-x run-haskell

これで Haskell インタープリターが起動する.

2023年02月02日

システム管理: OpenBSD のアップグレード作業と Emacs HEAD のコンパイル・インストール ── 2023 年 2 月 (2)

昨日から走らせていたベースシステムのコンパイルが朝になって終了する.
マージ作業を行う.

# sysmerge # システム関連の各種ファイルのアップデート
# cd /dev/ && ./MAKEDEV all # デバイスファイルの作成


X のコンパイル.

# cd /usr/xenocara
# make bootstrap
# make obj
# make build


パッケージのアップデート.

# pkg_add -uv

以上が問題無く終了した.

Emacs HEAD のコンパイル・インストールを行う.

$ export AUTOCONF_VERSION="2.71"
$ export AUTOMAKE_VERSION="1.16"
$ ./autogen.sh
$ ./configure \
'CFLAGS=-I/usr/include -I/usr/X11R6/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -lgccjit' \
--prefix=/usr/local \
--mandir=/usr/local/share/man \
--infodir=/usr/local/info \
--with-x-toolkit=athena \
--with-imagemagick \
--with-xaw3d \
--with-x \
--without-xim \
--with-xpm=ifavailable \
--with-native-compilation
$ git pull
$ gmake bootstrap
$ gmake check
# gmake install

gmake bootstrap でコンパイルを行うと時間がかかるが (*.el ファイルのネイティブコンパイルなど), 午後までかかって何とか終了する.

2023年02月01日

システム管理: OpenBSD のアップグレード作業 ── 2023 年 2 月 (1)

新しい月になったので, OpenBSD のアップグレードを行う.

ソースツリーのアップデート.

$ cd /usr/src # ベースシステムのソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/xenocara # X のソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/ports # ports ツリーのアップデート.
$ cvs -q up -Pd -A
# sysupgrade -s # システムの最新のスナップショットへのアップグレード.


カーネルのコンパイルとインストール.

# cd /sys/arch/amd64/compile/GENERIC.MP
# make obj
# make config
# make && make install

ベースシステムのコンパイル.

# cd /usr/src
# make obj && make build

ビルドプロセスを走らせたまま, 今日は区切りを付ける.

2023年01月10日

PDP-11: プログラミングのための準備 (2) ── Hello world のアセンブルと実行

サイト The Ancient Bits adventure に掲載されている Hello world プログラム hellopdp.s:


.TITLE Say hello on console
.IDENT "V00.00"

.GLOBAL start
.GLOBAL _putconch

STACK = 0x1000

.text
start:
mov $STACK, sp
mov $hellom, r1
mov $helloc, r2
10$: movb (r1), r0
jsr pc, _putconch
dec r2
beq 99$
inc r1
jmp 10$

99$: nop
halt

.data
hellom: .ascii "Hello world!"
helloc = . - hellom

.end

とバイトをコンソールに印刷するプログラム

.TITLE putconch: send a byte to the system console
.IDENT "V01.00"

.GLOBAL _putconch

XCSR = 0177564
XBUF = 0177566
TXRDY = 0x0080
NRETRY = 5000

.text

_putconch:
mov r1,-(sp)
mov r2,-(sp)
mov $NRETRY, r1
10$:
mov XCSR,r2
bit r2, $TXRDY
bne 20$
dec r1
bne 10$
mov $2,r0
jmp 999$

20$: movb r0,XBUF
mov $NRETRY, r1
30$: mov XCSR,r2
bit r2, $TXRDY
bne 40$
dec r1
bne 30$
mov $2, r0
jmp 999$

40$: mov $0, r0
999$:
mov (sp)+, r2
mov (sp)+, r1
rts pc

.end _putconch

をアセンブルして実行イメージを作成する.


まず, クロスアセンブラを使用して hellopdp.s と putconch.s をアセンブルする.


$ pdp11-aout-as putconch.s -o putconch.o
$ pdp11-aout-as hellopdp.s -o hellopdp.o

これができたら, a.out 実行イメージをリンクして LDA ファイルを作成する.

$ pdp11-aout-ld -T ldaout.cmd hellopdp.o putconch.o -o hellopdp.out
$ bin2load -a -f hellopdp.out -o hellopdp.lda

SimH での実行には, できあがった LDA ファイル "hellopdp.lda" を使う.

$ simh-pdp11

PDP-11 simulator V3.9-0
sim> load hellopdp.lda
sim> g
Hello world!
HALT instruction, PC: 001040 (MOV R1,-(SP))
sim> q
Goodbye

タグ:PDP-11 SimH

2023年01月06日

PDP-11: プログラミングのための準備 (1) ── ドキュメントとチュートリアルとツール

PDP-11 アセンブリ言語でプログラミングの勉強をすることにした.


ビギナー向けチュートリアルが ChibiAkumas 氏によって YouTube 上で公開されている.
Learn PDP-11 Assembly Coding Lesson 1 - For absolute beginners!.


また, 同氏によるサイト Learn Assembly Programing with ChibiAkumas でチュートリアルの内容が解説されている.
ドキュメントも置いてある.


PDP-11 のアセンブリ言語でプログラムを作成したとして, その実行は SimH で行う.
SimH は, PDP-11 のみならず, Altair, HP3000 などいくつもの旧いコンピューターシステムに対するエミュレーターである.
OpenBSD パッケージとして用意されているので, それをインストールした.


# pkg_add simh


PDP-11 のプログラムを SimH で実行させる方法はサイト
The Ancient Bits adventure が参考になる.
このサイトによれば以下のツールが必要である.
・ クロスアセンブラ
・ bin2load

クロスアセンブラ


GNU BinutilsGCC をダウンロードし, configure オプションに --target=pdp11-aout を指定して各々のコンパイルを行う.


$ mkdir -p ~/src/obj/obj-binutils
$ cd ~/src/obj/obj-binutils
$ ~/src/binutils-2.39/configure --target=pdp11-aout --prefix=$HOME/opt
$ gmake
$ mkdir -p ~/src/obj/obj-pdp11
$ cd ~/src/obj/obj-pdp11
$ ~/src/gcc-11.2.0/configure \
'CFLAGS=-I/usr/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/local/lib' \
--target=pdp11-aout \
--with-gmp=/usr/local \
--with-mpfr=/usr/local \
--with-mpc=/usr/local \
--prefix=/home/pine/opt/pdp11-aout
$ gmake

残念ながら, クロスコンパイラのコンパイルには失敗したがクロスアセンブラは作成できた.
これらによって作成されたプログラムは \$HOME/opt 以下にインストールした.

$ ls ~/opt/bin/pdp11-aout-* ~/opt/pdp11-aout/bin ~/opt/pdp11-aout/lib
/home/pine/opt/bin/pdp11-aout-addr2line /home/pine/opt/bin/pdp11-aout-ld /home/pine/opt/bin/pdp11-aout-readelf
/home/pine/opt/bin/pdp11-aout-ar /home/pine/opt/bin/pdp11-aout-ld.bfd /home/pine/opt/bin/pdp11-aout-size
/home/pine/opt/bin/pdp11-aout-as /home/pine/opt/bin/pdp11-aout-nm /home/pine/opt/bin/pdp11-aout-strings
/home/pine/opt/bin/pdp11-aout-c++filt /home/pine/opt/bin/pdp11-aout-objcopy /home/pine/opt/bin/pdp11-aout-strip
/home/pine/opt/bin/pdp11-aout-elfedit /home/pine/opt/bin/pdp11-aout-objdump
/home/pine/opt/bin/pdp11-aout-gprof /home/pine/opt/bin/pdp11-aout-ranlib

/home/pine/opt/pdp11-aout/bin/:
ar as ld ld.bfd nm objcopy objdump ranlib readelf strip

/home/pine/opt/pdp11-aout/lib/:
ldscripts


bin2load


実際に SimH での実行イメージを作成するツールである.
Git リポジトリー からダウンロードできる.
コンパイルは UNIX ライクなシステムなら問題なくできるだろう.


ldaout.cmd


以下の内容を ldaout.cmd という名前で保存する.


OUTPUT_FORMAT("a.out-pdp11")
ENTRY(start)
phys = 00001000;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
. = ALIGN(0100);
}
.data : AT(phys + (data - code))
{
data = .;
*(.data)
. = ALIGN(0100);
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(.bss)
. = ALIGN(0100);
}
end = .;
}

2023年01月03日

システム管理: パッケージのアップデート


https://cdn.openbsd.org/pub/OpenBSD/snapshots/packages/amd64/

が存在するようになったので, パッケージのアップデートを行う.

# pkg_add -uv

2023年01月02日

OpenBSD のアップグレードと Emacs HEAD のコンパイル・インストール ── 2023 年 1 月 (2)

ベースシステムのコンパイルが終わったので, マージ作業を行う.

# sysmerge # システム関連の各種ファイルのアップデート
# cd /dev/ && ./MAKEDEV all # デバイスファイルの作成


X のコンパイル.

# cd /usr/xenocara
# make bootstrap
# make obj
# make build

問題無く終了した. 先月発生した twm のコンパイルエラーは発生しなくなっていた.

パッケージのアップデート.
いつものように

# pkg_add -uv

を実行したところ,

https://cdn.openbsd.org/pub/OpenBSD/snapshots/packages/amd64/: no such dir

というエラーが出力された.
確かめてみると, 実際に上記の URL で指定される amd64 用のパッケージのスナップショットが存在しない.
とりあえず, パッケージのアップデートは行わないでおく.

続いて Emacs のコンパイル・インストールを行う.

$ export AUTOCONF_VERSION="2.71"
$ export AUTOMAKE_VERSION="1.16"
$ ./autogen.sh
$ ./configure \
'CFLAGS=-I/usr/include -I/usr/X11R6/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -lgccjit' \
--prefix=/usr/local \
--mandir=/usr/local/share/man \
--infodir=/usr/local/info \
--with-x-toolkit=athena \
--with-imagemagick \
--with-xaw3d \
--with-x \
--without-xim \
--with-xpm=ifavailable \
--with-native-compilation
$ git pull
$ gmake bootstrap
$ gmake check
# gmake install

Emacs のバージョンが先月から 30.0.50 になったが, Emacs30 は Emacs29 と比較して, テキスト入力時のパフォーマンスが著しく悪くなっていた.
少し使ってみたところ, 今回の Emacs HEAD で, それは改善されている.
快適なテキスト入力が行える.
ファン
検索
<< 2024年12月 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事(59)
社会復帰(22)
(44)
コンピューター(211)
(1463)
借金(8)
勉強(13)
(13)
数学(97)
運動(8)
日常生活(1407)
(204)
健康(38)
読書(21)
プロフィール

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 メンタルヘルスブログ うつ病(鬱病)へ
にほんブログ村
にほんブログ村 科学ブログ 数学へ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村