0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gcpioを入れてみた

Last updated at Posted at 2024-10-18

FreeBSDのcpioやtarコマンドはlibarchiveに依存していて、このライブラリや依存が巨大なため、8M Flashのターゲットでも入れることはありませんでした。

イメージサイズ 増加分
無し 3573760 -
cpio,lib入り 4592128 1018368

イメージは圧縮されていて一つのコマンドに1Mも使われてしまったので、たまったものではありません。

libarchiveのソースを見ても小さくビルドする設定はなさそうです。

FreeBSDはもともとは1.4Mのフロッピーで起動してインストールできたので、その中に入れる基本的な操作で使うコマンドは小さく作られていました。これは初期のi386マシンはフロッピーかHDDからしかブートできなかったためです。フロッピーにインストールイメージが入らなくなったりCDからもブートできるようになって、その事は忘れ去られました。

いろいろ調べて考えてGNU版のcpioをportsもどきに追加してみました。gcpioはlibcだけ有れば動くようです。2.13とちょっと古いものになっていますが。CVEの脆弱性はつぶされたものです。

イメージサイズ 増加分
gcpio入り 3635712 61952

tarはともかくcpioみたいなコマンドは元のまま小さいものにしておくべきだったと思います。

flashにバックアップ

# cat test
abc
# ls -1 test | /usr/local/bin/gcpio -C 65536 -o | dd of=/dev/flash/spi1 bs=64k
1 block
1+0 records in
1+0 records out
65536 bytes transferred in 0.519613 secs (126125 bytes/sec)

戻す時

# dd if=/dev/flash/spi1 bs=64k | /usr/local/bin/gcpio -i
1 block
# cat test
abc

flashにバックアップがない場合の判断ですが、zeroを書き込んだmd5値を確認して、もしそれと同じだたら入ってないと判断して、処理をしない方法が考えられます。

libarchiveは作りが雑な感じがします。bsdcpio敗れたり。

追記:

FreeBSDにはcpioと互換のある4.4BSD由来のpaxコマンドが入っていました。

イメージサイズ 増加分
pax入り 3608576 34816

paxがあったのでcpioやtarを拡張したのかもしれません。paxは真のBSDコマンドです。:)

入れ替える前はFreeBSDにはGNU tarが入ってようです。これはpaxのできがいまいちだったからなのかもしれません。BSDでもすべてが良いものとは限りません。:(

paxのブロックサイズの上限が64512で64Kより小さいので上記のような使い方は出来ないようです。

また展開の時にgcpioはアーカイブの終端でstdinをcloseするようですが、paxはすべて読み込んでいるようです。

flashに一日一回バックアップを書き込んだとして、flashが10万回の書き込み保証がある場合、274年使えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?