2016-10-18 18 views
0

私はrootファイルシステム(例えばEXTRA_IMAGE_FEATURES += "read-only-rootfs")に切り替えることを試みている確立されたyoctoビルドを持っています。mozroot-certdataパッケージを読み取り専用ルートファイルシステムにインストールします

しかし、メタモノレイヤーのレシピ:mozroot-certdataに問題があります。私の質問がある

ERROR: The following packages could not be configured offline and rootfs is read-only: ['mozroot-certdata'] 

:私は犯人はビルドシステムが正常に読み取り専用のルートファイルシステムと同様に不可能低迷れる最初の起動時にルートファイルシステムを変更する必要pkg_postintスクリプト(http://git.yoctoproject.org/cgit/cgit.cgi/meta-mono/tree/recipes-mono/mozroot-certdata/mozroot-certdata_1.0.0.bb)で参照してください。これらのmozroot証明書をインストールしてモノを使って設定する方法はありますか?そのため、ルートファイルシステムはブート/実行時に変更する必要はありませんか?

答えて

2

私は読書専用のrootfsも使用していますので、この夏の最後のことをよく見ていました。問題はmozroot.exeがハードコードされて/usr/share/.mono/certsに書き込まれ、sysrootを尊重しないことです。あなたはおそらくmozroot.exeをハックして、インポートしたファイルを実際にsysrootに書き込むことができましたが、私の時間制限ではこれを試してもらえませんでした(どちらも、monoを見たことはありません...)。

私の解決策は、起動するたびにインポートを行うことでした。 (これは1回だけ実行することもできますが、アップデートに関する問題が発生します)。これを達成するために、私はmozroot.exeがcertdataを書こうとしているディレクトリにバインドマウントを行いました。私の解決策の

詳細

は、次の内容のファイルvolatile-binds.bbappend追加:これインポートできるようになります、バインドが/usr/share/.mono/certs/tmp/mono-certsからマウントになります

VOLATILE_BINDS += "\ 
    /tmp/mono-certs /usr/share/.mono/certs \n\ 
" 

を証明書。

FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" 

DEPENDS += "mono-native" 

SRC_URI += "file://mozroot-certdata.service \ 
" 

inherit systemd 

SYSTEMD_SERVICE_${PN} = "mozroot-certdata.service" 

do_install_append() { 
    mkdir -p ${D}${datadir}/.mono/certs 
    mkdir -p ${D}${systemd_system_unitdir} 
    install -m 440 ${WORKDIR}/mozroot-certdata.service ${D}${systemd_system_unitdir}/mozroot-certdata.service 
} 

FILES_${PN} += "${datadir}" 

# Empty the postinstallation script, as we can import the cert offline. 
pkg_postinst_${PN}() { 
#  mono $D/usr/lib/mono/4.5/mozroots.exe --import --machine --ask remove --file $D/${sysconfdir}/ssl/certdata.txt 
} 

サービスファイルmozroot-certdata.service

[Unit] 
Description=Import certficates to Mono 
After=tmp-mono-certs.service 

[Service] 
Type=oneshot 
ExecStart=/usr/bin/mono /usr/lib/mono/4.5/mozroots.exe --import --machine --ask-remove --file /etc/ssl/certdata.txt 

[Install] 
WantedBy=multi-user.target 
0

インストールとの間にモノで構成され、これらのmozrootの本命を取得する方法がある

は、それから私は、サービスファイルと mozroot-certdata_%.bbappendを追加しました構築プロセス

はい、rootfsの作成時にmosrootsバイナリを実行可能にする必要があります。ドキュメントのPost-Installation Scriptsを参照してください。

pkg_postinstの 'else'ブランチは、その時点で実行されるもので、成功した場合、遅延postinstは不要です(ビルドエラーは発生しません)。 mono-nativeレシピがすでに存在するので、pkg_postinst関数のelseブランチを修正してネイティブモノ& mosroots.exeを見つけ、$ Dの正しい場所に書き込むようにする必要があります。

Andersはパッケージベースのアップグレードを気にするだけではこれだけでは不十分だと述べています。

+1

私の答えで言ったように、mozroot.exeは自分のマシンで '/ usr/share/.mono/certs'に書き込もうとしました...したがって、私はrootfsの作成時にこれが現在動作しているとは考えていません。おそらく 'mono-native'にパッチを当ててそれを処理する必要があります。 – Anders

+0

ありがとうございます。その場合、mosroots.exe用のパッチが必要になるでしょう - 私はmono upstreamが "--certdir"オプションなどを受け入れることを確信しています – jku

関連する問題