プログラミングとかLinuxとかの備忘録

プログラミング、Linuxでハマった箇所や環境構築のメモ

Ubuntu16.04でVirtualBoxを動かす

実行環境

  • OS : Ubuntu16.04.4 LTS
  • CPU: Ryzen Threadripper 1950X
  • M/B: ASUS PRIME-X399-A

インストール

$ sudo apt-get -y install virtualbox

仮想マシンを起動してみる

$ virtualbox

別マシンで作成したWindows7の仮想HDD(Win7Test)を指定して起動すると、ポップアップで下記内容が表示されて起動に失敗する

Failed to open a session for the virtual machine Win7Test.

AMD-V is disabled in the BIOS (or by the host OS) (VERR_SVM_DISABLED).

Result Code: NS_ERROR_FAILURE (0x80004005)
Component : ConsoleWrap
Interface : IConsole {872da645-4a9b-1727-bee2-5585105b9eed}

AMD-Vが無効になっている

仮想化機能の確認

ハードウェアがサポートしているか

されている

$ LC_ALL=C lscpu | grep Virtualization
Virtualization:        AMD-V

OSからAMD-Vが利用可能か

Intelでやったときkvm_intelが出てきていたが,kvm_amdみたいなのが無いのでBIOSカーネルかで無効になっている?

$ lsmod | grep kvm
kvm                   552960  0
irqbypass              16384  1 kvm

マザーボードで有効化されているか

Advanced -> CPU Configuration -> SVM Modeで有効化(Disabled -> Enabledに変更)する必要があった

再起動するとkvm_amdが追加された

$ lsmod | grep kvm
kvm_amd                65536  0
kvm                   552960  1 kvm_amd
irqbypass              16384  1 kvm

kvm_amdが追加された状態ならエラーなしで仮想マシンを起動できた

Ubuntu16.04にsambaサーバを立てる

インストール

$ sudo apt-get -y install samba

設定ファイル編集

$ sudo vim /etc/samba/smb.conf

で設定ファイルを編集する

globalセクション

[global]
        unix charset = UTF-8
        dos charset = CP932
        writable = yes
        guest ok = no
        vfs objects = recycle
        recycle:repository = .recycle
        recycle:keeptree = no
        recycle:touch = yes
        recycle:versions = yes
        recycle:maxsize = 0

homesセクション

# Un-comment the following (and tweak the other settings below to suit)
# to enable the default home directory shares. This will share each
# user's home directory as \\server\username
[homes]
   comment = Home Directories
   browseable = yes
# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
;   read only = yes
    read only = no
# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
;   create mask = 0700
# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
;   directory mask = 0700
# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# Un-comment the following parameter to make sure that only "username"
# can connect to \\server\username
# This might need tweaking when using external authentication schemes
    valid users = %S

プリンタ

不要なので無効にする

;[printers]
;   comment = All Printers
;   browseable = no
;   path = /var/spool/samba
;   printable = yes
;   guest ok = no
;   read only = yes
;   create mask = 0700
;
;# Windows clients look for this share name as a source of downloadable
;# printer drivers
;[print$]
;   comment = Printer Drivers
;   path = /var/lib/samba/printers
;   browseable = yes
;   read only = yes
;   guest ok = no

サービス起動

$ sudo systemctl start smbd nmbd
$ sudo systemctl enable smbd nmbd

Sambaユーザの追加

下記コマンドでユーザを追加できる。
追加後にサービスを再起動する必要はない。

$ sudo smbpasswd -a ユーザ名
New SMB password: パスワード入力
Retype new SMB password: パスワード再入力
Added user ユーザ名.

UbuntuServer16.04でnvidia-dockerを動かす

UbuntuServer16.04でnvidia-dockerを動かす

構成

  • UbuntuServer 16.04.4 LTS
  • GTX1080ti *1

確認

以下のコマンドで,何も出てこないことを確認する

$ sudo dpkg -l | grep nvidia
$ sudo dpkg -l | grep cuda

Nvidiaドライバのインストール

リポジトリ(Proprietary GPU Drivers : “Graphics Drivers” team)
を登録して,ドライバをインストールする

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update

$ sudo apt -y install nvidia-396

再起動し,

$ sudo reboot

GPUが認識されているかを確認

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.18                 Driver Version: 396.18                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:41:00.0  On |                  N/A |
| 29%   43C    P0    59W / 250W |     59MiB / 11164MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1594      G   /usr/lib/xorg/Xorg                            56MiB |
+-----------------------------------------------------------------------------+

dockerのインストール

Ubuntu公式リポジトリdocker.ioではnvidia-dockerを実行できない (docker-engine, docker-ce, docker-eeのいずれかのパッケージが依存関係として必要) ので、Get Docker CE for Ubuntu | Docker Documentation の通りにインストールする

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    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 -y install docker-ce

ユーザをdockerグループに追加し、ログインし直すとsudo無しでdockerを実行できるようになる

$ sudo gpasswd -a ユーザ名 docker

## logout & login

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

nvidia-dockerのインストール

GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUsの通りにインストールする

GPGキーの追加

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | 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

nvidia-dockerのインストール

$ sudo apt-get -y install nvidia-docker2
$ sudo pkill -SIGHUP dockerd

テスト

$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
Unable to find image 'nvidia/cuda:latest' locally
latest: Pulling from nvidia/cuda
d3938036b19c: Pull complete
a9b30c108bda: Pull complete
67de21feec18: Pull complete
817da545be2b: Pull complete
d967c497ce23: Pull complete
5ddeb439bad8: Pull complete
c6496427ad3b: Pull complete
360fde1360ca: Pull complete
4cc434a95aa2: Pull complete
e5c0eee6e0d5: Pull complete
Digest: sha256:d17a4683f1554de305741e55886d5835b204f602ca73a0df83e02afeb313db76
Status: Downloaded newer image for nvidia/cuda:latest
Thu Apr 19 08:35:27 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.18                 Driver Version: 396.18                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:41:00.0  On |                  N/A |
| 29%   32C    P8    10W / 250W |     59MiB / 11164MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

動いた

Debian9にGeForceのドライバをインストールする

リポジトリの追加

$ sudo vim /etc/apt/sources.list
deb http://httpredir.debian.org/debian/ stretch main contrib non-free

インストール

$ sudo apt update
$ sudo apt -y install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//') nvidia-driver

この段階ではまだ有効になっていないので、再起動してnouveauのblacklistを適用する必要がある

$ sudo reboot

その他

$ sudo apt -y install nvidia-smi
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.82                 Driver Version: 375.82                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 0000:41:00.0     Off |                  N/A |
| 29%   43C    P0    59W / 250W |      0MiB / 11158MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

動いてそう

Debian9をX2Goサーバーにする

Xfceのインストール

GUI環境がインストールされていないのでXfceをインストールする

$ sudo apt -y install --no-install-recommends task-xfce-desktop

dirmngrのインストール

X2Goインストール時に

gpg: failed to start the dirmngr '/usr/bin/dirmngr': No such file or directory

と言われるので、dirmngrをインストールしておく

$ sudo apt -y install dirmngr

X2Goサーバのインストール

wiki:repositories:debian [X2Go - everywhere@home]に載っている通りGPGキー、リポジトリを追加

$ apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
Executing: /tmp/apt-key-gpghome.5cBT7DkF8w/gpg.1.sh --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
gpg: key E1F958385BFE2B6E: public key "X2go Debian/Ubuntu Packaging <debian@x2go.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1

$ sudo bash -c "echo 'deb http://packages.x2go.org/debian stretch extras main' >> /etc/apt/sources.list.d/x2go.list"
$ cat /etc/apt/sources.list.d/x2go.list
deb http://packages.x2go.org/debian stretch extras main

aptのキャッシュの更新

$ sudo apt update
$ sudo apt install x2go-keyring
$ sudo apt update

X2Go本体のインストール

$ sudo apt -y install x2goserver x2goserver-xsession

X2Goクライアントのインストール

Windows10にインストールする

doc:installation:x2goclient [X2Go - everywhere@home]のリンクDownload X2Go for MS Windowsからexeをダウンロードしてインストール

インストールが完了したら

  • Host: サーバのIP
  • Login: SSHログインするユーザ名

を指定して、Session typeXFCEにすればとりあえず接続できた


references

matplotlibでNimbus Roman No9 Lを使う

でグラフの文字をNimbus Roman No9 Lにしたい

フォントのインストール

$ sudo yum -y install fonts-texgyre

使用するコード

test.mplstyleは空のテキスト

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

with plt.style.context('test.mplstyle'):
    x = np.linspace(0,3,20)
    y = x**2 + 1

    plt.plot(x, y, "r-")
    plt.xlabel("x")
    plt.ylabel("y")

    plt.savefig("test.pdf")

プロットしてみる

この時点ではフォント設定を変更していないのでデフォルトのフォントが使用される

$ python3 plot.py
$ pdffonts test.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
DejaVuSans                           Type 3            Custom           yes no  no      14  0

フォントを変える

font.serifにNimbus Roman No9 Lを指定

$ vim test.mplstyle
font.serif  : Nimbus Roman No9 L
font.family : serif

して実行

$ python3 plot.py
...
UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans
...

$ pdffonts test.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
DejaVuSans                           Type 3            Custom           yes no  no      14  0

serifが見つからないらしい

font.familyに直接フォントを指定

$ vim test.mplstyle
font.family  : Nimbus Roman No9 L

して実行

$ python3 plot.py
...
UserWarning: findfont: Font family ['Nimbus Roman No9 L'] not found. Falling back to DejaVu Sans
...

$ pdffonts test.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
DejaVuSans                           Type 3            Custom           yes no  no      14  0

Nimbus Roman No9 Lが見つからない

Nimbus Roman No9 Lはインストールされているのか確認

インストールはされている

$ fc-list | grep Nimbus
/usr/share/fonts/type1/gsfonts/n021024l.pfb: Nimbus Roman No9 L:style=Medium Italic
/usr/share/fonts/type1/gsfonts/n021004l.pfb: Nimbus Roman No9 L:style=Medium
/usr/share/fonts/type1/gsfonts/n022003l.pfb: Nimbus Mono L:style=Regular
/usr/share/fonts/type1/gsfonts/n021023l.pfb: Nimbus Roman No9 L:style=Regular Italic
/usr/share/fonts/type1/gsfonts/n019063l.pfb: Nimbus Sans L:style=Regular Condensed Italic
/usr/share/fonts/type1/gsfonts/n019064l.pfb: Nimbus Sans L:style=Bold Condensed Italic
/usr/share/fonts/type1/gsfonts/n022023l.pfb: Nimbus Mono L:style=Regular Oblique
/usr/share/fonts/type1/gsfonts/n019043l.pfb: Nimbus Sans L:style=Regular Condensed
/usr/share/fonts/type1/gsfonts/n019044l.pfb: Nimbus Sans L:style=Bold Condensed
/usr/share/fonts/type1/gsfonts/n021003l.pfb: Nimbus Roman No9 L:style=Regular
/usr/share/fonts/type1/gsfonts/n019023l.pfb: Nimbus Sans L:style=Regular Italic
/usr/share/fonts/type1/gsfonts/n022004l.pfb: Nimbus Mono L:style=Bold
/usr/share/fonts/type1/gsfonts/n019024l.pfb: Nimbus Sans L:style=Bold Italic
/usr/share/fonts/type1/gsfonts/n019004l.pfb: Nimbus Sans L:style=Bold
/usr/share/fonts/type1/gsfonts/n022024l.pfb: Nimbus Mono L:style=Bold Oblique
/usr/share/fonts/type1/gsfonts/n019003l.pfb: Nimbus Sans L:style=Regular

matplotlibのキャッシュを削除

$ rm -rf ~/.cache/matplotlib

ここでもう一度プロットするもNimbus Roman No9 Lが見つからない

$ python3 plot.py
...
UserWarning: findfont: Font family ['Nimbus Roman No9 L'] not found. Falling back to DejaVu Sans
...

$ pdffonts test.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
DejaVuSans                           Type 3            Custom           yes no  no      14  0

texモードをONにする

$ vim test.mplstyle
text.usetex : true
font.serif  : Nimbus Roman No9 L
font.family : serif

DejaVuではなくなったが、Nimbus Romanでもない

$ python3 plot.py
...
UserWarning: findfont: Font family ['Nimbus Roman No9 L'] not found. Falling back to DejaVu Sans
...

$ pdffonts test.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
CMMI10                               Type 1            Builtin          yes no  no      17  0
CMR10                                Type 1            Builtin          yes no  no      13  0

なんとなくTimesにしてみたら

$ vim test.mplstyle
text.usetex : true
font.serif  : Times
font.family : serif

縦軸、横軸の文字(xy)がNimbus Romanになった

$ python3 plot.py
$ pdffonts test.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
CMMI10                               Type 1            Builtin          yes no  no      17  0
NimbusRomNo9L-Regu                   Type 1            Custom           yes no  no      13  0

texモードをOFFにする

$ vim test.mplstyle
text.usetex : false
font.family : Times

DejaVu

$ python3 plot.py
...
UserWarning: findfont: Font family ['Nimbus Roman No9 L'] not found. Falling back to DejaVu Sans
...

name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
DejaVuSans                           Type 3            Custom           yes no  no      14  0

まとめ

matplotlibでNimbus Roman No9 Lを使用するときは

fonts-texgyreをインストールして、matplotlibのフォント設定を

text.usetex : true
font.serif  : Times
font.family : serif

にする

Ubuntu16.04でのbondingとWake on Lanの設定

NIC冗長化

設定前

eno1の方のIPを固定してそっちを使ってる

$ sudo nmcli device
DEVICE   TYPE      STATE         CONNECTION
eno1     ethernet  connected     eno1
enp14s0  ethernet  disconnected  --
lo       loopback  unmanaged     --

設定

bondingデバイスの作成

$ sudo nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup
Connection 'bond0' (d1619bdf-38b7-4f20-8a0d-fa9f419951ad) successfully added.

$ nmcli connection show
NAME                UUID                                  TYPE            DEVICE
eno1   bcd81468-59c2-401e-bfb8-33b23c2b7d57  802-3-ethernet  eno1
bond0  d1619bdf-38b7-4f20-8a0d-fa9f419951ad  bond            --

enp14s0をスレーブに追加する

$ sudo nmcli connection add type bond-slave ifname enp14s0 master bond0
Connection 'bond-slave-enp14s0' (3405d7d6-6e5a-4f8f-82c9-f4c386feae85) successfully added.

$ nmcli connection show
NAME                UUID                                  TYPE            DEVICE
eno1                bcd81468-59c2-401e-bfb8-33b23c2b7d57  802-3-ethernet  eno1
bond-slave-enp14s0  3405d7d6-6e5a-4f8f-82c9-f4c386feae85  802-3-ethernet  --
bond0               d1619bdf-38b7-4f20-8a0d-fa9f419951ad  bond            --

bond0の設定

$ sudo nmcli connection modify bond0 ipv4.addresses 192.168.1.12/24
$ sudo nmcli connection modify bond0 ipv4.method manual
$ sudo nmcli connection modify bond0 ipv4.gateway 192.168.1.1
$ sudo nmcli connection modify bond0 ipv4.dns 192.168.1.1

enp14s0だけをつないだbond0を起動する

$ sudo nmcli connection modify bond-slave-enp14s0 connection.autoconnect yes
$ sudo nmcli connection modify bond0 connection.autoconnect yes
$ sudo nmcli connection up bond0

これで,bond0を使ってSSH等で接続できるようになったのでeno1も追加する

$ sudo nmcli connection delete eno1
$ sudo nmcli connection add type bond-slave ifname eno1 master bond0
$ sudo nmcli connection modify bond-slave-eno1 connection.autoconnect yes

$ sudo nmcli connection down bond0 && sudo nmcli connection up bond0

接続状態を確認する

$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eno1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eno1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 38:d5:47:c7:c0:ad
Slave queue ID: 0

Slave Interface: enp14s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 38:d5:47:c7:c0:ae
Slave queue ID: 0

Wake on Lan

Wake on Lanは実デバイス(eno1enp14s0)で有効になっている必要がある
以下のように1 (default)となっていれば何も設定する必要はない

$ nmcli -f "802-3-ethernet.wake-on-lan" con show bond-slave-eno1
802-3-ethernet.wake-on-lan:             1 (default)

MACアドレスを調べる

$ nmcli -f "GENERAL.HWADDR" device show eno1
GENERAL.HWADDR:                         38:D5:47:C7:C0:AD

enp14s0で調べても同じMACアドレスが表示された. 本当は38:d5:47:c7:c0:aeのはずなので,bodingしていることと関係がある?

$ nmcli -f "GENERAL.HWADDR" device show enp14s0
GENERAL.HWADDR:                         38:D5:47:C7:C0:AD

とりあえずeno1Wake on Lanができれば良いことにしておく

これで,クライアントから以下のコマンドを実行すれば起動できる

$ sudo ether-wake -i eno1 38:D5:47:C7:C0:AD

もし起動できない場合はUEFIWake by PCIeみたいな項目をEnableにする