コンテンツへスキップ

最近LXCばかり触っていたのでホストからゲストOSを設定できるスクリプトをかいてみた。
ネットワークとSSH公開鍵認証の設定。sshは内容軽くいじれば他でも使いまわせそう。
OSはcentos7.9を想定

#network config
rm /var/lib/lxc/$1/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0
lxc-attach -n $1 -- bash -c 'echo "DEVICE=eth0" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "TYPE=Ethernet" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "IPADDR='$1'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "NETMASK='$2'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "GATEWAY='$3'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "DNS1=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "DNS1=8.8.4.4" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 systemctl restart network
#ssh config
lxc-attach -n $1 -- yum -y install openssh-server
lxc-attach -n $1 -- ssh-keygen -N "" -f ~/.ssh/id_rsa
lxc-attach -n $1 mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
lxc-attach -n $1 chmod 600  ~/.ssh/authorized_keys
lxc-attach -n $1 -- sed -i 's/^PubkeyAuthentication.*$/PubkeyAuthentication yes/' /etc/ssh/sshd_config
lxc-attach -n $1 -- sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
lxc-attach -n $1 systemctl restart sshd
lxc-attach -n $1 cat ~/.ssh/id_rsa

個人的に下記行の引数を展開できないことに苦労した。
lxc-attach -n $1 -- bash -c 'echo "IPADDR='$1'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'

シングルクォーテーションって強制的にすべて文字列にするものだと思ってるから
echo以降は全て文字列しかできない。
でもぐぐったら、むしろ$1の場所をシングルクォーテーションでさらに囲ったら変数扱いとなった。
なぜ


参考
sed-iについて
https://www.usupi.org/sysad/197.html

lxc-attachについて
https://gihyo.jp/admin/serial/01/linux_containers/0008?page=4

lxcの容量を小さくするためにはlvreduceで下記のように実施する必要があるが、
先にファイルシステムのサイズを変更しないといけない。
ファイルシステムをのサイズを変更しない場合、対象のlxcのデバイスをマウントできなくなる事故が発生するから。

lvreduce -L -10G /var/mapper/xxx

ファイルシステムのサイズはresize2fsで実施可能。

resize2fs /var/mapper/xxx 1G 

仮想ボリューム(Logical Volume Maneger)

ハードディスクやパーティションされたものを
物理ボリュームを一つにつなげてボリュームグループとして
仮想ディスクを作成する。
仮想ディスクはまたパーティションを切って論理ボリュームとして利用可能。

pvcreate でデバイスを物理ボリュームにした場合、
データは初期化されるから注意は必要

vgcreate ボリューム名 物理ボリューム 物理ボリューム 

といった感じで仮想ディスクをまとめあげる。

lvcreate -L 500M -n 論理ボリューム ボリュームグループ

せっかくlpic3の仮想環境を取得したなら得意になりたい。
資格試験なんて忘れちゃうし。

目標としては、lxcでコンテナを作成して仮想NICを用意して物理NICとブリッジで
ネットワークの接続までしてみたい。

今のところはlxcがcgroupsとnamespaceによって対象のファイルシステムをホストから隔離できているということだけ知ってるレベルだから

最終的にlxc内に各サービスの環境をansibleをで簡単に用意できたらいいなあ