概要
LXDコンテナの設定をホスト側から自動でできるのかを試してみたときのメモ書きです。LXDのセットアップが既に終わっていることが前提です。
環境
- ubuntu 18.04 on Virtualbox on Windows10 Pro
- LXD 3.18(snapでインストール)
lxc execコマンド
lxc exec container_name bashなどと実行するとコンテナ内でコマンドを実行することができるので、入力したいコマンドをシェルスクリプトに書いたりしたら実行できるのかなーと思い試してみようと思います。
結果
いろいろ試行錯誤した結果、うまく動くコマンドと動かないコマンドがあるみたいです。単純にdockerなどのパッケージをインストールするためのコマンドを羅列しただけのスクリプトだったので、パイプとかを用いて工夫すればうまくいくかなーと思ったのですがうまくいきませんでした。
以下のようなコマンド実行しようと試みましたが、エラーが出たり途中で失敗したりでうまくいきませんでした...
lxc exec container_name -- sed -i.bak -e "s%http://[^ ]\+%http://linux.yz.yamagata-u.ac.jp/ubuntu/%g" /etc/apt/sources.list
lxc exec container_name -- ./xxxxxxx.sh
ひとまず落ち着いた方法
ホストで実行するLXDコンテナの設定に関するコマンドを羅列したシェルスクリプトと、LXDコンテナ内で実行するセットアップ用のシェルスクリプトに分けて、それぞれホストとコンテナ内で実行します。もっといいやり方がないか探しています...ansibleとかを利用するといいんでしょうかね。
# host
./lxd-start.sh
lxc exec container_name bash
# container
./lxd_setup.sh
lxd-start.sh
# !/bin/bash
lxc remote add --protocol simplestreams ubuntu-minimal https://cloud-images.ubuntu.com/minimal/releases/
lxc storage set default btrfs.mount_options user_subvol_rm_allowed,compress=lzo
lxc launch ubuntu-minimal:bionic u1804-sandbox -c security.nesting=true -c security.privileged=true
lxc config device add u1804-sandbox knowledge proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:8080 bind=host
lxc config device add u1804-sandbox codimd proxy listen=tcp:0.0.0.0:3000 connect=tcp:127.0.0.1:3000 bind=host
lxc config device add u1804-sandbox share disk source=/home/xxxx path=/root/share
sleep 10s
lxc file push lxd-setup.sh u1804-sandbox/root/
lxc exec u1804-sandbox -- chmod +x lxd-setup.sh
lxd-setup.sh
# !/bin/bash
sudo sed -i.bak -e "s%http://[^ ]\+%http://linux.yz.yamagata-u.ac.jp/ubuntu/%g" /etc/apt/sources.list
sudo apt update
sudo apt -y dist-upgrade
sudo apt -y autoclean
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker -v
docker-compose -v