2018年1月22日月曜日

VagrantでRabbitMQとManagement Web interface、Anaconda、pikaをインストールした仮想マシン(Debian9.3)を構築する

以下のVagrantfileを使用して、RabbitMQとManagement Web interface、Anaconda、pikaをインストールした仮想マシンを構築することができます。
仮想マシン構築後、ブラウザからhttp://192.168.55.101:15672/にアクセスします。デフォルトユーザはrabbitmq、パスワードはrabbitmqです。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.3"
  config.vm.hostname = "db93rabbitmq"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db93rabbitmq"
     vbox.cpus = 2
     vbox.memory = 1024
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  config.vm.network "private_network", ip: "192.168.55.101", :netmask => "255.255.255.0"
  config.vm.network "public_network", ip:"192.168.1.101", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
apt-get -y install task-japanese
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# install rabbitmq
apt-get -y install rabbitmq-server

rabbitmq-plugins enable rabbitmq_management
systemctl enable rabbitmq-server
systemctl restart rabbitmq-server

# setup management web interface
rabbitmqctl add_user rabbitmq rabbitmq
rabbitmqctl set_user_tags rabbitmq administrator
rabbitmqctl set_permissions -p / rabbitmq ".*" ".*" ".*"

# install anaconda & pika
wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
chmod +x Anaconda3-5.0.1-Linux-x86_64.sh
./Anaconda3-5.0.1-Linux-x86_64.sh -b -p /opt/anaconda
source /opt/anaconda/bin/activate
pip install --upgrade pip
pip install pika

# execute a sample program to put a message.
cat << EOF > put-helloworld.py
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
  routing_key='hello',
  body='Hello World!')
print(" put 'Hello World!'")
EOF
python put-helloworld.py

# exeucte a sample program to get a message
cat << EOF > get-helloworld.py
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
method_frame, header_frame, body = channel.basic_get('hello')
if method_frame:
  print(method_frame, header_frame, body)
  channel.basic_ack(method_frame.delivery_tag)
else:
  print('no message')
EOF
python get-helloworld.py

echo 'management web interface : http://192.168.55.101:15672/'
echo 'user : rabbitmq     password rabbitmq'
SHELL
end

〇RabbitMQの管理者画面


DockerでMyBBがインストールされたコンテナ(Alpine 3.7)を構築する

MyBBはPHP製のフォーラムを提供するサーバーアプリケーションです。
以下の手順で、MyBBとMySQLのコンテナを構築・実行します。

○構築方法
1. MyBBイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mybb .

Dockerfile
FROM alpine:3.7
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7-mysqli php7-intl php7-mcrypt php7-mbstring php7-session php7-curl php7-json php7-xml php7-zip php7-imagick openssl openrc imagemagick-libs unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://resources.mybb.com/downloads/mybb_1814.zip \
  && unzip mybb_1814.zip \
  && rm -f mybb_1814.zip \
  && mkdir /opt \
  && mv Upload /opt/mybb \
  && chown -R apache:apache /opt/mybb \
  && ln -s  /opt/mybb /var/www/localhost/htdocs \
  && mkdir -p /run/apache2 \
EXPOSE 80
VOLUME /opt/mybb
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2. MyBBとMySQLコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "2"
services:
  mybb:
    image: mybb
    container_name: "mybb"
    volumes:
      - "mybb-data:/opt/mybb"
    ports:
      - "80:80"
    depends_on:
      - db
    environment:
      MYBB_DB_HOST: "db:3306"
  db:
    image: mysql:5.7
    container_name: "mybb-db"
    volumes:
      - "db-data:/var/lib/mysql"
    environment:
        MYSQL_DATABASE: mybb
        MYSQL_ROOT_PASSWORD: mybb
volumes:
  db-data:
    driver: local
  mybb-data:
    driver: local

3. ブラウザからhttp:///mybb/にアクセス
Welcome画面で「Next」をクリックする


4.License Agreement画面でLicenseを確認し、同意できれば「Next」をクリックする


5. Requirement Check画面で「Next」をクリックする


6.Database Configuration画面で以下の項目を入力し、「Next」をクリックする
Database Server Hostname: db
Database Username: root
Database Password: mybb
Database Name: mybb


7. Table Creation画面で「Next」をクリックする


8. Table Population画面で「Next」をクリックする


9. Theme Insertion画面で「Next」をクリックする


10. Board Configuration画面で掲示板の情報を入力し、「Next」をクリックする


11. Create Administrator Account画面で管理者の情報を入力し、「Next」をクリックする


12. Finish Setup画面


○MyBBの画面


○その他
・MyBBとMySQLコンテナの停止・削除(docker-compose.ymlがあるフォルダで実行)
docker-compose down

・永続化ボリュームの削除
docker volume rm mybb_db-data
docker volume rm mybb_mybb-data

VagrantでadminMongoとMongoDB3.6をインストールした仮想マシン(CentOS7.4)を構築する

adminMongoでwebブラウザからMongoDBを管理する事ができます。以下のVagrantfileを使用して、adminMongoとMongoDB3.6がインストールされた仮想マシン(CentOS7.4)を構築する事ができます。
仮想マシン後構築後、ブラウザからhttp://192.168.55.104:1234にアクセスします。
testデータベースへの接続文字列にはmongodb://test:test@192.168.55.104/testを指定します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.4"
  config.vm.hostname = "co74mongodb36adminmongo"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co74mongodb36adminmongo"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  # private network
  config.vm.network "private_network", ip: "192.168.55.104", :netmask => "255.255.255.0"
  # bridge netwrok
  config.vm.network "public_network", ip: "192.168.1.104", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
yum -y install curl git

cat << EOF > /etc/init.d/disable-transparent-hugepages
#!/bin/bash
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case \\$1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > \\${thp_path}/enabled
    echo 'never' > \\${thp_path}/defrag

    re='^[0-1]+$'
    if [[ \\$(cat \\${thp_path}/khugepaged/defrag) =~ \\$re ]]
    then
      # RHEL 7
      echo 0  > \\${thp_path}/khugepaged/defrag
    else
      # RHEL 6
      echo 'no' > \\${thp_path}/khugepaged/defrag
    fi

    unset re
    unset thp_path
    ;;
esac
EOF
chmod 755 /etc/init.d/disable-transparent-hugepages
chkconfig --add disable-transparent-hugepages
/etc/init.d/disable-transparent-hugepages start

cat << EOF > /etc/yum.repos.d/mongodb-org-3.6.repo
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
EOF
yum install -y mongodb-org

mkdir -p /srv/mongodb/
openssl rand -base64 741 > /srv/mongodb/mongodb-keyfile
chmod 600 /srv/mongodb/mongodb-keyfile
chown mongod:mongod /srv/mongodb/mongodb-keyfile

systemctl enable mongod
systemctl start mongod

# wait until mongod starts listening.
while netstat -lnt | awk '$4 ~ /:27017$/ {exit 1}'; do sleep 10; done

cat << EOF | mongo
var db = db.getSiblingDB('admin');
db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase",db:"admin"}]});
EOF


echo 'security:' >> /etc/mongod.conf
echo '  authorization: enabled' >> /etc/mongod.conf
echo '  keyFile: /srv/mongodb/mongodb-keyfile' >> /etc/mongod.conf
sed -i -e 's/bindIp: 127.0.0.1/bindIp: 192.168.55.104/' /etc/mongod.conf

systemctl restart mongod
while netstat -lnt | awk '$4 ~ /:27017$/ {exit 1}'; do sleep 10; done

# create a test user.
cat << EOF | mongo --host 192.168.55.104 -u "admin" -p "admin" --authenticationDatabase "admin"
var db = db.getSiblingDB('test');
db.createUser({user:"test",pwd:"test",roles:[{role:"readWrite",db:"test"}]});
EOF

# create sample data
cat << EOF | mongo --host 192.168.55.104 -u "test" -p "test" --authenticationDatabase "test"
var db = db.getSiblingDB('test');
db.products.insert( { item: "chair", qty: 15 } );
db.products.insert( { item: "table", qty: 3 } );
db.products.find();
EOF


curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum -y install nodejs

cd /opt
git clone https://github.com/mrvautin/adminMongo.git
cd adminMongo
npm install

cat << EOF > /etc/systemd/system/adminmongo.service
[Unit]
Description=adminmongo
Requires=network.target
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/adminMongo
ExecStart=/usr/bin/npm start

[Install]
WantedBy=multi-user.target
EOF
systemctl enable adminmongo.service
systemctl start adminmongo.service

echo 'access http://192.168.55.104:1234';
echo 'add a connection -> mongodb://test:test@192.168.55.104/test'

SHELL
end

〇adminMongoの画面


VagrantでQGIS、LXDE Desktop環境、XRDPがインストールされた仮想マシン(Ubuntu16.04)を構築する

以下のVagrantfileを使用して、QGIS、LXDE Desktop環境、XRDPをインストールした仮想マシン(Ubuntu16.04)を構築できます。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はVagrant、パスワードもVagrantでログオンできます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604lxdeqgis"
  config.vm.network :public_network, ip:"192.168.1.111"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604lxdeqgis"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
  end
  config.vm.provision "shell", inline: <<-SHELL
sed -i.bak -e "s#http://archive.ubuntu.com/ubuntu/#http://ftp.riken.jp/pub/Linux/ubuntu/#g"; /etc/apt/sources.list
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
apt-get -y install xrdp fcitx-mozc lubuntu-desktop language-pack-ja
im-config -n fcitx

# install QGIS
echo "deb http://qgis.org/debian xenial main" >> /etc/apt/sources.list
echo "deb-src http://qgis.org/debian xenial main" >> /etc/apt/sources.list
wget -O - http://qgis.org/downloads/qgis-2017.gpg.key | gpg --import
gpg --fingerprint CAEB3DC3BDF7FB45
gpg --export --armor CAEB3DC3BDF7FB45 | sudo apt-key add -
apt-get update
apt-get -y install qgis python-qgis qgis-plugin-grass

# download countries data
apt-get -y install unzip
wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip
unzip ne_110m_admin_0_countries.zip

init 5
SHELL
end

〇QGISの画面


Vagrantでptpythonとanacondaをインストールした仮想マシン(Debian Stretch/9.2)を構築する。

ptpythonでシンタックス補完などの機能を利用してインタラクティブにpythonスクリプトを実行できます。
以下のVagrantfileを使用して、ptpythonとanacondaがインストールされた仮想マシンを構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.2"
  config.vm.hostname = "db92ptpython"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db92ptpython"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
# update packages
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# install anaonda
wget https://repo.continuum.io/archive/Anaconda3-5.0.0-Linux-x86_64.sh
chmod +x Anaconda3-5.0.0-Linux-x86_64.sh
./Anaconda3-5.0.0-Linux-x86_64.sh -b -p /opt/anaconda
source /opt/anaconda/bin/activate
pip install --upgrade pip

# install ptpython
pip install ptpython

echo 'execute following commands.'
echo 'source /opt/anaconda/bin/activate'
echo 'ptpython'
SHELL
end

〇ptpythonの画面


2018年1月21日日曜日

VagrantでStellarium、LXDE Desktop環境がインストールされた仮想マシン(Ubuntu16.04)を構築する

Stellariumはパソコン上で星座を表示できるプラネタリウムソフトです。
以下のVagrantfileを使用して、Stellarium、LXDE Desktop環境をインストールした仮想マシンを構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604lxdestellarium"
  config.vm.network :public_network, ip:"192.168.1.119"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604lxdestellarium"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--vram", "12"]
  end
  config.vm.provision "shell", inline: <<-SHELL
sed -i.bak -e "s#http://archive.ubuntu.com/ubuntu/#http://ftp.riken.jp/pub/Linux/ubuntu/#g" /etc/apt/sources.list
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
#apt-get -y install xrdp fcitx-mozc lubuntu-desktop language-pack-ja
apt-get -y install fcitx-mozc lubuntu-desktop language-pack-ja virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
im-config -n fcitx


# install stellarium
add-apt-repository ppa:stellarium/stellarium-releases
sudo apt-get update
apt-get -y install stellarium

init 5
SHELL
end

〇Stellariumの画面

VagrantでQuiteRSS、LXDE Desktop環境、XRDPがインストールされた仮想マシン(Debian Stretch/9.3)を構築する

以下のVagrantfileを使用して、QuiteRSS、LXDE Desktop環境、XRDPをインストールした仮想マシン(Debian Stretch/9.3)を構築できます。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はVagrant、パスワードもVagrantでログオンできます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.3"
  config.vm.hostname = "db93lxdequiterss"
  config.vm.network "public_network", ip:"192.168.1.118", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db93lxdequiterss"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
cat << EOF > /etc/default/keyboard
XKBMODEL="pc106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF
cat << EOF > /home/vagrant/.xsession
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
sed -i -e "s/^EnabledIMList.*$/EnabledIMList=fcitx-keyboard-jp:True,mozc:True,fcitx-keyboard-us:False/" /home/vagrant/.config/fcitx/profile
fcitx-remote -r
fcitx -r -d
lxsession -s LXDE -e LXDE
EOF
chown vagrant:vagrant .xsession
apt-get -y install  xrdp fcitx-mozc task-lxde-desktop tigervnc-standalone-server fcitx-tools
export DISPLAY=:0.0
im-config -n fcitx
sudo -u vagrant bash -i -c "export DISPLAY=:0.0 && fcitx -r"
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.org
cat /etc/xrdp/xrdp.ini.org | awk '/\\[Globals\\]/,/\\[Xorg\\]/' | sed -e 's/\\[Xorg\\]//' > /etc/xrdp/xrdp.ini
cat << EOF >> /etc/xrdp/xrdp.ini
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
EOF
systemctl restart xrdp
systemctl enable xrdp

# install QuiteRSS
apt-get -y install software-properties-common
add-apt-repository ppa:quiterss/quiterss
apt-get update
apt-get -y install quiterss

init 5
SHELL
end

〇QuiteRSSの画面