Post date: 2017/11/01 10:53:51
私は、ec2にubuntuを入れたanagix1と呼んでいるインスタンス(8G)とamzn linuxを入れたanagix3というインスタンス(10G)のほかに、workという10Gのボリュームを作り、通常はworkをanagix1にアタッチし、anagix3からNFSで/mnt/workにマウントしてます。/mnt/workの内容は以下のようになってます:
anagix_tools --- /usr/local/anagix_toolsがシンボリックリンク
docker --- anagix1でdockerするときの /var/lib/docker
opt
chefdk --- ChefのDining Kichenです
vivaldi --- 無視してください。1Gメモリでは重すぎる。
wine-stable --- ubuntuでソースから入れた???
ubuntu
chef-repo --- 使うときは、/home/ubuntu/chef-repoから
work ---これも使うときは、/home/ubuntu/work
そしてこれが大事なのですが、rootでdockerをインストールした後、
docker run -it -v /mnt/work:/mnt/work -v /tmp:/tmp -e DISPLAY -e QT_X11_NO_MITSHM=1 -v /home/ubuntu/.Xauthority:/root/.Xauthority --net=host ubuntu:latest /bin/bash
を実行し、dockerコンテナの中で、/mnt/work/setupという以下のスクリプトを
実行してます。QT_X11_NO_MITSHM=1 を指定しないと、qt4のアプリを動かしたとき、以下のエラーが出て、アプリ画面が正しく表示されません。
X Error: BadAccess (attempt to access private resource denied) 10
# to setup
apt-get update
apt-get install -y xauth
rmdir /opt
ln -s /mnt/work/opt /opt
ln -s /mnt/work/anagix_tools /usr/local/anagix_tools
useradd --uid 1000 -m ubuntu
useradd --uid 1001 -m anagix
# caution: root should set passwords later
ln -s /mnt/work/ubuntu/chef-repo /home/ubuntu/chef-repo
ln -s /mnt/work/ubuntu/work /home/ubuntu/work
# so that ubuntu can use DISPLAY
cp /root/.Xauthority /home/ubuntu/.Xauthority
chown ubuntu /home/ubuntu/.Xauthority
#
apt-get install -y x11-apps
usermod -G sudo anagix
usermod -G sudo ubuntu
apt-get install -y emacs
apt-get install -y libglu1-mesa # for glade
apt-get install -y build-essential
apt-get install -y git
apt-get install -y sudo
su -l ubuntu でubuntuになると XのDISPLAY変数と.Xauthorityが引き継がれているので、コンテナから普通にXを使えます。
ただし、qt4アプリの場合、-lしては何故かダメで、suだけにしてください。(←これハマります。)
EC2のインスタンスを作りなおすよりは、dockerコンテナを作り、スクリプトを
実行するだけですむので、DOCKERを使う方法は有効かと思います。