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

2023年01月01日

OpenBSD のアップグレード作業 ── 2023 年 1 月 (1)

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

$ 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

続きは明日行う.

2022年12月05日

Emacs: emacsclient が動かない問題

Emacs30 にアップデートしてから emacsclient が動かなくなった.

実行すると

$ emacsclient foo
Waiting for Emacs...
*ERROR*: Wrong number of arguments: #, 5

というエラーが出て Emacs 側のバッファーが開かない.

これはとても困るので調べた.

上記のエラーを検索すると, 2020 年にすでに報告されていて, 解決方法も server-switch-buffer: Adjust advice for emacs 28 で提示されている.

server-switch-buffer--with-editor-server-window-alist という関数は with-editor.el という Emacs Lisp ファイル内で定義されている.
そして, 自分の Emacs 環境では with-editor.el というファイルは

(1) \$HOME/.emacs.d/elpa/with-editor-20190715.2007/with-editor.el
(2) \$HOME/.emacs.d/elpa/with-editor-20201030.1232/with-editor.el
(3) \$HOME/.emacs.d/elpa/with-editor-20220608.1017/with-editor.el

の 3 種類存在する. 上記のサイトで提示されたパッチが適用されているのは (2), (3) で, 古い (1) には適用されていない.

ところが, Emacs は (1) の古い with-editor.el を呼びに行っていて, その結果上記の emacsclient のエラーが発生している.
なぜ古い方のファイルを参照するのか, 理由はわからない.

それで, 次の作業を行った.
パッチが適用されている (2), (3) の with-editor パッケージを残して, 古い (1) を削除する.
native lisp のキャッシュも削除する.

$ cd ~/.emacs.d/elpa
$ rm -rf with-editor-20190715.2007
$ cd ~/.emacs.d/eln-cache
$ rm -rf *


これで Emacs を起動し直したところ, emacsclient が正常に動作するようになった.

2022年12月04日

Emacs: Wanderlust を再インストールする

Emacs 30.0.50 の Wanderlust でメールを送信した後, もう一通メールを送ろうとしたら,

Timer already expired

というメッセージが出てメールの草稿を書く画面に切り換わらない.
2 通目のメールが書けない.

Emacs を立ち上げ直して,
(1) 自分宛にテストメールを送る.
(2) 自分宛に 2 通目のテストメールを送る.
ということを試してみたが, やはり上記のメッセージが出てメールの草稿画面に切り換わらない.
これでは, Emacs の起動毎に 1 通しかメールが送れないことになる.

さすがに困る.

Wanderlust の設定に間違いは無いと思うので, とりあえず Wanderlust を再コンパイルしてみた.

- APEL: ~/src/apel
- FLIM: ~/src/flim
- SEMI: ~/src/semi
- Wanderlust: ~/src/wanderlust

の順にコンパイル・インストールを行う.

$ cd ~/src/apel
$ git pull
$ make install LISPDIR=~/.emacs.d/lisp VERSION_SPECIFIC_LISPDIR=~/.emacs.d/lisp
$ cd ~/src/flim
$ git pull
$ make install LISPDIR=~/.emacs.d/lisp
$ cd ~/src/semi
$ git pull
$ make install LISPDIR=~/.emacs.d/lisp
$ cd ~/src/wanderlust
$ git pull
$ make install LISPDIR=~/.emacs.d/lisp PIXMAPDIR=~/.emacs.d/etc/wl/icons

これで Emacs を起動し直して, 再度上記テストを行ったところ, 無事 2 通目のメールを送ることができた.

メールは普段から使うアプリケーションなだけに, 解決してほっとした.

2022年12月02日

システム管理: OpenBSD のシステムアップグレード他 ── 2022 年 12 月 (2)

昨日の続き.

OpenBSD ベースシステムのコンパイルが終わったので, マージする.

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


X のコンパイルを行う.

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

make build の実行中, 先月と同じく twm のコンパイルでエラーとなった.
調べたら, twmrc_error_prefix という関数が void 型に宣言されていることで型の不一致の問題が起きている.
int 型に宣言し直すことでコンパイルが通るようになった.
残りは順調に終わる.

パッケージのアップデートを行う.

# pkg_add -uv

アップデートの結果, それまで行えていた TeX ファイルのコンパイルがエラーになる.
カスタマイズで定義していたいくつかのコマンドが, TeX 本体でも定義されて名前が衝突したことが原因だった.
それらのコマンドをコメントアウトすることで解決した.

それから Emacs のアップデートを行う.
やったことは libgccjit の再コンパイルと Emacs のコンパイル・インストールである.
Emacs のバージョンが 30.0.50 になっている.

M-x emacs-version
GNU Emacs 30.0.50 (build 1, x86_64-unknown-openbsd7.2, X toolkit, cairo version 1.17.6, Xaw3d scroll bars) of 2022-12-02

emacs30 に関する情報を調べようと思い, NEWS ファイルを見たがまだ何も書かれていない.

発生した問題は以下の通り:
・ コンパイル時, configure が libXpm が存在しないというエラーを出す. 解決できず. --with-xpm=ifavailable オプションを付けて configure を実行した.
・ emacsclient が実行できない.

*ERROR*: Wrong number of arguments: #, 5

というエラーが出て Emacs のバッファーが開かない. magit-mode でも git-commit 時に emacsclient を使用しているのでこれは困る.
今のところ解決できていない.

2022年12月01日

システム管理: OpenBSD のシステムアップグレード ── 2022 年 12 月 (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 # システムを最新のスナップショットにアップグレードする.

これで, 最新のスナップショットがインストールされ, システムが再起動する.

ところがブート時にエラーが発生した.

urtwn0: timeout waiting for firmware readiness

urtwn0 というのは使用しているネットワークインターフェースである.
以前にもこのエラーは出たことがある.

このエラーが出てもシステムは起動するのだが, 起動後にネットワークに接続できない.
何度か再起動 (shutdown -r now) を繰り返すが解決しない.

そのうち, ブートが次のエラーで停止してしまった.

panic: tsc_test_sync_ap: cpu6: tsc_ap_name is not NULL: cpu5

仕方が無いので電源を切ってから再びシステムを起動する.

すると, 上述のネットワークエラーも出ず, 正常にシステムが起動した.
ネットワークへの接続も行えている.
一度電源を切ったのがよかったのかも知れない.

カーネルをコンパイル・インストールする.

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

次にベースシステムをコンパイルする.

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

いつも通り, コンパイルはうまく進んでも半日以上かかるだろう.
プロセスを走らせて区切りを付ける.

2022年11月23日

システム管理: macOS からの ".DS_Store", "._*" ファイルを削除する

macOS と OpenBSD のデュアルブート構成にした際, 必要なファイルは Dropbox 経由で macOS から持ってきた.

その際, macOS のファイルシステムに特有のファイルである .DS_Store や "._" で始まる名前のファイルも OpenBSD 側にコピーされた.
これらはファインダーの見映えや, ファイルのリソースを保持するファイルだが, OpenBSD では存在する意味は無い.

以前から余計だなと気になっていた.

今日, とうとう削除した.

$ cd ~
$ find . \( -name ".DS_Store" -o -name "._*" \) -exec rm -rf {} \;

find コマンドを実行するだけだが, こういうことは気が向かないとやれないのだ.

2022年09月16日

Emacs: libgccjit のコンパイル

libgccjit は GCC に含まれるモジュールで, Gcc Emacs によって使用される.

そのコンパイル手順を整理したので, メモとしてまとめておく.

(1) OpenBSD の ports で提供される GCC 11.2.0 用のパッチを利用するため, GCC 11.2.0 をダウンロードする.
ソースコードは, \$HOME/src/gcc-11.2.0 以下に展開した.
(2) 作業用のディレクトリーを作成する. ここでは \$HOME/src/obj/obj-jit とする.

$ mkdir -p ~/src/obj/obj-jit

(3) ports によって提供されている GCC 11.2.0 用のパッチをコピーする.

$ cp -r /usr/ports/lang/gcc/11/patches ~/src/obj/obj-jit

(4) libgccjit 用のパッチファイル patch-gcc_jit_libgccjit_c:

Index: gcc/jit/libgccjit.c
--- gcc/jit/libgccjit.c.orig
+++ gcc/jit/libgccjit.c
@@ -3474,3 +3474,9 @@
RETURN_IF_FAIL (asm_stmts, ctxt, NULL, "NULL asm_stmts");
ctxt->add_top_level_asm (loc, asm_stmts);
}
+
+const char *
+fname_as_string(int pretty_p __attribute__((__unused__)))
+{
+ return NULL;
+}

を作成して \$HOME/src/obj/obj-jit/patches 以下に置く.
(5) パッチを適用する.

$ cd ~/src/gcc-11.2.0
$ for i in ~/src/obj/obj-jit/patches/*; do \
patch -p0 < $i \
done

(6) GCC をコンパイルする.

$ cd ~/src/obj/obj-jit
$ ~/src/gcc-11.2.0/configure \
'CFLAGS=-I/usr/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/local/lib' \
--with-as=/usr/local/bin/gas \
--verbose \
--program-transform-name=s,^,e, \
--disable-nls \
--with-system-zlib \
--disable-libmudflap \
--disable-libgomp \
--disable-libssp \
--disable-tls \
--with-gnu-ld \
--with-gnu-as \
--enable-threads=posix \
--enable-wchar_t \
--with-gmp=/usr/local \
--enable-languages=c++,jit \
--enable-host-shared \
--disable-libstdcxx-pch \
--enable-default-ssp \
--enable-default-pie \
--without-isl \
--disable-bootstrap
$ gmake

ここで configure スクリプトに与えているオプションは, ports の GCC の Makefile: /usr/ports/lang/gcc/11/Makefile を参考にしたものである.
--enable-languages オプションの引数に jit を与えて libgccjit の作成を指定し, そのために必要な --enable-host-shared オプションも指定する.
また, 途中で発生するコンパイルエラーを回避するために --disable-bootstrap オプションを追加している.
これにより, 共有ライブラリー libgccjit.so.0.0.1 が作成される.
ただしその後, 本体の gcc のコンパイルの途中で失敗する.

configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.

この原因は掴めていないので今後調べる.
(7) libgccjit をインストールする. インストール先は /usr/local 以下でもよいが, 今回は \$HOME/opt 以下とする.

$ install -c -m 644 ~/src/gcc-11.2.0/gcc/jit/libgccjit.h ~/opt/include
$ install -c -m 755 ~/src/obj/obj-jit/gcc/libgccjit.so.0.0.1 ~/opt/lib
$ cd ~/opt/lib
$ ln -s libgccjit.so.0.0.1 libgccjit.so.0
$ ln -s libgccjit.so.0 libgccjit.so

この手順では libgccjit が標準的でない場所にインストールされている.
したがって, この libgccjit を使ってコンパイルされたプログラム (たとえば Gcc Emacs) を実行する際には環境変数 LD_LIBRARY_PATH を指定する.

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/opt/lib

2022年09月15日

Emacs: Gcc Emacs のコンパイル・インストール

Gcc Emacs では Emacs Lisp ファイルをネイティブコンパイルするために libgccjit を用いる.

[Bug jit/103016] libgccjit on OpenBSD-7.0 fails with bootstrap-emacs:/usr/local/lib/libgccjit.so.0.0.1: undefined symbol '_Z15fname_as_stringi' を参考にして, GCC 11.2.0 (OpenBSD にインストールされているものと同じバージョン) にパッチを当ててコンパイルしたところ, libgccjit が作成できた.

$HOME/opt 以下に libgccjit のライブラリファイル libgccjit.so*, インクルードファイル libgccjit.h をインストールする.
この作業は試行錯誤しながら行ったため, 全体が自分でも把握できていない.
明日にでも整理する.

以上の準備の元で, Emacs をコンパイル・インストールする.
configure スクリプトの実行の際に, Emacs Lisp ファイルのネイティブコンパイルをサポートするために --with-native-compilation オプションを指定する.

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/opt/lib
$ cd ~/src/emacs.HEAD/emacs
$ export AUTOCONF_VERSION="2.71"
$ export AUTOMAKE_VERSION="1.16"
$ ./autogen.sh
$ ./configure \
'CC=egcc' \
'CFLAGS=-I/usr/include -I/usr/X11R6/include -I/usr/local/include -I/home/sokohiko/opt/include' \
'LDFLAGS=-L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -L/home/sokohiko/opt/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-native-compilation
$ gmake bootstrap
$ gmake check
# gmake install

libgccjit.so は直接 /usr/local/lib にインストールしてもいいのかも知れないが, とりあえず \$HOME/opt 以下に置くことにする.

上の手順で Emacs をコンパイルすると, native-lisp というディレクトリーができて, その下に .eln という識別子を持つ各 Emacs Lisp ファイルのネイティブコンパイルされたイメージが作成される.

また, 作成された Gcc Emacs は, 使用中にロードされた Emacs Lisp ファイルを逐次ネイティブコンパイルして \$HOME/.emacs.d/eln-cache というディレクトリー以下に保存していく.

まだパフォーマンスの改善は実感できていないが, 使っていくことにする.

2022年08月03日

Emacs: Emacs HEAD のコンパイル・インストール

Emacs HEAD をダウンロードしてきて, コンパイルしたところ, 以下のエラーメッセージが出てエラーとなった.

cedet/semantic/symref/list.el:35:2:
Error: Given parent class semantic-displayer-abstract is not a class

./lisp/cedet/semantic/symref/list.el をバイトコンパイルして .elc ファイルを生成することができない.

Makefile を見ると,

./src/emacs -batch --no-site-file --no-site-lisp \
-l comp -f batch-byte-compile list.el

の実行でエラーとなっている.

しかし, Emacs から対話的に

M-x byte-compile-file list.el

を実行するとバイトコンパイルに成功して .elc ファイルが生成される.

付け焼刃だが, これでビルドを継続してコンパイルを終了する.

M-x emacs-version
GNU Emacs 29.0.50 (build 1, x86_64-unknown-openbsd7.2, X toolkit,
cairo version 1.17.6, Xaw3d scroll bars) of 2022-08-03
タグ:Emacs29

2022年08月02日

システム管理: OpenBSD のシステムアップグレード ── 2022 年 8 月 (2)

昨日から走らせているベースシステムのコンパイルを一旦中断して macOS で作業をした.

再び OpenBSD を立ち上げる.
ベースシステムのコンパイルは, make build を実行すれば, すでに作成されたオブジェクトファイルはそのまま保持されてコンパイルは途中から再開される.
ところが誤って

# make config && make build

を実行してしまったために, クリーンアッププロセスが走ってしまい, ベースシステムの構築を一からやり直す結果になってしまう.
13 時間かかるので, 終わるのは 16 時頃になる.

夕方にベースシステムのコンパイルが終わったので, それらをシステムにマージし, デバイスファイルを作成する.

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

さらに X のコンパイルを行う.

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

最後にインストールされている ports パッケージのアップグレードを行う.

# pkg_add -uv

これで OpenBSD のシステムアップグレードが終了した.

$ uname -a
OpenBSD mybsd.local 7.2 GENERIC.MP#7 amd64
ファン
検索
<< 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技術ブログ プログラム・プログラマーへ
にほんブログ村