2013年5月16日木曜日

initramfsイメージ内のUIDを変える

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 件のコメント:

コメントを投稿