EBUG勉強会/20221126_NSHonFuguIta
をテンプレートにして作成
Start:
#topicpath
*河豚板でルータを作る ~ アプライアンスの製作例
RIGHT:EBUG 第83回会合 2022年11月26日 ~
川俣吉広、kaw@on.rim.or.jp
*概要
EBUGの勉強会では、2014年5月に[[実用で使う河豚板>EBUG勉強...
今回はNSH (network config shell)の河豚板への組み込みを例...
**作業の流れ
導入作業の全体の流れは下図の通り:
初回起動 +------------------...
[LiveUSBの作成]-->[起動(モード0)]-->|河豚板の設定: ...
手動 | 終了時のファイル...
| 起動時の自動読込...
| etc... ...
+------------------...
...
+--------------------[reboot]-------------...
| ...
| 2回目の起動 +------------------...
+-->[起動(モード3)]-->|NSHのインストール...
自動 +------------------...
...
+--------------------[reboot]-------------...
| ...
| 3回目以降の起動 +------------------...
Power On----->+-->[起動(モード3)]-->|NSHの運用 ...
^ 自動 +------------------...
| ...
Power Off<----+--------------------[halt or reboot]-----...
**NSHについて
プロジェクトホームページ: https://www.nmedia.net/nsh/ より
>'''NSH は、OpenBSD ベースのネットワークアプライアンスを...
'''nshによってカプセル化されたデーモンとサービス: pf, osp...
-GitHubリポジトリ: https://github.com/yellowman/nsh
-紹介動画: [[nsh: Network Shell on top of OpenBSD made fo...
期間限定で以下のリンクを作成した
-オンラインマニュアル: https://home.fuguita.org/nsh.8.htm...
([[自動翻訳版>https://home-fuguita-org.translate.goog/nsh...
作者のChris Cappuccio氏はまた、フラッシュデバイスで動作す...
----
#contents
*LiveUSB版河豚板を作成
**ダウンロード
[[ダウンロードミラー一覧>FuguIta/Download]]からよさげな場...
# ftp https://jp2.dl.fuguita.org/SHA256
Trying 160.16.199.59...
Requesting https://jp2.dl.fuguita.org/SHA256
100% |**************************************************...
640 bytes received in 0.00 seconds (2.65 MB/s)
# ftp https://jp2.dl.fuguita.org/FuguIta-7.2-amd64-20221...
Trying 160.16.199.59...
Requesting https://jp2.dl.fuguita.org/FuguIta-7.2-amd64-...
100% |**************************************************...
348583114 bytes received in 32.14 seconds (10.34 MB/s)
**ファイルの整合性チェック
MD5かSHA256のいずれかを用いてダウンロードしたファイルが壊...
# sha256 -C SHA256 FuguIta-7.2-amd64-202211151.img.gz
(SHA256) FuguIta-7.2-amd64-202211151.img.gz: OK
**デバイスに書込み
# zcat FuguIta-7.2-amd64-nsh_test.img.gz | dd of=/dev/rs...
/dev/rsdXcには適宜デバイス名を充当して実行。
*初回起ち上げ
**システムデバイスの指定
scanning partitions: sd0a sd0d sd0i
FuguIta's operating device(s): sd0a.
Which is FuguIta's operating device? [default: sd0a] ->
河豚板デバイスを一つだけ装着しているので、デフォルト(ENTE...
**MFSサイズの指定
available memory: 2031M
Enter mfs size.
You can add suffix K, M, or G.
% is a percentage of memory size.
and %% is a percentage of the total memory and swap.
otherwise considered "megabytes"
[default: 1523M] ->
set mfs size to 1523MB
デフォルトでは、実装メモリの75%をMFSに割り当てる。~
(実測したところ、物理メモリは192MB程度以上実装されていれ...
**起動モードの指定
LiveUSBの標準的なモードである起動モード0で起動。
Boot modes:
0: fresh boot - standard mode as a live system
1: fresh boot - less memory, faster boot
(/usr is non-writable, can't pkg_add)
2: fresh boot - works using only RAM
(about 1GB or more of RAM required)
3: boot with retrieving saved files from storage device
or enter passphrase for an encrypted volume
4: boot with retrieving saved files from floppy disk
5: interactive shell for maintenance
-> 0
Running manual setup.
モード2での起動も可。この場合、運用中は完全オン・メモリ...
この後、OSが動作するための基本的な設定について訊かれてゆ...
**rootパスワード
Changing password for root.
New password:
Retype new password:
passwd: password updated successfully
簡単すぎるパスワードは弾かれるので注意。
**ネットワーク関連の設定
ここでの設定は、河豚板をネットワーククライアントとして使...
今回、ルータなどとしての使用を想定しているので、複数のネ...
それらの設定は、起動後にrootでログインして行うか、あるい...
***ホスト名
Hostname with domain part (FQDN):
only host name without domain part is also OK.
-> nshrouter.local
***IPバージョン
今回はIPv4のみでの運用を想定
IP protocol version(s) to be enabled: 4, 6, 46, 64 or "n...
4: enable only IPv4
6: enable only IPv6
46: give priority to IPv4 name resolution
64: give priority to IPv6 name resolution
none: operate as standalone
[64] ->4
***ネットワークインターフェース
Network Interfaces: Choose one
NIC type Name
-------- ----- ------------
vio0 ether unknown
[vio0] ->
***IPアドレス、デフォルトルート
IPv4 - address and routing:
Enter "auto" or "IPv4_address[/mask] [default_gateway]"
"auto" is an automatic setting by DHCP.
The "/mask" part can be specified in either format,
such as "/255.255.255.0" or "/24".
If there is no default gateway,
set the second field to "none" or leave it blank.
[auto] -> 100.64.1.3/31 100.64.1.2
***ネームサーバ
DNS servers: up to 3 IP addresses, separated by spaces
-> 9.9.9.9
**ログイン方法
Do you login with C)onsole or X) Window System?
[default: C] ->
この後、OpenBSD本来のブートシーケンスが続き、最後にログイ...
*ルートでログインして諸々設定
起動が完了し、ログインプロンプトが表示されたら、先ほど設...
**タイムゾーン
nshrouter# date
Tue Nov 22 05:28:53 UTC 2022
nshrouter# ln -sf usr/share/zoneinfo/Asia/Tokyo /etc/loc...
nshrouter# date
Tue Nov 22 14:29:02 JST 2022
**シャットダウン時のファイル自動保存
河豚板では、MFS上のデータをUSBメモリ等に保存するにはusbfa...
nshrouter# vi /etc/rc.shutdown
force_umount=No # set Yes for forced umount /ram at sh...
force_resync=Yes # set Yes to re-sync at shutdown <== ...
# stop_all_daemons - to eliminate all daemons at umount ...
#
stop_all_daemons () {
:
:
**起動時の設定の自動化
USBメモリ内のnoasksというファイルを編集することにより、起...
前回の終了時に保存したファイルの読み込みも、このnoasks内...
nshrouter# mount /dev/sd0d /mnt
nshrouter# vi /mnt/livecd-config/7.2/amd64/noasks
#
# noasks - parameter settings for non-interactive boot
#
# Make statements uncommented
# Then assign real values
#
#
# FuguIta system device
# - Use one of two lines
#noask_rdev=sd0a # device name format
noask_rdev=3b5447abd772121d.a # DUID format <==河豚板...
# 常に同...
# mfs size in MB ので、D...
noask_umem=75% <==MFSのサイズ による...
#
# boot mode
noask_setup_rw_mode=3 <==起動モード 3=保存されたファイ...
#
# storage device
# - Use one of two lines
#noask_confdev=sd0d # device name format
noask_confdev=3b5447abd772121d.d # DUID format <==ファ...
# noas...
# data set name in USB flash drive
noask_confdir=nshrouter <==読み込むファイルの保存名
nshrouter# umount /mnt
*リブートの動作確認
**ここまでの設定をとりあえず保存
usbfadmを起動し、保存先、保存名を指定して保存を実行
nshrouter# usbfadm
Welcome to usbfadm.
USB flash drive administration tool for FuguIta
Version/Arch: 7.2/amd64 (FuguIta-7.2-amd64-202211151)
Boot mode: manual
Target device: not set
Data saved as: not set
readline capability available
TAB to complete the reserved words
Type ? for help.
? : ? ->target
Searching storage device
Please make sure the device inserted.
Then press ENTER ->
sd0a +sd0d
target device->sd0d
sd0d : ? ->saveas
Name of saved data->nshrouter
Your data will be saved as ``nshrouter''.
sd0d : nshrouter ->sync
Sync current mfs as ``nshrouter'' , OK? [y/N] -> y
34.4MiB 0:00:04 [8.57MiB/s] [===========================...
waiting for pax to finish ... syncing ... done.
sd0d : nshrouter ->quit
Bye bye...
nshrouter#
**リブート
nshrouter# reboot
チェック項目
-シャットダウン時にファイルが自動保存されるか?
-再起動時に自動で立ち上がるか?
-再起動完了後、保存時の環境が復帰されているか?
*NSH関連の設定
**NSHのインストール
packagesからインストールする
nshrouter# pkg_add nsh
quirks-6.42(signed) 2022-11-20T19:34:54Z
quirks-6.42:ok
Ambiguous:
a 0: <None>
1: nsh-1.0.20220919
2: nsh-1.0.20220919-static
Your choice: 1
nsh-1.0.20220919:ok
nshrouter# nsh
% NSH v1.0
nshrouter.local/quit
% Session terminated.
nshrouter#
nsh-1.0.20220919-staticは、NSHの静的リンク版(chrootして実...
注: 時計がずれているとTLS通信が失敗し、pkg_addが不成功に...
nshrouter# rdate ntp.nict.jp
などとして時刻を合わせる。
**NSHの実行アカウントを作成
adduserコマンドは初回実行時、adduser.confの作成について色...
nshrouter# adduser nsh
Couldn't find /etc/adduser.conf: creating a new adduser ...
Reading /etc/shells
Enter your default shell: csh ksh nologin nsh sh [ksh]:
Your default shell is: ksh -> /bin/ksh
Default login class: authpf bgpd daemon default pbuild s...
[default]:
Enter your default HOME partition: [/home]:
Copy dotfiles from: /etc/skel no [/etc/skel]:
Send welcome message?: /path/file default no [no]:
Do not send message(s)
Prompt for passwords by default (y/n) [y]:
Default encryption method for passwords: auto blowfish [...
Use option ``-silent'' if you don't want to see all warn...
Reading /etc/shells
Check /etc/master.passwd
Check /etc/group
Ok, let's go.
Don't worry about mistakes. There will be a chance later...
Enter username []: nsh
Enter full name []: Network SHell
Enter shell csh ksh nologin nsh sh [ksh]:
Uid [1000]:
Login group nsh [nsh]:
Login group is ``nsh''. Invite nsh into other groups: gu...
[no]: wheel
Login class authpf bgpd daemon default pbuild staff unbo...
[default]:
Enter password []:
Enter password again []:
Name: nsh
Password: ****
Fullname: Network SHell
Uid: 1000
Gid: 1000 (nsh)
Groups: nsh wheel
Login Class: default
HOME: /home/nsh
Shell: /bin/ksh
OK? (y/n) [y]: y
Added user ``nsh''
Copy files from /etc/skel to /home/nsh
Add another user? (y/n) [y]: n
Goodbye!
nshrouter# exit
OpenBSD/amd64 (nshrouter.local) (tty00)
login: nsh
Password:
NSHはroot権限でコマンドを実行するので、nshアカウントはwhe...
***/home/nsh/.profileの編集
ログイン直後にroot権限でNSHが実行されるようにする。
nshrouter$ vi ~/.profile
exec doas /usr/local/bin/nsh
exit # for fail safe
pkg_addでNSHをインストールすると、/etc/shellsにnshが登録...
>nsh(8) Section 7 > Adding system users to:~
'''Do NOT add nwrapper (or nsh) to /etc/shells. They shou...
***/etc/doas.confの編集
ユーザnshがパスワード無しでroot権限のnshを実行できるよう...
nshrouter# echo permit nopass nsh cmd /usr/local/bin/nsh...
***設定の保存
以上で、ユーザアカウントnshでログインするとnshが起動する...
念の為、ここまでの状態をUSBメモリに保存しておく
nshrouter# usbfadm -r
========================================
= Sync /dev/sd0d with current mfs as nshrouter
=
sending incremental file list
etc/fstab
154 100% 0.00kB/s 0:00:00 (xfr#1, ir-c...
:
:
var/spool/smtpd/purge/2135993693/
var/spool/smtpd/temporary/
nshrouter#
一度、保存を行っている場合はコマンドラインから usbfadm -r...
データ保存の初回実行時はpaxを使用し、次回からはrsyncによ...
*トラブルシューティング
**OpenNTPDの設定で警告が出る
% NSH v1.0
nshrouter.local/enable
nshrouter.local(p)/ntp edit
servers ntp.nict.jp
configuration OK
nshrouter.local(p)/ntp disable
-s option no longer works and will be removed soon. ...
Please reconfigure to use constraints or trusted servers...
nshrouter.local(p)/ntp enable
-s option no longer works and will be removed soon.
Please reconfigure to use constraints or trusted servers.
nshrouter.local(p)/!ntpctl -s all <== ntpdの同期状態は...
0/5 peers valid, clock unsynced 呼出し、確認する。
peer
wt tl st next poll offset delay jitter
133.243.238.163 from pool ntp.nict.jp
1 3 1 2s 5s ---- peer not valid ----
133.243.238.164 from pool ntp.nict.jp
1 3 1 4s 7s ---- peer not valid ----
61.205.120.130 from pool ntp.nict.jp
1 3 1 2s 5s ---- peer not valid ----
133.243.238.243 from pool ntp.nict.jp
1 3 1 2s 5s ---- peer not valid ----
133.243.238.244 from pool ntp.nict.jp
1 3 1 3s 6s ---- peer not valid ----
nshrouter.local(p)/
NTPの参照サーバがntp.pool.orgからntp.nict.jpに変っている...
**nshからreboot/haltでファイルが自動保存されない
nshrouter.local(p)/reboot <= nshの特権モードでrebootを...
% Reboot initiated
syncing disks... done <= ファイルが自動保存されず、いき...
vmmci0: powerdown /etc/rc.shutdownが実行されない
rebooting...
Using drive 0, partition 3.
Loading......
probing: pc0 com0 mem[638K 2046M a20=on]
disk: hd0+
>> OpenBSD/amd64 BOOT 3.55/*
これに関しては、マニュアルページにも以下のような記述があ...
>reboot~
Restart the system. Warning no confirmation prompt is iss...
NSHのソースで該当部分を見てみる~
''commands.c''
/*
* Reboot
*/
int
nreboot(void)
{
printf ("%% Reboot initiated\n");
if (reboot (RB_AUTOBOOT) == -1) <== reboot(2)が...
printf("%% reboot: RB_AUTOBOOT: %s\n", s...
return(0);
}
int
halt(void)
{
printf ("%% Shutdown initiated\n");
if (reboot (RB_HALT) == -1) <== reboot(2)が呼び...
printf("%% reboot: RB_HALT: %s\n", strer...
return(0);
}
/etc/rc.shutdownが呼び出されないのは、nshがreboot(2)を直...
NSHからwrite-configでファイルに書き出した設定は河豚板では...
シャットダウン時に/etc/rc.shutdownが実行されるようにする...
**改修
ports treeを展開し、/usr/ports/shells/nsh 内にパッチファ...
''/usr/ports/shell/nsh/patches/patch-ctl_c''
--- ctl.c.orig Tue Sep 20 04:18:55 2022
+++ ctl.c Tue Nov 22 09:37:12 2022
@@ -412,7 +412,7 @@
char *ctl_ntp_test[] = { NTPD, "-nf", REQTEMP, NULL };
struct ctl ctl_ntp[] = {
{ "enable", "enable service",
- { NTPD, "-sf", REQTEMP, NULL }, NULL, DB_X_ENABLE,...
+ { NTPD, "-f", REQTEMP, NULL }, NULL, DB_X_ENABLE, ...
{ "disable", "disable service",
{ PKILL, table, "ntpd", NULL }, NULL, DB_X_DISABLE...
{ "edit", "edit configuration",
''/usr/ports/shell/nsh/patches/patch-commands_c''
--- commands.c.orig Tue Sep 20 04:18:55 2022
+++ commands.c Tue Nov 22 09:37:12 2022
@@ -1962,7 +1962,7 @@
nreboot(void)
{
printf ("%% Reboot initiated\n");
- if (reboot (RB_AUTOBOOT) == -1)
+ if (system("/sbin/reboot") == -1)
printf("%% reboot: RB_AUTOBOOT: %s\n", strerror(errno...
return(0);
}
@@ -1971,7 +1971,7 @@
halt(void)
{
printf ("%% Shutdown initiated\n");
- if (reboot (RB_HALT) == -1)
+ if (system("/sbin/halt -p") == -1)
printf("%% reboot: RB_HALT: %s\n", strerror(errno));
return(0);
}
portsにてパッチを適用し、ビルド
nshrouter# pkg_delete nsh
nsh-1.0.20220919:ok
Read shared items:ok
nshrouter# cd /usr/ports/shells/nsh
nshrouter# make install
===> Checking files for nsh-1.0.20220919
>> Fetch https://github.com/yellowman/nsh/archive/fcad0f...
>> (SHA256) nsh-1.0.20220919-fcad0f6a.tar.gz: OK
===> nsh-1.0.20220919 depends on: sqlite3-* -> sqlite3-3...
===> Verifying specs: c curses edit sqlite3
===> found c.96.2 curses.14.0 edit.5.2 sqlite3.37.20
===> Extracting for nsh-1.0.20220919
===> Patching for nsh-1.0.20220919 <== 今ほど追加し...
===> Applying OpenBSD patch patch-commands_c
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- commands.c.orig Tue Sep 20 04:18:55 2022
|+++ commands.c Tue Nov 22 09:37:12 2022
--------------------------
Patching file commands.c using Plan A...
Hunk #1 succeeded at 1962.
Hunk #2 succeeded at 1971.
done
===> Applying OpenBSD patch patch-ctl_c
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- ctl.c.orig Tue Sep 20 04:18:55 2022
|+++ ctl.c Tue Nov 22 09:37:12 2022
--------------------------
Patching file ctl.c using Plan A...
Hunk #1 succeeded at 412.
done
===> Compiler link: clang -> /usr/bin/clang
===> Compiler link: clang++ -> /usr/bin/clang++
===> Compiler link: cc -> /usr/bin/cc
===> Compiler link: c++ -> /usr/bin/c++
===> Generating configure for nsh-1.0.20220919
===> Configuring for nsh-1.0.20220919
===> Building for nsh-1.0.20220919
cc -O2 -pipe -Wmissing-prototypes -Wformat -Wall -Wbad-f...
sh /ram/usr/ports/pobj/nsh-1.0.20220919/nsh-fcad0f6af197...
:
:
cc -O2 -pipe -Wmissing-prototypes -Wformat -Wall -Wbad-f...
cc -L/usr/local/lib -o nsh arp.o compile.o main.o genge...
===> Faking installation for nsh-1.0.20220919
/usr/ports/pobj/nsh-1.0.20220919/bin/install -c -s -m 75...
===> Building package for nsh-1.0.20220919
Create /usr/ports/packages/amd64/all/nsh-1.0.20220919.tgz
:
:
Link to /usr/ports/packages/amd64/ftp/nsh-1.0.20220919.tgz
===> Verifying specs: c curses edit sqlite3
===> found c.96.2 curses.14.0 edit.5.2 sqlite3.37.20
===> Installing nsh-1.0.20220919 from /usr/ports/packag...
nsh-1.0.20220919:9ok
nshrouter# nsh
% NSH v1.0
nshrouter.local/enable
*雑感
NSHの利用についてはここまでで、ネットワーク機能の本格的な...
**nshの初期化について
''write-config''を実行すると/etc/nshrcに設定が保存される...
'''On the next startup of the system, this saved configur...
という記述があるが、次の起動では保存された設定は反映され...
nshの2つのコマンドラインオプション、
:-c '''config-script-file'''|''nsh'' execute the command(...
:-i '''rcfile'''|load the inital system configuration fro...
を指定しても、ファイル内のnshコマンドを実行した後、終了す...
''/etc/nshrc''は以下のように記述した方がよいかもしれない。
if [ -r /etc/nshrc ]; then
doas /usr/local/bin/nsh -i /etc/nshrc
fi
exec doas /usr/local/bin/nsh
exit # fail safe
**この構築手順を用いた他の事例
設定手順の[[ダウンロード>#wa1f8fa3]]から[[起動時の設定の...
以下の事例でもこの手順に従ってシステムを構築している。
-Qiita: [[OpenBSDライブシステム「河豚板」の日本語デスクト...
-[[How to port PFFW to FuguIta>FuguIta/BBS#r9e5ee9b]]
-[[Desktop environment demo of FuguIta>FuguIta/BBS#r9e5ee...
-[[isotop on FuguIta>FuguIta/BBS/10#vc6211a3]]
-[[温度測定システム>https://twitter.com/yoshi_kaw/status/...
*関連情報
-[[河豚板ガイド]]
-[[FuguIta Start Guide>FuguIta/StartGuide]]
-YouTube: [[Basic settings for FuguIta (OpenBSD-based Liv...
----
#topicpath
End:
#topicpath
*河豚板でルータを作る ~ アプライアンスの製作例
RIGHT:EBUG 第83回会合 2022年11月26日 ~
川俣吉広、kaw@on.rim.or.jp
*概要
EBUGの勉強会では、2014年5月に[[実用で使う河豚板>EBUG勉強...
今回はNSH (network config shell)の河豚板への組み込みを例...
**作業の流れ
導入作業の全体の流れは下図の通り:
初回起動 +------------------...
[LiveUSBの作成]-->[起動(モード0)]-->|河豚板の設定: ...
手動 | 終了時のファイル...
| 起動時の自動読込...
| etc... ...
+------------------...
...
+--------------------[reboot]-------------...
| ...
| 2回目の起動 +------------------...
+-->[起動(モード3)]-->|NSHのインストール...
自動 +------------------...
...
+--------------------[reboot]-------------...
| ...
| 3回目以降の起動 +------------------...
Power On----->+-->[起動(モード3)]-->|NSHの運用 ...
^ 自動 +------------------...
| ...
Power Off<----+--------------------[halt or reboot]-----...
**NSHについて
プロジェクトホームページ: https://www.nmedia.net/nsh/ より
>'''NSH は、OpenBSD ベースのネットワークアプライアンスを...
'''nshによってカプセル化されたデーモンとサービス: pf, osp...
-GitHubリポジトリ: https://github.com/yellowman/nsh
-紹介動画: [[nsh: Network Shell on top of OpenBSD made fo...
期間限定で以下のリンクを作成した
-オンラインマニュアル: https://home.fuguita.org/nsh.8.htm...
([[自動翻訳版>https://home-fuguita-org.translate.goog/nsh...
作者のChris Cappuccio氏はまた、フラッシュデバイスで動作す...
----
#contents
*LiveUSB版河豚板を作成
**ダウンロード
[[ダウンロードミラー一覧>FuguIta/Download]]からよさげな場...
# ftp https://jp2.dl.fuguita.org/SHA256
Trying 160.16.199.59...
Requesting https://jp2.dl.fuguita.org/SHA256
100% |**************************************************...
640 bytes received in 0.00 seconds (2.65 MB/s)
# ftp https://jp2.dl.fuguita.org/FuguIta-7.2-amd64-20221...
Trying 160.16.199.59...
Requesting https://jp2.dl.fuguita.org/FuguIta-7.2-amd64-...
100% |**************************************************...
348583114 bytes received in 32.14 seconds (10.34 MB/s)
**ファイルの整合性チェック
MD5かSHA256のいずれかを用いてダウンロードしたファイルが壊...
# sha256 -C SHA256 FuguIta-7.2-amd64-202211151.img.gz
(SHA256) FuguIta-7.2-amd64-202211151.img.gz: OK
**デバイスに書込み
# zcat FuguIta-7.2-amd64-nsh_test.img.gz | dd of=/dev/rs...
/dev/rsdXcには適宜デバイス名を充当して実行。
*初回起ち上げ
**システムデバイスの指定
scanning partitions: sd0a sd0d sd0i
FuguIta's operating device(s): sd0a.
Which is FuguIta's operating device? [default: sd0a] ->
河豚板デバイスを一つだけ装着しているので、デフォルト(ENTE...
**MFSサイズの指定
available memory: 2031M
Enter mfs size.
You can add suffix K, M, or G.
% is a percentage of memory size.
and %% is a percentage of the total memory and swap.
otherwise considered "megabytes"
[default: 1523M] ->
set mfs size to 1523MB
デフォルトでは、実装メモリの75%をMFSに割り当てる。~
(実測したところ、物理メモリは192MB程度以上実装されていれ...
**起動モードの指定
LiveUSBの標準的なモードである起動モード0で起動。
Boot modes:
0: fresh boot - standard mode as a live system
1: fresh boot - less memory, faster boot
(/usr is non-writable, can't pkg_add)
2: fresh boot - works using only RAM
(about 1GB or more of RAM required)
3: boot with retrieving saved files from storage device
or enter passphrase for an encrypted volume
4: boot with retrieving saved files from floppy disk
5: interactive shell for maintenance
-> 0
Running manual setup.
モード2での起動も可。この場合、運用中は完全オン・メモリ...
この後、OSが動作するための基本的な設定について訊かれてゆ...
**rootパスワード
Changing password for root.
New password:
Retype new password:
passwd: password updated successfully
簡単すぎるパスワードは弾かれるので注意。
**ネットワーク関連の設定
ここでの設定は、河豚板をネットワーククライアントとして使...
今回、ルータなどとしての使用を想定しているので、複数のネ...
それらの設定は、起動後にrootでログインして行うか、あるい...
***ホスト名
Hostname with domain part (FQDN):
only host name without domain part is also OK.
-> nshrouter.local
***IPバージョン
今回はIPv4のみでの運用を想定
IP protocol version(s) to be enabled: 4, 6, 46, 64 or "n...
4: enable only IPv4
6: enable only IPv6
46: give priority to IPv4 name resolution
64: give priority to IPv6 name resolution
none: operate as standalone
[64] ->4
***ネットワークインターフェース
Network Interfaces: Choose one
NIC type Name
-------- ----- ------------
vio0 ether unknown
[vio0] ->
***IPアドレス、デフォルトルート
IPv4 - address and routing:
Enter "auto" or "IPv4_address[/mask] [default_gateway]"
"auto" is an automatic setting by DHCP.
The "/mask" part can be specified in either format,
such as "/255.255.255.0" or "/24".
If there is no default gateway,
set the second field to "none" or leave it blank.
[auto] -> 100.64.1.3/31 100.64.1.2
***ネームサーバ
DNS servers: up to 3 IP addresses, separated by spaces
-> 9.9.9.9
**ログイン方法
Do you login with C)onsole or X) Window System?
[default: C] ->
この後、OpenBSD本来のブートシーケンスが続き、最後にログイ...
*ルートでログインして諸々設定
起動が完了し、ログインプロンプトが表示されたら、先ほど設...
**タイムゾーン
nshrouter# date
Tue Nov 22 05:28:53 UTC 2022
nshrouter# ln -sf usr/share/zoneinfo/Asia/Tokyo /etc/loc...
nshrouter# date
Tue Nov 22 14:29:02 JST 2022
**シャットダウン時のファイル自動保存
河豚板では、MFS上のデータをUSBメモリ等に保存するにはusbfa...
nshrouter# vi /etc/rc.shutdown
force_umount=No # set Yes for forced umount /ram at sh...
force_resync=Yes # set Yes to re-sync at shutdown <== ...
# stop_all_daemons - to eliminate all daemons at umount ...
#
stop_all_daemons () {
:
:
**起動時の設定の自動化
USBメモリ内のnoasksというファイルを編集することにより、起...
前回の終了時に保存したファイルの読み込みも、このnoasks内...
nshrouter# mount /dev/sd0d /mnt
nshrouter# vi /mnt/livecd-config/7.2/amd64/noasks
#
# noasks - parameter settings for non-interactive boot
#
# Make statements uncommented
# Then assign real values
#
#
# FuguIta system device
# - Use one of two lines
#noask_rdev=sd0a # device name format
noask_rdev=3b5447abd772121d.a # DUID format <==河豚板...
# 常に同...
# mfs size in MB ので、D...
noask_umem=75% <==MFSのサイズ による...
#
# boot mode
noask_setup_rw_mode=3 <==起動モード 3=保存されたファイ...
#
# storage device
# - Use one of two lines
#noask_confdev=sd0d # device name format
noask_confdev=3b5447abd772121d.d # DUID format <==ファ...
# noas...
# data set name in USB flash drive
noask_confdir=nshrouter <==読み込むファイルの保存名
nshrouter# umount /mnt
*リブートの動作確認
**ここまでの設定をとりあえず保存
usbfadmを起動し、保存先、保存名を指定して保存を実行
nshrouter# usbfadm
Welcome to usbfadm.
USB flash drive administration tool for FuguIta
Version/Arch: 7.2/amd64 (FuguIta-7.2-amd64-202211151)
Boot mode: manual
Target device: not set
Data saved as: not set
readline capability available
TAB to complete the reserved words
Type ? for help.
? : ? ->target
Searching storage device
Please make sure the device inserted.
Then press ENTER ->
sd0a +sd0d
target device->sd0d
sd0d : ? ->saveas
Name of saved data->nshrouter
Your data will be saved as ``nshrouter''.
sd0d : nshrouter ->sync
Sync current mfs as ``nshrouter'' , OK? [y/N] -> y
34.4MiB 0:00:04 [8.57MiB/s] [===========================...
waiting for pax to finish ... syncing ... done.
sd0d : nshrouter ->quit
Bye bye...
nshrouter#
**リブート
nshrouter# reboot
チェック項目
-シャットダウン時にファイルが自動保存されるか?
-再起動時に自動で立ち上がるか?
-再起動完了後、保存時の環境が復帰されているか?
*NSH関連の設定
**NSHのインストール
packagesからインストールする
nshrouter# pkg_add nsh
quirks-6.42(signed) 2022-11-20T19:34:54Z
quirks-6.42:ok
Ambiguous:
a 0: <None>
1: nsh-1.0.20220919
2: nsh-1.0.20220919-static
Your choice: 1
nsh-1.0.20220919:ok
nshrouter# nsh
% NSH v1.0
nshrouter.local/quit
% Session terminated.
nshrouter#
nsh-1.0.20220919-staticは、NSHの静的リンク版(chrootして実...
注: 時計がずれているとTLS通信が失敗し、pkg_addが不成功に...
nshrouter# rdate ntp.nict.jp
などとして時刻を合わせる。
**NSHの実行アカウントを作成
adduserコマンドは初回実行時、adduser.confの作成について色...
nshrouter# adduser nsh
Couldn't find /etc/adduser.conf: creating a new adduser ...
Reading /etc/shells
Enter your default shell: csh ksh nologin nsh sh [ksh]:
Your default shell is: ksh -> /bin/ksh
Default login class: authpf bgpd daemon default pbuild s...
[default]:
Enter your default HOME partition: [/home]:
Copy dotfiles from: /etc/skel no [/etc/skel]:
Send welcome message?: /path/file default no [no]:
Do not send message(s)
Prompt for passwords by default (y/n) [y]:
Default encryption method for passwords: auto blowfish [...
Use option ``-silent'' if you don't want to see all warn...
Reading /etc/shells
Check /etc/master.passwd
Check /etc/group
Ok, let's go.
Don't worry about mistakes. There will be a chance later...
Enter username []: nsh
Enter full name []: Network SHell
Enter shell csh ksh nologin nsh sh [ksh]:
Uid [1000]:
Login group nsh [nsh]:
Login group is ``nsh''. Invite nsh into other groups: gu...
[no]: wheel
Login class authpf bgpd daemon default pbuild staff unbo...
[default]:
Enter password []:
Enter password again []:
Name: nsh
Password: ****
Fullname: Network SHell
Uid: 1000
Gid: 1000 (nsh)
Groups: nsh wheel
Login Class: default
HOME: /home/nsh
Shell: /bin/ksh
OK? (y/n) [y]: y
Added user ``nsh''
Copy files from /etc/skel to /home/nsh
Add another user? (y/n) [y]: n
Goodbye!
nshrouter# exit
OpenBSD/amd64 (nshrouter.local) (tty00)
login: nsh
Password:
NSHはroot権限でコマンドを実行するので、nshアカウントはwhe...
***/home/nsh/.profileの編集
ログイン直後にroot権限でNSHが実行されるようにする。
nshrouter$ vi ~/.profile
exec doas /usr/local/bin/nsh
exit # for fail safe
pkg_addでNSHをインストールすると、/etc/shellsにnshが登録...
>nsh(8) Section 7 > Adding system users to:~
'''Do NOT add nwrapper (or nsh) to /etc/shells. They shou...
***/etc/doas.confの編集
ユーザnshがパスワード無しでroot権限のnshを実行できるよう...
nshrouter# echo permit nopass nsh cmd /usr/local/bin/nsh...
***設定の保存
以上で、ユーザアカウントnshでログインするとnshが起動する...
念の為、ここまでの状態をUSBメモリに保存しておく
nshrouter# usbfadm -r
========================================
= Sync /dev/sd0d with current mfs as nshrouter
=
sending incremental file list
etc/fstab
154 100% 0.00kB/s 0:00:00 (xfr#1, ir-c...
:
:
var/spool/smtpd/purge/2135993693/
var/spool/smtpd/temporary/
nshrouter#
一度、保存を行っている場合はコマンドラインから usbfadm -r...
データ保存の初回実行時はpaxを使用し、次回からはrsyncによ...
*トラブルシューティング
**OpenNTPDの設定で警告が出る
% NSH v1.0
nshrouter.local/enable
nshrouter.local(p)/ntp edit
servers ntp.nict.jp
configuration OK
nshrouter.local(p)/ntp disable
-s option no longer works and will be removed soon. ...
Please reconfigure to use constraints or trusted servers...
nshrouter.local(p)/ntp enable
-s option no longer works and will be removed soon.
Please reconfigure to use constraints or trusted servers.
nshrouter.local(p)/!ntpctl -s all <== ntpdの同期状態は...
0/5 peers valid, clock unsynced 呼出し、確認する。
peer
wt tl st next poll offset delay jitter
133.243.238.163 from pool ntp.nict.jp
1 3 1 2s 5s ---- peer not valid ----
133.243.238.164 from pool ntp.nict.jp
1 3 1 4s 7s ---- peer not valid ----
61.205.120.130 from pool ntp.nict.jp
1 3 1 2s 5s ---- peer not valid ----
133.243.238.243 from pool ntp.nict.jp
1 3 1 2s 5s ---- peer not valid ----
133.243.238.244 from pool ntp.nict.jp
1 3 1 3s 6s ---- peer not valid ----
nshrouter.local(p)/
NTPの参照サーバがntp.pool.orgからntp.nict.jpに変っている...
**nshからreboot/haltでファイルが自動保存されない
nshrouter.local(p)/reboot <= nshの特権モードでrebootを...
% Reboot initiated
syncing disks... done <= ファイルが自動保存されず、いき...
vmmci0: powerdown /etc/rc.shutdownが実行されない
rebooting...
Using drive 0, partition 3.
Loading......
probing: pc0 com0 mem[638K 2046M a20=on]
disk: hd0+
>> OpenBSD/amd64 BOOT 3.55/*
これに関しては、マニュアルページにも以下のような記述があ...
>reboot~
Restart the system. Warning no confirmation prompt is iss...
NSHのソースで該当部分を見てみる~
''commands.c''
/*
* Reboot
*/
int
nreboot(void)
{
printf ("%% Reboot initiated\n");
if (reboot (RB_AUTOBOOT) == -1) <== reboot(2)が...
printf("%% reboot: RB_AUTOBOOT: %s\n", s...
return(0);
}
int
halt(void)
{
printf ("%% Shutdown initiated\n");
if (reboot (RB_HALT) == -1) <== reboot(2)が呼び...
printf("%% reboot: RB_HALT: %s\n", strer...
return(0);
}
/etc/rc.shutdownが呼び出されないのは、nshがreboot(2)を直...
NSHからwrite-configでファイルに書き出した設定は河豚板では...
シャットダウン時に/etc/rc.shutdownが実行されるようにする...
**改修
ports treeを展開し、/usr/ports/shells/nsh 内にパッチファ...
''/usr/ports/shell/nsh/patches/patch-ctl_c''
--- ctl.c.orig Tue Sep 20 04:18:55 2022
+++ ctl.c Tue Nov 22 09:37:12 2022
@@ -412,7 +412,7 @@
char *ctl_ntp_test[] = { NTPD, "-nf", REQTEMP, NULL };
struct ctl ctl_ntp[] = {
{ "enable", "enable service",
- { NTPD, "-sf", REQTEMP, NULL }, NULL, DB_X_ENABLE,...
+ { NTPD, "-f", REQTEMP, NULL }, NULL, DB_X_ENABLE, ...
{ "disable", "disable service",
{ PKILL, table, "ntpd", NULL }, NULL, DB_X_DISABLE...
{ "edit", "edit configuration",
''/usr/ports/shell/nsh/patches/patch-commands_c''
--- commands.c.orig Tue Sep 20 04:18:55 2022
+++ commands.c Tue Nov 22 09:37:12 2022
@@ -1962,7 +1962,7 @@
nreboot(void)
{
printf ("%% Reboot initiated\n");
- if (reboot (RB_AUTOBOOT) == -1)
+ if (system("/sbin/reboot") == -1)
printf("%% reboot: RB_AUTOBOOT: %s\n", strerror(errno...
return(0);
}
@@ -1971,7 +1971,7 @@
halt(void)
{
printf ("%% Shutdown initiated\n");
- if (reboot (RB_HALT) == -1)
+ if (system("/sbin/halt -p") == -1)
printf("%% reboot: RB_HALT: %s\n", strerror(errno));
return(0);
}
portsにてパッチを適用し、ビルド
nshrouter# pkg_delete nsh
nsh-1.0.20220919:ok
Read shared items:ok
nshrouter# cd /usr/ports/shells/nsh
nshrouter# make install
===> Checking files for nsh-1.0.20220919
>> Fetch https://github.com/yellowman/nsh/archive/fcad0f...
>> (SHA256) nsh-1.0.20220919-fcad0f6a.tar.gz: OK
===> nsh-1.0.20220919 depends on: sqlite3-* -> sqlite3-3...
===> Verifying specs: c curses edit sqlite3
===> found c.96.2 curses.14.0 edit.5.2 sqlite3.37.20
===> Extracting for nsh-1.0.20220919
===> Patching for nsh-1.0.20220919 <== 今ほど追加し...
===> Applying OpenBSD patch patch-commands_c
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- commands.c.orig Tue Sep 20 04:18:55 2022
|+++ commands.c Tue Nov 22 09:37:12 2022
--------------------------
Patching file commands.c using Plan A...
Hunk #1 succeeded at 1962.
Hunk #2 succeeded at 1971.
done
===> Applying OpenBSD patch patch-ctl_c
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- ctl.c.orig Tue Sep 20 04:18:55 2022
|+++ ctl.c Tue Nov 22 09:37:12 2022
--------------------------
Patching file ctl.c using Plan A...
Hunk #1 succeeded at 412.
done
===> Compiler link: clang -> /usr/bin/clang
===> Compiler link: clang++ -> /usr/bin/clang++
===> Compiler link: cc -> /usr/bin/cc
===> Compiler link: c++ -> /usr/bin/c++
===> Generating configure for nsh-1.0.20220919
===> Configuring for nsh-1.0.20220919
===> Building for nsh-1.0.20220919
cc -O2 -pipe -Wmissing-prototypes -Wformat -Wall -Wbad-f...
sh /ram/usr/ports/pobj/nsh-1.0.20220919/nsh-fcad0f6af197...
:
:
cc -O2 -pipe -Wmissing-prototypes -Wformat -Wall -Wbad-f...
cc -L/usr/local/lib -o nsh arp.o compile.o main.o genge...
===> Faking installation for nsh-1.0.20220919
/usr/ports/pobj/nsh-1.0.20220919/bin/install -c -s -m 75...
===> Building package for nsh-1.0.20220919
Create /usr/ports/packages/amd64/all/nsh-1.0.20220919.tgz
:
:
Link to /usr/ports/packages/amd64/ftp/nsh-1.0.20220919.tgz
===> Verifying specs: c curses edit sqlite3
===> found c.96.2 curses.14.0 edit.5.2 sqlite3.37.20
===> Installing nsh-1.0.20220919 from /usr/ports/packag...
nsh-1.0.20220919:9ok
nshrouter# nsh
% NSH v1.0
nshrouter.local/enable
*雑感
NSHの利用についてはここまでで、ネットワーク機能の本格的な...
**nshの初期化について
''write-config''を実行すると/etc/nshrcに設定が保存される...
'''On the next startup of the system, this saved configur...
という記述があるが、次の起動では保存された設定は反映され...
nshの2つのコマンドラインオプション、
:-c '''config-script-file'''|''nsh'' execute the command(...
:-i '''rcfile'''|load the inital system configuration fro...
を指定しても、ファイル内のnshコマンドを実行した後、終了す...
''/etc/nshrc''は以下のように記述した方がよいかもしれない。
if [ -r /etc/nshrc ]; then
doas /usr/local/bin/nsh -i /etc/nshrc
fi
exec doas /usr/local/bin/nsh
exit # fail safe
**この構築手順を用いた他の事例
設定手順の[[ダウンロード>#wa1f8fa3]]から[[起動時の設定の...
以下の事例でもこの手順に従ってシステムを構築している。
-Qiita: [[OpenBSDライブシステム「河豚板」の日本語デスクト...
-[[How to port PFFW to FuguIta>FuguIta/BBS#r9e5ee9b]]
-[[Desktop environment demo of FuguIta>FuguIta/BBS#r9e5ee...
-[[isotop on FuguIta>FuguIta/BBS/10#vc6211a3]]
-[[温度測定システム>https://twitter.com/yoshi_kaw/status/...
*関連情報
-[[河豚板ガイド]]
-[[FuguIta Start Guide>FuguIta/StartGuide]]
-YouTube: [[Basic settings for FuguIta (OpenBSD-based Liv...
----
#topicpath
Page: