ぽっぺん日記@karashi.org
2007-12-14(Fri) [長年日記]
_ USBメモリ起動のFreeBSDを作ってみた
会社のBフレッツに繋っているFreeBSDルータを近々リプレイスすることになったので、予行練習。
今はCF-IDE変換基盤をかませてCFから起動させていたんだけど、お手軽にUSBメモリから起動したいなと思ったので、Installing FreeBSD on a USB stick, episode IIを参考に作業をしてみた。 手順も簡単なので、特に引っ掛かることなく完了。
ただ、上記サイトのやり方だと、/homeがUSBメモリ上にあるので、/homeでばんばん作業をする必要がある時には、メディアの寿命が心配ということで、/homeもMFSにすることにした。
以下は作業内容。すべてUSBにインストールしたFreeBSDに対して行なう。
- /etc/fstabに下記の内容を追記する。
- md /home mfs rw,-s16M,nosuid,noatime 0 0
- populate-home(この日記の最後に内容は書いた)をインストールする。
- cp populate-home /usr/local/etc/rc.d
- chmod 0555 /usr/local/etc/rc.d/populate-home
- /etc/rc.confに、下記の内容を追記する。
- populate_home_enable="YES"
- 起動時にhomeディレクトリにコピーされるファイルを準備する。
- mkdir -p /etc/home/ユーザ名
- homeディレクトリに置くファイル群(dotファイルとか)をレポジトリからcheckoutするなり、コピーするなりして、手元に用意する。
- cp 上記のファイル /etc/home/ユーザ名
- chown -R ユーザ名 /etc/home/ユーザ名
populate-homeスクリプトの内容は下記の通り。
#!/bin/sh
# PROVIDE: populate_home
# REQUIRE: mountcritremote
# BEFORE: DAEMON
. /etc/rc.subr
populate_home_enable=${populate_home_enable-"NO"}
populate_home_data=${populate_home_data-"/etc/home"}
name="populate_home"
rcvar=`set_rcvar`
stop_cmd=":"
start_cmd="populate_home_start"
populate_home_start()
{
if [ -d ${populate_home_data} ]; then
cd ${populate_home_data}
/usr/bin/find . -print | /usr/bin/cpio -dump --quiet /home
fi
echo '.'
}
load_rc_config "$name"
run_rc_command "$1"
上記の作業で、MFSの/home(容量は16MB)が起動時にmountされ、/etc/homeの内容が/homeにコピーされる。
populate-homeのPROVIDEやREQUIRE、BEFOREあたりはちと自信がないんだけど、とりあえず、手元の環境では動いている。
CFの代わりにUSBメモリを使うメリット・デメリット
メリットはこんな感じか。
- CF-IDE変換基盤が必要ない。
- たぶん、相性などで起動できないUSBメモリはない(CFはTrueIDEモードに対応していることが必要)。
- FreeBSDとUSBさえあれば中身の変更が可能(CFはCFスロットなり、リーダーなりが必要)。
- メガバイトあたりの単価がCFよりUSBメモリの方が安い(たぶん)。
一方、デメリット。
- 最近(3年前以降くらい?)のPCでないと、USBメモリから起動できない。*1
- 延長ケーブルを付けないと出っ張るので、スペース的な問題があるかも。
追記:MFSなのにnoatimeを指定する必要ってあるんだろうか
元ネタ・サイトがそうなっているので、そのままマネしたけど、ちと疑問に思った。
参考
*1 まぁ、CFの場合も普通はCF-IDE変換基盤がないと起動しないので、デメリットとは言えないかも。
_ 日記をAutoPagerize対応にした
やろうやろうと思いつつ放置モードだったのだが、tDiaryをHEADにアップデートしたので、ついでにAutoPagerize対応にしてみた。
と言いつつ、実はkdmsnrさんとこの丸パクリだったり。
plugin/00default.rbだけ、ちょっと変更して、こんな感じにしてみた。
--- plugin/00default.rb.orig Fri Dec 14 18:33:14 2007
+++ plugin/00default.rb Fri Dec 14 18:41:11 2007
@@ -17,7 +17,7 @@
end
def navi_item( link, label, rel = false )
- %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"nofollow\"" : ''}>#{label}</a></span>\n]
+ %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"#{rel}\"" : ''}>#{label}</a></span>\n]
end
def navi_user
@@ -48,7 +48,7 @@
def navi_user_latest
result = ''
- result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "«#{navi_prev_ndays}" ) if @conf['ndays.prev'] and not bot?
+ result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "«#{navi_prev_ndays}", "next" ) if @conf['ndays.prev'] and not bot?
result << navi_item( h(@index), h(navi_latest) ) if @cgi.params['date'][0]
result << navi_item( "#{h @index}#{anchor( @conf['ndays.next'] + '-' + @conf.latest_limit.to_s )}", "#{navi_next_ndays}»" ) if @conf['ndays.next'] and not bot?
result
や、navi_itemの第三引数を変えただけだけど。ただ、これだと、navi_itemの第三引数をtrueにしている時には、ちとまずいかも。
00default.rbを書き直した
軽くgrepしてみたら(先にしろよ)第三引数でtrueを使っているところが多いみたいなので、第三引数をtrueにしていたら、問答無用にrel="next"にするようにした。
--- plugin/00default.rb.orig Fri Dec 14 18:33:14 2007
+++ plugin/00default.rb Fri Dec 14 18:52:00 2007
@@ -17,7 +17,7 @@
end
def navi_item( link, label, rel = false )
- %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"nofollow\"" : ''}>#{label}</a></span>\n]
+ %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"next\"" : ''}>#{label}</a></span>\n]
end
def navi_user
@@ -48,7 +48,7 @@
def navi_user_latest
result = ''
- result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "«#{navi_prev_ndays}" ) if @conf['ndays.prev'] and not bot?
+ result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "«#{navi_prev_ndays}", true ) if @conf['ndays.prev'] and not bot?
result << navi_item( h(@index), h(navi_latest) ) if @cgi.params['date'][0]
result << navi_item( "#{h @index}#{anchor( @conf['ndays.next'] + '-' + @conf.latest_limit.to_s )}", "#{navi_next_ndays}»" ) if @conf['ndays.next'] and not bot?
result


まで頂ければ幸いです。
叛逆としての科学―本を語り、文化を読む22章(フリーマン・ダイソン)
ゲバルト時代 SINCE1966-1973 あるヘタレ過激派活動家の青春(中野正夫)