USB に NetBSD をインストールして遊んでみる

2021/10/18に公開

私の部屋には死んでいるのか死んでいないのかわからない PC がたびたび出現します. 今回は 2010 年に発売された TOSHIBA 製の Satellite L21 です. 11 年という時間のどこかで HDD を扱う気力を置いてきてしまったようなので,USB から boot してなにか遊べないものかと頑張ってみました.

Linux は日々の生活で触りすぎているので BSD 系の OS を利用してみようと思いました. BSD 系の嬉しい部分はプリインストールされているコマンドが充実していることです. Linux だと C コンパイラや make などを自分でインストールする必要がありますが,BSD 系だとそれらはきっと最初から入っています.

当初は FreeBSD をインストールしようとしたのですが,BTX halted と表示されてインストール CD すら起動させてもらえませんでした. さらに,OpenBSD も boot 画面でフリーズしてしまいました. 淡い望みを掛けて NetBSD のインストーラを起動したところうまく動いてくれたので,今回は NetBSD を利用してオモチャ環境を構築してみることにしました.

NetBSD のインストール

インストールメディアの用意

NetBSD のサイト から amd64 の CD イメージを取ってきます. それを CD に焼くなり CD のフリをした USB に焼くなりします.

インストールメディアからの起動


Boot Menu

インストールメディアを PC に挿入し,電源を入れると Boot Menu が表示されます. デフォルトの選択で問題ないのでそのまま時間を待つか RETURN を押下します.

インストール時に利用する言語の選択


言語の選択

インストール時に利用する言語を選択できます. 最も得意とする言語を選ぶとインストール作業で苦労しません. 私は英語を選択しました.

キーボード配列の選択


キーボード配列の選択

キーボード配列を選択できます. 利用しているキーボードに最も適したものを選択するべきです. 私は JIS 鍵盤を US 鍵盤として利用するのでそのまま RETURN を押下しました.

インストールメニュー


インストールメニュー

インストーラの動作を選択します. NetBSD をインストールしたいので Install NetBSD to hard disk を選択します. USB にインストールする場合もこれを選択します.


続行するか確認

ハードディスクのデータが変更されることなど,これから起こることについて説明され,正気か尋ねられます. Yes を選択して続行します.

インストール先のディスクの選択


ディスクの選択

インストール先のディスクを選択します. 間違ったディスクを選択すると意図せずにデータを破壊する恐れがあるので慎重に選択します.

インストール先のディスクの設定


パーティショニングスキームの選択

パーティションの切り方を選択します. 今回の PC は古いので MBR にしておきました.


ジオメトリの確認

ディスクのジオメトリを確認されます. ジオメトリとはディスクのシリンダ数・ヘッド数・セクタ数の構成のことです. BIOS が検出した値に誤りがあるなら修正しろとのことです. BIOS はきっと賢いのできっと合っているはずです. 私はそのまま RETURN を押下しました.


パーティショニングの方法

パーティションを自分で切りたいか確認されます. そんな面倒なことはしたくないのでディスク全体を使って勝手にやってもらいます.


NetBSD のパーティションに従う

NetBSD に合わせていい感じにやってくれそうな雰囲気があるのでそのまま RETURN を押下しました.


Swap 領域を 0 に

パーティショニングをいい感じにやってもらうはずが,デフォルトの状態では swap 領域に大半を持っていかれるようです. この際 swap 領域には 0 になってもらいましょう.


変更する最後のチャンス

パーティションの構成を変更する最後のチャンスです. 問題ないようなら続行します.


書き込みの最終確認

本当にディスクに書き込んで良いか確認されます. これが最後の確認です. ここで Yes と答えるとディスクの内容が全て消去されます.

端末の選択 (?)


端末の選択 (?)

起動時の端末の設定でしょうか. よくわかりません. とりあえずそのまま RETURN を押下しました.

インストール


インストールの選択

インストールの種類を選択します. X11 をインストールしない選択や最小限のインストールに留めるなどの選択ができます. ここでは Full installation を選択しました.


インストール元の選択

次にインストールに利用するソースを選択します. 今回はインストールメディアから全てをインストールできます. このまま RETURN を押下します.


インストール待ち

インストール作業が完了するのを待ちます.


インストール完了

インストールが完了したら RETURN を押下します.

各種設定


各種設定

ここでは,各種の設定を行います. やることは上から順に,

  1. ネットワークの設定
  2. タイムゾーンの設定
  3. root ユーザのパスワードの設定
  4. バイナリパッケージのインストール有効化
  5. ntpdate の有効化
  6. xdm の有効化
  7. raidframe の無効化
  8. 一般ユーザの追加

です.


設定を完了したところ

設定が完了したら次に進みます.

インストール作業の完了


インストール作業の完了

これでインストール作業は全て完了しました. お疲れ様でした.

コンピュータの再起動


コンピュータの再起動

初めのインストールメニューに戻ってくるのでコンピュータを再起動します.

NetBSD の初期設定

ログイン


ログイン画面

再起動に成功すると,上の画像のようなログイン画面が出現します. インストール時の設定で作成した一般ユーザでログインしましょう.


グラフィカルな世界

ログインに成功すると上の画像のようなグラフィカルな世界が現れます. 左上の uxterm とタイトル付けられたウィンドウが端末です. そこにコマンドを入力してコンピュータを操作します.

各種アプリケーションの導入

まずはアプリケーションを導入します. アプリケーションを導入するにはスーパユーザ権限が必要なのでスーパユーザになります.

スーパーユーザになる
$ su -

アプリケーションはパッケージという形で入手することができます. パッケージを扱うには pkgin(1) を利用します. これは Debian や Ubuntu でいうところの apt(8) のような働きをするものです.

まずは sudo (一時的に管理者権限を得る) と bash (シェル) と vim-xaw (エディタ) と fetch (ファイルの取得) と w3m (ブラウザ) と ja-man (日本語マニュアル) を導入しましょう.

アプリケーションを導入する
# pkgin install sudo bash vim-xaw fetch w3m ja-man

sudoer の設定

sudo で管理者権限を利用できるユーザを制御します. 次のように実行し,82 行目をアンコメントするとグループ wheel に属しているユーザに sudo を許可します.

sudoer の設定
# visudo

ログインシェルの変更

一般ユーザのログインシェルを bash に変更します. 次のコマンドを実行するとエディタが開きます. ログインシェルの設定は 10 行目にあります.

ログインシェルの変更
$ which bash
/usr/pkg/bin/bash
# chsh user

設定を有効にするにはログインしなおす必要があります. 画面上のウィンドウのない場所でマウスを右クリックし,Quit を選択するとログアウトできます.

ログインしなおした時に,端末のプロンプトば次のようになっていれば成功です.

bash のプロンプト
bash-5.1$ 

bash の設定

bash のために ~/.bash_profile~/.bashrc を用意してあげます. 今回は Ubuntu から盗んできたものを利用します. 設定を適用するにはログインしなおします.

ファイルの内容
~/.bash_profile
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
  # include .bashrc if it exists
  if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
  fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
  PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
  PATH="$HOME/.local/bin:$PATH"
fi
~/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
  *i*) ;;
  *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
  debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
  xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
  if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
  else
    color_prompt=
  fi
fi

if [ "$color_prompt" = yes ]; then
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
  PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
  xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
  *)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
  test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
  alias ls='ls --color=auto'
  alias dir='dir --color=auto'
  alias vdir='vdir --color=auto'

  alias grep='grep --color=auto'
  alias fgrep='fgrep --color=auto'
  alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
  . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Vim で skk を利用する

日本語入力はエディタの内部だけで充分です. Vim で skk を利用できる skk.vim なるものがあるのでそれを利用します. 次のように実行します.

skk-vim をインストールする
$ fetch https://github.com/vim-skk/skk.vim/archive/refs/heads/master.zip
$ unzip master.zip
$ mkdir -p ~/.vim/
$ cp -r skk.vim-master/plugin .vim

ここで vim を起動し,挿入モードに入った後に ^J を押下するとひらがなを入力できるはずです. 漢字変換を利用するには辞書を取得する必要があります.

辞書を取得する
$ fetch http://openlab.jp/skk/dic/SKK-JISYO.L.gz
$ gzip -dc SKK-JISYO.L.gz >~/SKK-JISYO.L
$ echo 'let g:skk_large_jisyo = "$HOME/SKK-JISYO.L"' >>~/.vimrc
$ echo 'let g:skk_auto_save_jisyo = 1' >>~/.vimrc

これで漢字変換を含めた日本語入力が可能となります.

X の設定

私は X11 を初めて触るので怪しげですが,これで動いています. まずは ~/.xsession をコピーしてきます. 本来のコピー先は ~/.xinirc のはずですが,それでは動作しませんでした.

ファイルをコピー
$ cat /etc/X11/xinit/xinitrc >~/.xsession
$ chmod +x ~/.xsession

ここでログインしなおして端末の背景が白くなるのを確認します. ログインできなくなった場合は,ログイン画面でパスワードを入力した後に [Ctrl]+[Return] を押下するか,コンソールからログインしてファイルを修正します.

このままでは画面が眩しくて仕方無いので,xterm の設定を変更します. ~/.Xresources を作成します. ログインしなおしてみると端末の表示が華やかになっているはすです.

~/.Xresources
*xterm*termName:	xterm-256color
*xterm*locale:		true
*xterm*saveLines:	4096

! Molokai Theme
! https://gist.github.com/vreon/845878
*xterm*background:	#101010
*xterm*foreground:	#d0d0d0
*xterm*cursorColor:	#d0d0d0
*xterm*color0:		#101010
*xterm*color1:		#960050
*xterm*color2:		#66aa11
*xterm*color3:		#c47f2c
*xterm*color4:		#30309b
*xterm*color5:		#7e40a5
*xterm*color6:		#3579a8
*xterm*color7:		#9999aa
*xterm*color8:		#303030
*xterm*color9:		#ff0090
*xterm*color10:		#80ff00
*xterm*color11:		#ffba68
*xterm*color12:		#5f5fee
*xterm*color13:		#bb88dd
*xterm*color14:		#4eb4fa
*xterm*color15:		#d0d0d0

東雲フォントを使ってみる

東雲フォントはパブリックドメインのビットマップフォントです. TTF なフォントを利用することもできますが,それではつまらないのでこれで遊んでみます. 国際化 xterm に対応した東雲フォントを取得します. rpm なんて大層な拡張子が付いていますが,中身はただの cpio なので tar(1) でも解凍できます.

東雲フォントを取得する
$ fetch http://vega.pgw.jp/~kabe/vsd/shinonome-plus/shinonome-plus-fonts-0.9.12-5.el6.noarch.rpm
$ tar xf shinonome-plus-fonts-0.9.12-5.el6.noarch.rpm
$ sudo mkdir -p /usr/local/share/fonts/shinonome
$    # NOTE: ↓ NOT /usr
$ sudo cp -a usr/share/X11/fonts/shinonome/* /usr/local/share/fonts/shinonome
$ vim ~/.xsession
59 行目あたりに挿入:
xset fp+ /usr/local/share/fonts/shinonome


東雲フォント

上の画像は,奥から順に,デフォルトのフォント,東雲フォント丸文字体 (12 px),東雲フォントゴシック体 (14 px),東雲フォント明朝体 (16 px) です.

これを xterm のデフォルトのフォントに設定するには,~/.Xresources に次のように追加します.

~/.Xresources
! Shinonome Marumoji
*xterm*font:		shnm12maruu

おわりに

おわりです.

今回は 2 GB の USB に NetBSD をインストールして遊べる程度の環境を構築しました. どんなクソザコマシンでも発売当初はそこそこに使えるモデルだったはずです. きっとクソザコに成り下がった今でもあなたの役に立ちたいと思っているはずです. たまには押し入れから出して遊んであげるのも良いかもしれません.


参考

Discussion