junp
2019年5月22日 14時44分
いつもお世話になっております。藤本です。
Armadillo-640用のインストールディスクを作成するために
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
を参考に
at-debian-builderでルートファイルシステムアーカイブを作成し、
make-install-disk-imageでインストールディスクを作成し、インストールが行えました。
ただ、at-debian-builderではapt-getで多くのパッケージを取得、インストールするため時間がかかるので、
弊社のアプリケーションだけを変更する際は、at-debian-builderで作成した
ルートファイルシステムアーカイブを一旦展開し、中身のアプリケーションを変更後、再度アーカイブを作成して、
その後、make-install-disk-imageでインストールディスクを作成しようと思い、その手順を行ってみました。
その手順で一応はArmadilloへのインストールは行えたのですが、
Armadilloで動かしているFTPサーバがエラーで起動できていないことが分かりました。
その原因としてはFTPサーバの設定ファイル(/etc/vsftpd.conf)の所有者がatmarkになっているために失敗しているようでした。
確認してみると、他にもいろいろなファイル、ディレクトリの所有者がatmarkになっていました。
ルートファイルシステムアーカイブをそのまま使った場合は/etcディレクトリ等の所有者はrootになっていました。
(at-debian-builderで作成したルートファイルシステムアーカイブをそのまま使った場合と展開してから使った場合のlsの結果を添付します。)
ルートファイルシステムアーカイブを一旦展開したとしても何も変わらないと思ったのですが、こういったやり方はだめなのでしょうか?
よろしくお願いします。
ファイル | ファイルの説明 |
---|---|
ls_atmark_asis.txt | アーカイブを展開してから作ったイメージでのls -l /*の結果 |
ls_atmark_edited.txt | アーカイブからそのまま作ったイメージでのls -l /*の結果 |
コメント
at_makoto.sato
junp
> 佐藤です。
>
> > /home/atmarkディレクトリの所有者がrootになってしまいます。
> こちらでも試してみましたが、/home/atmarkディレクトリの所有者はatmarkとなっていました。
佐藤様
ご確認ありがとうございました。
こちらでも再度確認したところ、/home/atmarkに何らかのファイルを入れるようにしているために
mkhomedir_helperが実行される前に/home/atmarkディレクトリが所有者がrootで作成されてしまうようです。
at-debian-builder-v1.2.0/a600_resources/home/atmarkを消して実行すると/home/atmarkディレクトリの所有者はatmarkになりました。
こういった場合はどう対処すべきでしょうか?
y.nakamura
中村です。
> こちらでも再度確認したところ、/home/atmarkに何らかのファイルを入れるようにしているために
> mkhomedir_helperが実行される前に/home/atmarkディレクトリが所有者がrootで作成されてしまうようです。
> at-debian-builder-v1.2.0/a600_resources/home/atmarkを消して実行すると/home/atmarkディレクトリの所有者はatmarkになりました。
> こういった場合はどう対処すべきでしょうか?
at-debian-builder-v1.1.0のときですが、
このようなことや、その他にもいろいろと不具合があったので、
build.shを修正して使いました。
(「その他のいろいろな不具合」については、
簡単に一言で説明するのは難しいので、
ここでは省略させていただきます)
v1.1.0とv1.2.0の差分をとってみたところ、
私の場合に不具合の原因となっていた部分は変更されていないので、
v1.2.0でも同じ考えでいいのではないかと思います。
at-debian-builderの使い方の説明では、
| a600_resources以下にファイルやディレクトリを追加すると、
| そのファイルやディレクトリはそのままルートファイルシステムに
| 配置されます。
となっていて、a600_resources以下に入れたものは、
fixupを実行する前に"cp -r $RES/* $ABSP"でコピーされるのですが、
これが問題になりました。
どのように修正したかというと、独自に追加するものを
a600_resources直下に入れるのではなくて、
a600_resourcesの下にディレクトリを作ってその下に入れます。
そして、build.shを修正して、独自に追加するものは、
fixup実行の後にコピーするようにしました。
そのディレクトリを"hoge"とし、
build.shを次のように修正しました。
(この差分はv1.1.0のときのものです)
--- build.sh-orig +++ build.sh @@ -115,7 +115,7 @@ cp /usr/bin/qemu-arm-static $ABSP/usr/bin #Copy resources and fixup -cp -r $RES/* $ABSP +cp -r $RES/resources $ABSP chroot $ABSP sh -c "/debootstrap/debootstrap --second-stage" @@ -150,6 +150,9 @@ chown ${SUDO_USER} ./installed_pkgs_$BD.list rm -rf $ABSP/resources +# copy hoge resources +cp -a $RES/hoge/* $ABSP + #Archive userland (cd $ABSP; tar zcf ../$(basename $ABSP)_$BD.tar.gz * ; chown ${SUDO_USER} ../$(basename $ABSP)_$BD.tar.gz)
"$RES/hoge/*"を"$ABSP"にコピーしするときの
cpのオプションは"-r"ではなくて"-a"にしている
ことにも注意してください。
--
なかむら
at_makoto.sato
junp
y.nakamura
中村です。
> ただ、中村様の仰る「その他のいろいろな不具合」がどのようなものか気になります。(私が気付い
> ていない他の不具合がある??)
私の場合、build.shの修正例でのディレクトリ"hoge"の下には、
/home/atmarkに入れるものだけではなく、
Armadillo-640のルート以下に配置するものをすべて置いています。
各ファイルやディレクトリのowner/groupやパーミッションも
Armadillo-640にコピーした後のものを事前に設定しています。
「いろいろな不具合」と書きましたがそんなにたくさんあるわけではなく、
(大げさに書いてしまい申し訳ありません)
作業メモや記憶では、次の2つです。
[1] fixupでコピーや生成されるファイルとの競合
[2] 追加パッケージの設定ファイル変更の問題
まず、
[1] fixupでコピーや生成されるファイルとの競合
について。
fixupの最後で/etc/hosts,/etc/rc.local,/etc/network/interfacesを
コピーをしています。
また、fixupが/etc/hostnameを生成しています。
a600_resources/resourcesの下にあるものを修正したり
fixupスクリプトを修正して独自のものにしてもいいのですが、
独自に追加や変更するものは"hoge"の下で一元管理したいので、
(fixupを修正したりfixupに処理を追加したりして対応するしか
ないものもあるのですが、できるだけ"hoge"の下に集めたいので)
fixupスクリプトやa600_resources/resourcesの下のファイルには
手を付けずに、fixupと重複するものも"hoge"の下に置いておいて、
fixupのあとに独自のものを上書きコピーするようにしました。
次に、
[2] 追加パッケージの設定ファイル変更の問題
について。
これは、
[x1-debian-builder: apt-getでインストールされる設定ファイルの変更方法について]
https://users.atmark-techno.com/blog/1913/2575
で説明されているような、設定ファイルの修正方法と警告に対するものです。
警告に都度[N]で応答するのは面倒ですし、操作を間違える可能性もあります。
また、自前で用意(あるいは修正した)パッケージの設定ファイルが
ある状態でパッケージをインストールするのは気持が悪いので、
build.shを修正して、パッケージインストール後にパッケージの
設定ファイルを独自のもので上書きコピーするようにしました。
--
なかむら
junp
y.nakamura
y.nakamura
中村です。
at-debian-builderネタをもう1つ書いておきます。
[8.2.2. ルートファイルシステムのカスタマイズ]
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
の終わりのあたり
[8.2.2.2. Debianパッケージを追加する]
の最後のところに次の注意が書いてあります。
openssh-serverのような「パッケージのインストールの際に、 自動的に秘密鍵を生成する」パッケージは、基本的にpackages には追加せず、Armadilloを起動した後に"apt-get install"を 使って個別にインストールしてください。
1台や2台ならいいですけど、たくさんあるときは困りますよね。
たくさんあるときは初回起動時のみの処理として自動化できるとしても、
インターネットにつながないとapt-getできないというのも不便です。
この対策として、私は次のようにしています。
(1) openssh-serverパッケージもat-debian-builderでインストール
a600_resources/resources/packagesにopenssh-serverを追記します。
(2) fixupでホスト鍵を削除
fixupスクリプトの最後に次の処理を追加します。
# sshdのホスト鍵を削除 rm -f /etc/ssh/ssh_host_*
(3) 起動時にホスト鍵を生成
サービスとして登録した方がいいのかもしれませんが、
簡易的に/etc/rc.localで次のようにしても大丈夫みたいです。
# sshのホスト鍵がなければ再生成 # overlayfsを使っているときには生成した鍵をlowerにもコピー if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then dpkg-reconfigure openssh-server if [ -d /overlay ]; then mount -o rw,remount /overlay/system cp -p /etc/ssh/ssh_host_* /overlay/system/etc/ssh/. sync mount -o ro,remount /overlay/system fi fi
Armadillo-640の標準状態ではrwでremountする必要がありますが、
G3やG3Lなどや、/overlay/systemをrwでmountする改造<*1>をしている
Armadillo-640ではremountは必要ありません。
<*1> https://users.atmark-techno.com/forum/armadillo/3790#comment-6750
--
なかむら
junp
junp
2019年5月23日 9時37分
藤本です。
すみません。自己解決しました。
tarコマンドにsudoを付けていなかったのが原因でした。
sudoを付けると/etcディレクトリ等の所有者はrootになり、想定した動作になりました。
あと、気になった点が1点あるのですが、
fixupスクリプト内でatmarkユーザを作成していますが、
/home/atmarkディレクトリの所有者がrootになってしまいます。
そのため、atmarkユーザが/home/atmarkにアクセスできなくなっていました。
どうしてホームディレクトリの所有者がrootになってしまうのでしょうか?
とりあえず、その対策として、fixupスクリプトの
の次の行に
を入れたのですが、この対応で問題ないでしょうか?