initramfsイメージを作成する例えとして、こことかでは次のようなコマンド例が紹介されている。
> (cd rootfsdir; find . | cpio -o -H newc | gzip) > rootfs.cpio.gz
しかし、これではファイルの所有者情報(UID,GID)がそのまま残ってしまう。
所有者をroot(UID=0,GID=0)に変更したいが、cpioコマンドでそれを行う方法がわからない。
もちろん作業環境でroot権限があればchownしてからcpio+gzipすることもできるが、
root権限のない環境ではそうもいかない。
mkfs.jffs2にある--squashオプションみたいなのがあればと探してみた。
kernelソースにinitramfsを含めることができる=そのためのツールがあるのね。
使うのはkernelソース内にあるscripts/gen_initramfs_list.shとusr/gen_init_cpio.c
事前準備でusr/gen_init_cpio.cをコンパイルしておく。
> gcc gen_init_cpio.c -o gen_init_cpio
イメージ作成
> gen_initramfs_list.sh -u squash -g squash rootfsdir > list
> gen_init_cpio list | gzip > rootfs.cpio.gz
gen_initramfs_list.shの-u,-gオプションを指定してやるとlistファイルの中のUID,GIDを0で吐き出してくれる。
あとはgen_init_cpioにlistを渡して固めればok
0 件のコメント:
コメントを投稿