NBUG 2017年12⽉例会
2017年のLUNA
& KARLについて
Nagoya *BSD Users' Group
Kenji Aoyama / ⻘⼭ 健治
Twitter: @ao_kenji
2
ハック編(1):CP/M on XP
•LUNAのXP(I/Oプロセッサ)はZ80上位互換
•勝手ファームウェアでCP/M動かしてみました
2017年のLUNA
3
ハック編(2):LUNA-88KのPSG
•配線がなかった出⼒信号を無理やり取り出し
•XPで動く音源ドライバをつついさんより借用
2017年のLUNA
4
出撃編(1):AsiaBSDCon 2017
•AsiaBSDConに召喚されました:-)
2017年のLUNA
5
出撃編(2):OSC 2017 Nagoya
•今回は⿊88K(無印)で出撃
•PSGデモしました
•持参ディスプレイ不調…
→えとみさんより
SoGディスプレイ借用
SoGディスプレイがすぐ出てくる
のがNBUGですねぇ
• LUNA(68k)にならって
そろそろVGA出⼒オプション
改造必要?
2017年のLUNA
6
コミット編:細々と続けております
•xp(4) man page
•ドライバはつついさんに作ってもらったのでせ
めてマニュアルだけでも…
•シリアル周りの softint 化
•NetBSD/luna68kの実装をほぼそのまま導入
•KARL対応(後述)とld.soバグ対応
•Miodさんいつもありがとうございます
2017年のLUNA
7
リリース編:なんとか間に合いました
•OpenBSD 6.1, Released April 11, 2017
•OpenBSD 6.2, Released October 9, 2017
•最近は tree locked からリリースまでが短縮
•5⽉1日、11⽉1日より早くなった
•CD-ROM作らなくなったから?
•Luna88kだとリリースバイナリ作成に2週間 :-<
2017年のLUNA
8
OpenBSD 6.2の新機能:KARL
•KARL: Kernel Address Randomized Link (KARL)
a new "link-kit" allows the .o files of the kernel to be
relinked in a random order, creating a unique kernel
for each boot.
•カーネルのメモリ配置を毎回変えてセキュリティを
高める
•ちなみに 6.0 以降は、libc も起動時に毎回ランダム
にリンクし直すようになっています
(luna88kでは起動が遅くなるのでコメントアウト運用:-)
Port maintainerから⾒た
9
KARL:ざっくりと解説(1)
•カーネルをmake installする時にオブジェクトファ
イルとMakefile等一式を
/usr/share/compile/${KERNEL}/ にコピー
# pwd
/usr/src/sys/arch/amd64/compile/GENERIC.MP
# make install
mkdir -p -m 700 /usr/share/compile
rm -rf /usr/share/compile/GENERIC.MP /usr/share/compile.tgz
mkdir /usr/share/compile/GENERIC.MP
tar -chf - Makefile makegap.sh ld.script *.o | tar -C /usr/share/compile/GENERIC.MP -xf -
cmp -s bsd /bsd || ln -f /bsd /obsd
umask 077 && cp bsd /nbsd && mv /nbsd /bsd && sha256 -h /var/db/kernel.SHA256 /bsd
#
10
KARL:ざっくりと解説(2)
•起動時、/etc/rc の最後で再度カーネルをリンク
•次回起動時はこのカーネルが使われる
:
# Re-link the kernel, placing the objects in a random order.
# Replace current with relinked kernel and inform root about it.
/usr/libexec/reorder_kernel &
:
cd $COMPILE_DIR/$KERNEL
make newbsd
make newinstall
echo "¥nKernel has been relinked and is active on next reboot.¥n"
/usr/libexec/reorder_kernel の最後
/etc/rc の最後
カーネルの .o ファイルがあるディレクトリで
make && make install する
… もう一度リンクすると何が変わるのか?
11
KARL:ざっくりと解説(3)
•新しいカーネルをリンクするときに、オブジェクト
ファイルをランダムな順番で配置する
SYSTEM_LD= @echo ${LD} ${LINKFLAGS} -o $@ '$${SYSTEM_HEAD} vers.o $${OBJS}'; ¥
umask 007; ¥
echo ${OBJS} param.o ioconf.o vers.o | tr " " "¥n" | ${SORTR} > lorder; ¥
${LD} ${LINKFLAGS} -o $@ ${SYSTEM_HEAD} `cat lorder`
(中略)
newbsd:
${MAKE_GAP}
${SYSTEM_LD_HEAD}
${SYSTEM_LD} swapgeneric.o
${SYSTEM_LD_TAIL}
mv -f newbsd bsd
カーネル Makefile 抜粋
“sort –R”でランダム
に並べ替え
12
KARL:ざっくりと解説(4)
http://gihyo.jp/admin/serial/01/bsd-yomoyama/0122
BSD界隈四方⼭話
第122回での検証
/bsdは次回起動時に使
われるカーネル
起動したカーネルは
/bsd.bootedとして保
存される
MD5ハッシュ値を⾒る
と、毎回違うカーネル
が使われていることが
分かる
13
まとめ & 来年に向けて
•今年もなんとか公式portとして生き延びました
•OSC名古屋まで5か⽉
•そろそろ仕込みを始めないと
•その前にネタどうしよう?
14
おまけ
•入手したのですがあまりいじれない…

OpenBSD/luna88k development & hack in 2017