(試してみよう)仮想化環境の作り方
このBlogをはじめてからコンピュータ・サイエンスに興味を持ち勉強の必要性を感じつつも、なかなか第一歩が踏み出せない人が多いことが分かってきた。これまでの経験では、基本的には「日常的に自分で使ってみる」ことが一番の勉強の近道だと思う。今日はその第一歩として、Linux(Ubuntu)を日常的に使うことで、コンピュータ・サイエンスの学習環境を用意することを案内したい。休みの日にでもチャレンジしてみてほしい。
Linuxを日常的に使うことは現実的か?
最近はTabやスマホでほとんどの日常作業が可能になったので、正直PCを利用する場面は大幅に減っていると思う。現在どうしてもPCを利用するケースとしては
- 年賀状
- そもそも最近では年賀状を送らない人も増えているので、今後は利用しないかもしれない
- 最近でははがきデザインキット(郵便局)や年賀状印刷(カメラのキタムラ)があるので、自宅でプリンタを維持するよりこのようなサービスを頼んだ方がコストパフォーマンスは良いかもしれない。
- 一方で、Linuxで年賀状を作ることはなかなか敷居が高い。スマホなどのアプリで年賀状を作成し、Linuxはただのプリンタサーバとしての利用となっている。CanonやEpsonなどの大手プリンタであれば特に問題なく利用可能だ。
- 動画編集
- 最近ではスマホの動画編集アプリも増え、スマホ自体のマシンパワーも上がってきたので、PCで編集が必要な動画は減ってきている。
- PCで作業が必要な動画は、映画のような長時間&巨大な動画ファイルのエンコードや、運動会の編集のような長時間ファイルから必要な部分のみ切り出したり拡大や逆光加工を頻繁に行う動画だろう。
- Linuxでも動画編集アプリはAvidemux、Lightworks、OpenShotなど品質の良いアプリが増えてきている。
- Excel/Power Point/Wordでの資料作成
- 資料作成はまだまだPCを使った方が簡単に作ることができる気がする。
- 今後はTabで資料作成が可能になっていくかもしれない。
- LinuxではLibreOfficeがMicrosoft Officeと大体互換性があるため、普通に資料作成可能だ。微妙に各ボタンが異なるので、UIに慣れるまでは時間がかかるが。
- ファイルサーバ
- Google DriveやiCloud等、クラウド系のサービスが充実してきたため、あまりファイルサーバとしてのニーズはそれほど大きくないかもしれない。
- バックアップの用途としても大容量のSDカード等で代用可能である。
- 一番容量を消費するものとしては録画があるが、こちらは最近はTVに直接HDDを接続するケースが多いだろう。
- もちろんLinuxでもSMBサーバなど、ファイルサーバを構築することは可能だ。
- 家計簿や住所録
- これが一番どうするか悩ましい気がする。
- スマホのアプリやクラウドなどでも家計簿や住所録は増えてきているが、筆ぐるめやはがき作家などのように長期間サポートが続くか不透明である。
- 一方で、Linuxで気軽に使える家計簿や住所録は少ない
というわけで、一番悩ましいのは家計簿と住所録をどうするかであり、それを除けばLinuxを日常的に利用することはあまり問題はないだろう。むしろ、スマホやクラウドのサービスが充実してきた昨今、そこまで自宅でPCを用意する必要性は減ってきている。
Linuxのインストール
Linuxをインストールして仮想化環境を作るだけであれば、半日もあれば十分準備できるだろう。今回は、GUIが充実、インターネット上のドキュメントや事例が豊富、そして仮想化環境のメジャーディストリビューションの一つということから、Ubuntuを推奨したい。
- Install Mediaの作成:最近では4GB以上のUSBメモリがあれば簡単に作成可能
- Install Mediaからのインストール: GUIに従ってインストール条件を入力
- アカウントの作成
- ソフトウェアのインストール
- OSのチューニング
- 仮想化環境の構築
1. Install Mediaの作成
4GB以上のUSBメモリを用意し、RufusなどのUSB Bootable 作成ソフトでUbuntu ISOを書き込む。
- Ubuntuのダウンロードサイト:https://jp.ubuntu.com/download
- 最初はLTS (Long-Term Support)を選択した方が良い
- LTSは5年間サポートされており、長期間利用できる
- Windowsの場合:Ubuntu ISOとRufusをダウンロードしてきてUbuntu ISOを作成(YAJIROBEHさんのブログより)
- Ubuntuの場合:デフォルトでインストール済のDiskを利用(freefielder.jpより)
2. インストール
Ubuntu20.04のインストール(smdn.jp)にGUIの画面ダンプ付きでインストール手順が記載されているので、こちらに従ってインストールすれば迷うことはないだろう。
1つ悩む設定はPartitioningだろう。『Linuxのパーティションとは?』(エンジニアの入り口)のPartitioningの説明を確認してもらいつつ、以下のような設定が良いだろう。
- HDD or SSDの1本しかない場合
- SWAP (大容量メモリを積んでいないなら必要): ファイルシステム=Linux-swap、サイズ=PCに挿さっている実メモリサイズ程度、マウントポイント=空欄
- ルート”/“ (必須): ファイルシステム=ext4、サイズ=残り全て、マウントポイント=“/“
- SSD+HDDの場合
- SWAP: ファイルシステム=Linux-swap、サイズ=PCに挿さっている実メモリサイズ程度、マウントポイント=空欄、デバイス=HDD
- Boot (SSDを利用した高速起動): ファイルシステム=ext2、サイズ=450MB (将来のkernel image×2世代+予備)、マウントポイント=”/boot”、デバイス=SSD
- Home (個人の保存先): ファイルシステム=ext4、サイズ=HDDの残り全て、マウントポイント=”/home”、デバイス=HDD
- ルート”/“: ファイルシステム=ext4、サイズ=SSDの残り全て、マウントポイント=“/“
3. アカウントの作成
1人で利用する場合は追加不要。家族などで利用する場合は、家族数分ユーザ追加のコマンドを実行する。
$ sudo add user [ユーザ名]
Password入力は必須だが、それ以外は空欄も可
- アカウント作成
$ sudo adduser [login name]
$ sudo usermod -s /bin/rbash
$ sudo usermod -g kids
$ sudo usermod -aG [login name]
- 子供用コマンド類
$ ln -s /usr/bin/[利用させたいsoftware name] .
- 環境変数
[追記]------------------------------------------
PATH=/opt/kidsbin:/usr/games
------------------------------------------------
4. ソフトウェアインストール
■主要ソフトウェア
- KeePassX: Account Manager
- Open Sourceベースのアカウント管理アプリ
- 今の時代アカウント管理アプリは必須だろう
- ”データベース”→”KeePass1データベースのインポート”で古いKeePass系のDBを読み込み移行も可能
- Firefox: Web browser
- デフォルトで入る
- Thunderbird: Mailer
- デフォルトで入る
- Rhythmbox: Music Player
- デフォルトで入ってくる
- SMplayer: Media Player
- 定番のメディアプライヤー
$ sudo apt install ubuntu-restricted-extras
$ sudo apt install libdvd-pkg
$ sudo dpkg-reconfigure libdvd-pkg
■ソフトウェア管理系のLinux基本コマンド
- パッケージリスト更新
- $ sudo apt update
- ソフトウェア更新
- $ sudo apt upgrade
- OS更新(ソフトウェア更新でUpdateできない場合)
- $ sudo apt dist-upgrade
- ソフトウェア検索
- $ sudo apt-cache search [キーワード]|grep [絞り込みワード]
- ソフトウェアインストール
- $ sudo apt install [ソフトウェア検索でヒットしたソフトウェア名]
- インストール済みソフトウェアの確認
- $ sudo dpkg -l|grep [絞り込みワード]
- ゴミ掃除
- $ sudo apt-get autoclean
- $ sudo apt-get autoremove
5. OSチューニング
- 不要デーモン停止
[修正]-----------------------------------------
AVAHI_DAEMON_DETECT_LOCAL=0
↓
AVAHI_DAEMON_DETECT_LOCAL=1
------------------------------------------------
$ apt-get install sysv-rc-conf
$ sysv-rc-conf
- IPv6無効化
$ sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
$ sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
------------------------------------------------
- ファイアーウォールの設定
$ sudo ufw default DENY
$ sudo ufw limit ssh
$ sudo ufw logging low
$ sudo vi /etc/rsyslog.d/20-ufw.conf
→ 最後のコメントを外す
$ sudo vi /etc/ufw/before.rules
[追記]------------------------------------------
-A ufw-before-forward -i br0 -j ACCEPT
------------------------------------------------
- SSD対応
- SSDは空領域が十分に確保できていないと性能が劣化する。
- 頻繁に書き込みが発生すると寿命が短くなる。
- ext4でmountすること
- AHCIモードにすること
[追記]------------------------------------------
# For SSD, Writeback Time 500 -> 1500
vm.dirty_writeback_centisecs = 1500
------------------------------------------------
$ vi /etc/fstab
[修正](SSDのマウントに対し)---------------------
UUID=2b2b66b2-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 noatime,discard,errors=remount-ro 0 1
------------------------------------------------
- NTP変更
[修正]-----------------------------------------
#NTP=
↓
NTP=ntp.nict.jp
------------------------------------------------
- リポジトリサーバの変更
- timeout時間の変更
[修正]-----------------------------------------
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
↓
DefaultTimeoutStartSec=30s
DefaultTimeoutStopSec=30s
------------------------------------------------
- プリンタサーバ構築(LAN内の全てのWindows PCから印刷可能)
$ cp cupsd.conf /etc/cups/cupsd.conf
[修正](ブラウザで操作)---------------------
Browsing On
BrowseAllow 192.168.XX.0/255.255.255.0
BrowseAddress 192.168.XX.XX(UbuntuのIP)
# Restrict access to the admin pages...
<Location /admin>
Authtype Basic
AuthClass System
Order deny,allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.XX.XX(UbuntuのIP)
</Location>
---------------------------------------------
[修正](プリンタサーバ化)---------------------
# Restrict access to the server...
<Location />
Order deny,allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.XX.0/255.255.255.0
</Location>
---------------------------------------------
firefoxで「http://192.168.XX.XX:631/
[Windows側]
http://192.168.XX.X:631/printers/[プリンタ名]
- ufwのrsyslogの設定変更
#&stop
↓
&stop
------------------------------------------------
- SSHの設定
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
UsePrivilegeSeparation yes
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
HostbasedAuthentication no
PermitEmptyPasswords no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
Subsystem sftp /usr/lib/openssh/sftp-server
------------------------------------------------
6. 仮想化構築
■準備- ソフトウェアインストール
$ sudo apt install qemu qemu-kvm libvirt-daemon libvirt-clients bridge-l
$ sudo modprobe kvm
- ファイアーウォールの設定(ルータでファイアーウォールを設定するのであれば不要)
- ソフトウェア構造
- ハイパーバイザー:Ubuntu (Kernel内にハイパーバイザー(KVM)がマージされています)
- 仮想SW:Ubuntuの場合、簡單な方法は物理NICにブリッジする方法ですが、仮想スイッチを利用することも可能です。
- VM本体: ドメインファイル(XML)+Diskイメージ(qcow2/raw)
- VMの操作:virsh(CLI)+virt-manager(GUI)
- 通常の操作はvirt-managerで良いと思います。
空のVMは立ち上がります。
- 仮想SW(br0)の作成
- Ubuntu 20.04よりネットワーク関連の設定方法が変更になっています。
$ sudo modprobe bridge
$ sudo vi /etc/netplan/99_config.yaml
[新規]------------------------------------------
network:
version: 2
renderer: networkd
ethernets:
enp2s0:
dhcp4: true
bridges:
br0:
interfaces:
dhcp6: false
parameters:
forward-delay: 0
stp: false
optional: true
------------------------------------------------
[追記]------------------------------------------
-A ufw-before-forward -i br0 -j ACCEPT
------------------------------------------------
→reboot
- GUESTの作成方法(CLI)
$ qemu-img create -f qcow2 [Diskイメージ名] [サイズ]
$ qemu-kvm -drive index=0,file=[Diskイメージ名],if=virtio -net nic,model=virtio -net tap,model=tap1 -m 1024 -vnc :0
→このあとは”リモート・デスクトップのビューア”(標準インストール)で普通にインストール作業。
- GUESTの管理
- 上記でVMの作製はできますが、このままでは管理できません。そのため、管理ソフト(virsh+virt-manager)に組み込む必要があります。
- 一度起動したVMを停止し、ドメインファイルを作成する必要があります。ドメインファイルの例。環境に合わせてドメインファイルを作成し、以下のコマンドを叩くとvirsh+virt-managerで管理できるようになります。
$ sudo virt-manager
(参考) http://ymotongpoo.hatenablog.com/entry/20100806/1281084634
- GUESTの作成方法(GUI)
- 以前は、GUIだと微妙な調整が出来なかったが、Linux単体をインストールするだけであれば、GUIで十分
- この場合、virt-manager上でVMの作製するため、この時点でvirt-managerで管理可能。
後はGUIで以下のURLに従って設定&インストール。
http://symfoware.blog68.fc2.com/blog-entry-963.html
http://symfoware.blog68.fc2.com/blog-entry-964.htmlチューニング
- virtio化
- 完全仮想化の場合、Disk IO/ネットワーク IOが非常に遅いので準仮想化(virtio化)が必要となる。Windowsの場合はvirtioドライバを読み込ませる作業が必要。
- spice設定方法
- 起動したVMにリモート接続しないと操作できないため、その設定が必要
- RDP等様々なプロトコルがあるが、今回はspiceによる設定方法
[修正]------------------------------------------
<emulator>/usr/bin/kvm</emulator>
↓
<emulator>/usr/bin/kvm-spice</emulator>
<model type='cirrus' vram='9216' heads='1'/>
↓
<model type='qxl' vram='9216' heads='1'/>
<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0'>
↓
<graphics type='spice' port='5900' autoport='no' listen='0.0.0.0'>
------------------------------------------------
[確認]------------------------------------------
<video>
<model type='qxl' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
→ slot='0x02'であること
&他のtype='pci'でslot='0x02'のものが無いこと
------------------------------------------------
$ vi /etc/libvirt/qemu.conf (KVMの設定)
[確認]------------------------------------------
spice_listen = "0.0.0.0"
→ コメントアウトが外れていること
spice_password = "[PASSWORD for SPICE]"
→ コメントアウトが外れていること
------------------------------------------------
- ドメイン設定ファイルの記述 (SPICEの設定例)
- イメージはまっさらの qcow2
- virt-manager(GUI)から VM を新造、↑の qcow2 をマウント
- 仮想 NIC は 'default' (NAT) + virtio
- ディスプレイを spice に、サーバアドレス 127.0.0.1 ポート自動割り当て(TLSポートも)
- Channel デバイス spicevmc
- ビデオカード cirrus または qxl
- →安定して動く方を選ん利用
- Synaptic パッケージマネージャで spiceに関連するソフトウェアをインストール
- qemu-kvm-spice とほかに関連ありそうなライブラリも色々インストール。
- spice-client-gtk 0.9-0ubuntu1
- spice-vdagent 0.8.1-1
- spice-client 0.10.0-1
- python-spice-client-gtk 0.9-0ubuntu1
- gir1.2-spice-client-glib-2.0 0.9-0ubuntu1
- gir1.2-spice-client-gtk-3.0 0.9-0ubuntu1 (同 gtk-2.0 は入れてない)
- qemu-kvm-spice
- libspice-client-gtk-2.0-1
- libspice-client-gtk-3.0-1
- ドメインファイルの修正
<emulator>/usr/bin/kvm-spice</emulator> に修正。
- Channel について
- デバイスの種類: spicevmc
- ターゲットの種類: virtio
- ターゲット名: com.redhat.spic
qxl を選択した状態だと、普段は起動時に出るテキストのステータスが表s
しばらく黒い画面のままで、待っているといきなり GUI が現れるといった状態です。
GUI の解像度もやたら広い状態になっており、ディスプレイ関連の設定を詰める必要がある。
<domain type='kvm'>
<name>sandbox</name>
<uuid>6d8c1481-8e0a-2db2-8c6b-bbad0f214409</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
<bootmenu enable='yes'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm-spice</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/sandbox.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='[DVD ISOファイル名]'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' unit='0'/>
</disk>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07'
function='0x0'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01'
function='0x1'/>
</controller>
<interface type='network'>
<mac address='52:54:00:9f:45:09'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'/>
<input type='mouse' bus='ps2'/>
<graphics type='spice' autoport='yes'/>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
</sound>
<video>
<model type='qxl' vram='65536' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/>
</memballoon>
</devices>
</domain>
---------------------------------------------------------------------------------------------
■コンテナ環境GPU利用環境のインストール
- ドライバのインストール
「GeForce」→「GeForce 10 Series」→「GeForce GTX 1050 Ti」→「Linux 64-bit」→「Japanese」
からパッケージのダウンロード
$ dpkg -i nvidia-diag-driver-local-repo-ubuntu1604-384.125_1.0-1_amd64.deb
- ・CUDA Toolkitのインストール
https://developer.nvidia.com/cuda-downloads
$ sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda
- nvidia-Dockerのインストール
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
------------------------------------------------
pub 4096R/0EBFCD88 2017-02-22
フィンガー・プリント = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22
------------------------------------------------
$ 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 docker-ce
- nvidia-dockerのインストール
のQuickstart
sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd
- Dockerの起動
コメント
コメントを投稿