現在、組み込みプラットフォーム用のSDイメージを作成するプロセスを自動化しています。私はGitLab CIを使って、特にDockerのランナーを使ってこれを行います。私のシステムではローカルで動作しますが、GitLab CIで動作するときには、奇妙なエラーがあります。ここでgitlab-ci-docker-runner内でDockerランナーchrootが動作しない
はプロセスです:
- 私は
build.sh
を実行ドッカーコンテナを、開始します。 build.sh
は、取り付けられたイメージ上でchroot
を実行し、provision.sh
を実行します。
詳細
私が最初にこのようにドッキングウィンドウを実行します。
docker run --rm -it --privileged=true -v `pwd`:"/wd" -w="/wd" ubuntu:xenial-20170710 /bin/bash build.sh
ファイルbuild.sh
は次のようになります。あなたはそれができる、画像に興味がある場合には
apt-get update
apt-get install qemu-user-static pixz -y
pixz -d ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.xz ubuntu- 16.04.2-minimal-odroid-xu4-20170516.img
md5sum -c ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.md5
limits=$(sfdisk -l --bytes ubuntu-16.04.2-minimal-odroid-xu4-20170516.img | tail -n 1)
loopdev=$(losetup -f --show -o $((512 * $(awk '{print $2}' <<< "$limits"))) --sizelimit $(awk '{print $5}' <<< "$limits") ubuntu-16.04.2-minimal-odroid-xu4-20170516.img)
mkdir /mnt/rna
mount $loopdev /mnt/rna
mount -t proc proc /mnt/rna/proc/
mount -t sysfs sys /mnt/rna/sys/
mount -o bind /dev /mnt/rna/dev/
echo 'nameserver 8.8.4.4' >> /mnt/rna/etc/resolv.conf
cp $(which qemu-arm-static) /mnt/rna/usr/bin
cp provision.sh /mnt/rna/root
chroot /mnt/rna qemu-arm-static /bin/bash -l /root/provision.sh
mv ubuntu-16.04.2-minimal-odroid-xu4-20170516.img rna.img
pixz rna.img rna.img.xz
losetup -d $loopdev
ここにある:https://odroid.in/ubuntu_16.04lts/ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.xz
provision.sh
は以下のん:
pwd
env
ls -la
apt-get update
apt-get install tmux -y
問題
ローカルで、すべてが正常に動作し、apt-getのインストールは、画像内で実行されています。
image: ubuntu:xenial-20170710
build:
tags:
- privileged
artifacts:
expire_in: "1h"
paths:
- rna.img.xz
script:
- ./build.sh
をしかし、私はこのGitLab CIを実行すると、私は次のメッセージを取得します(スタートmd5sum
チェックbuild.sh
内部です:
ubuntu-16.04.2-minimal-odroid-xu4-20170516.img: OK
ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.xz: OK
/root/.profile: line 9: /usr/bin/mesg: No such file or directory
/
/root/provision.sh: line 2: /usr/bin/env: No such file or directory
/root/provision.sh: line 3: /bin/ls: No such file or directory
/root/provision.sh: line 5: /usr/bin/apt-get: No such file or directory
/root/provision.sh: line 6: /usr/bin/apt-get: No such file or directory
docker-次のように
.gitlab-ci.yml
に見えますランナーはprivileged
モードで動作し、chroot
とmount
が働いていることを確認します。