2016-10-18 11 views
0

에 mozroot-certdata 패키지를 설치합니다.I가 지금 루트 파일 시스템 (예. <code>EXTRA_IMAGE_FEATURES += "read-only-rootfs"</code>)을 갖는로 전환하는 것을 시도하고있는 구축 경우 yocto 설립 읽기 전용 루트 파일 시스템

그러나 메타 모노 레이어의 제조법에 문제가 있습니다 : 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을 전혀 보지 못했지만 ...).

대신 내 해결책은 매 부팅 할 때마다 가져 오기를 수행하는 것이 었습니다. (또한 한 번만 수행 할 수 있지만 업데이트에 대한 문제가 발생합니다). 이것을 실현하기 위해 나는 mozroot.exe이 certdata를 쓰고 자하는 디렉토리에 바인드 마운트를 만들었다. 내 솔루션

세부 사항은 다음과 같은 내용으로 파일 volatile-binds.bbappend을 추가

은 바인드 /tmp/mono-certs에서 /usr/share/.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에서

'다른'지점은 그 시간에 실행됩니다 무엇이며 그것이 성공하면, 다음 연기는 postinst가 필요하지 않습니다 (당신이 빌드 오류가 발생해서는 안됩니다). mono-native recipe가 이미 존재하므로 pkg_postinst 함수에서 else 분기를 수정하여 native 모노 & mosroots.exe를 찾고 $ D의 올바른 위치에 쓸 수 있도록해야합니다.

Anders가 언급 한 것처럼 패키지 기반 업그레이드에 신경 쓰면 충분하지 않습니다.

+1

음, 내 대답에 말한 것처럼, mozroot.exe는 내 컴퓨터에서'/ usr/share/.mono/certs'에 쓰기를 시도했습니다 ...따라서, 나는 이것이 rootfs 생성 시간 동안 현재 작동한다고는 생각하지 않는다. 이를 처리하려면'mono-native'를 패치해야 할 것입니다. – Anders

+0

감사합니다. 이 경우 mosroots.exe에 대한 패치가 필요할 것입니다 - 모노 업스트림에서 "--certdir"옵션 또는 이와 유사한 옵션을 사용할 수 있습니다. – jku