Armadilloフォーラム

x1-debian-builderのルートファイルシステムアーカイブのパーミッションの維持方法

user_2018-02-14

2018年3月14日 17時38分

x1-debian-builderのbuild.shでルートファイルシステムアーカイブ後に、アーカイブされたファイル(debian-jessie-armhf_aiotg3***.tar)の中身を見ると、ファイルの所有ユーザと、所有グループが全て"root:root"になっています。

"x1-debian-builder-v1.1.2\aiotg3l_resources\\" 配下に置いているファイルの所有権はroot以外のユーザ、グループに設定しているのですが、
アーカイブ後に、パーミッションが"root:root"変更されてしまっています。

パーミッションを維持することはできないのでしょうか。

以上、よろしくお願い申し上げます。

コメント

y.nakamura

2018年3月14日 22時42分

中村です。

> x1-debian-builderのbuild.shでルートファイルシステムアーカイブ後に、アーカイブされたファイル(debian-jessie-armhf_aiotg3***.tar)の中身を見ると、ファイルの所有ユーザと、所有グループが全て"root:root"になっています。
>
> "x1-debian-builder-v1.1.2\aiotg3l_resources\\" 配下に置いているファイルの所有権はroot以外のユーザ、グループに設定しているのですが、
> アーカイブ後に、パーミッションが"root:root"変更されてしまっています。
>
> パーミッションを維持することはできないのでしょうか。

x1-debian-builderのbuild.shを使ったことがなく、
build.shの中身をざっと見ただけですが、

#Copy resources and fixup
cp -r $RES/* $ABSP

でコピーするときにroot:rootになっているのではないでしょうか?

"-r"ではなく"-a"を使えばユーザ:グループが保存されると思います。
ただ、このスクリプトの他の部分をほとんど読んでませんので、
"-a"を使うことによる影響が何かあるかもしれません。

# x1-debian-builderのbuild.shを使ったことはないのですが、
# 近い将来、使うことになりそうなので、調べてみました。

--
なかむら

user_2018-02-14

2018年3月15日 10時45分

中村さん

コメント、ありがとうございます。
私も該当の箇所が怪しいと思い、-pをつけたところ、
所有権が保持されたアーカイブされることが確認できました。

パーミッションを保持したことによる影響ですが、
おそらく問題がないように思われますが、確認してみます。

at_ohsawa

2018年3月15日 11時35分

"cp -a"とした場合、アーカイブ内の/etc/passwdで定義するUID/GIDと
build.shを実行しているATDE等の環境でのUID/GIDが一致する必要がある点、
ご注意ください。

atmark ユーザーについてはATDEとx1-debian-builderの間で
UID=1000で一致させているので問題ないです。

ATDE側でadduserたユーザーに対するパーミッションを設定した
場合は、x1-debian-builderでも同じUIDでadduserしていないと、
起動した時に、UNKNOWNユーザーとなりアクセス権が意図しない
状態になります。

ここからは弊社が作れてないので、申し訳ないのですが、
正攻法は、cp -aではなくtar(tarは展開時にUID/GIDではなく、
同じ名前のユーザー、グループにマップして展開します)を
経由する方法です。

なぜ、この方法でうまくいくかと申しますと、
build.shはリソース群をコピーした後は、chroot+qemu環境で
Armadillo向けのアーカイブを操作しております。
つまり、構築中は、いわゆる仮想コンテナ内でArmadillo実機の
ように振る舞っているということです。
そのため、対応するユーザー名、グループ名があれば、
Armadillo上でtarを展開した時にようにパーミッションが
名前一致で振られることになり、UID不一致の問題が解決されます。

しかし、前提としてユーザーとグループが、前述のtarを展開する
前にアーカイブ内に存在する必要があり、ATDE等PC側の/etc/passwdを
コピーするのもセキュリティ上問題がありそうなので、お勧めできる
実装を作れておりません。

y.nakamura

2018年3月15日 18時56分

中村です。

> "cp -a"とした場合、アーカイブ内の/etc/passwdで定義するUID/GIDと
> build.shを実行しているATDE等の環境でのUID/GIDが一致する必要がある点、
> ご注意ください。

at_ohsawaさんからx1-debian-builderの内部の仕組みと
tarを使った方法のご説明がありましたが、もっと簡単に、
ATDE上でchownでArmadillo上と同じUID:GIDを設定しておく、
という方法でもいいと思います。

ATDE上で"ls -l"したとき存在しないユーザなので
UIDとGIDの名前でなくて数値で表示されてしまいますが、
これが問題となることはないでしょう。

--
なかむら

user_2018-02-14

2018年3月16日 13時20分

at_ohsawa さん、中村さん

コメント、ありがとうございます。
パーミッションを維持した形で、Armadillo実機にインストールができました。
大変参考になりました。