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

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

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 apt -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にする

Ryzen5 1600にArch Linuxをインストールする

構成

項目 型番
CPU AMD Ryzen5 1600
M/B MSI TOMAHAWK B350
RAM SanMax SMD4-U8GM-24R-D
サウンド Onkyo SE200PCI

Install

インストールガイド - ArchWikiに全部書いてあるので,コマンドのみ

$ ls /sys/firmware/efi/efivars
$ loadkeys jp106

...
$ parted /dev/sda
(parted)$ mklabel gpt
(parted)$ mkpart ESP fat32 1MiB 513MiB
(parted)$ set 1 boot on
(parted)$ mkpart primary xfs 513MiB 100%
(parted)$ print
Number Start  End   Size  File system Name Flags
 1     1049kB 538MB 537MB fat32            boot, esp
 2     538MB  120GB 119GB xfs
(parted)$ quit

$ mkfs.fat -F32 /dev/sda1
$ mkfs.xfs /dev/sda2

$ mount /dev/sda2 /mnt
$ mkdir /mnt/boot
$ mount /dev/sda1 /mnt/boot

$ ping archlinuxjp.org
...ok

$ timedatectl set-ntp true

$ vim /etc/pacman.d/mirrorlist
## Japan
http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
$ pacstrap /mnt base base-devel

$ genfstab -U /mnt >> /mnt/etc/fstab
$ arch-chroot /mnt
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ hwclock --systohc --utc

$ pacman -S vim

$ vim /etc/locale.gen
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
$ locale-gen
Generating locales...
  en_US.UTF-8... done
    ja_JP.UTF-8... done
Generation complete.
$ echo LANG=en_US.UTF-8 > /etc/locale.conf
$ echo KEYMAP=jp106 > /etc/vconsole.conf
$ echo ホスト名 > /etc/hostname
$ vim /etc/hosts
127.0.1.1   ホスト名.localdomain    ホスト名

$ mkinitcpio -p linux
$ passwd

$ ls /sys/firmware/efi/efivars
...
$ bootctl --path=/boot Install
$ vim /boot/loader/loader.conf
default arch
timeout 3
editor 0

$ blkid -s PARTUUID -o value /dev/sda2
UUID文字列
$ vim /boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options root=PARTUUID=UUID文字列 rw

$ exit
$ umount -R /mnt
$ reboot

初期設定

ユーザ追加・sudo有効化

$ useradd ユーザ名
$ gpasswd -a ユーザ名 wheel
$ passwd ユーザ名

$ pacman -S sudo
$ EDITOR=vim visudo
%wheel ALL=(ALL) ALL    # コメント解除する

これ以降はユーザ権限で設定を行う

DHCP有効化

デフォルトで起動しているものと思っていたが,起動していなかったので

$ sudo systemctl start dhcpcd

yaourt

$ sudo vim /etc/pacman.conf
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

$ sudo pacman --sync --refresh yaourt

Xorg

あたりを参考に

$ pacman -S xorg-server xorg-server-utils xorg-xinit xorg-xclock xterm

$ lspci | grep -e VGA -e 3D
25:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde PRO [Radeon HD 7750/8740 / R7 250E]
$ sudo pacman -S xf86-video-amdgpu

グラフィックドライバをロードするために,再起動する

$ reboot

Xfce

Xfce - ArchWiki

$ sudo pacman -S xfce4 xfce4-goodies gamin

$ vim ~/.xinitrc
#!/bin/bash
exec startxfce4

キーボードレイアウトの設定

Xorg でのキーボード設定 - ArchWiki

$ sudo vim /etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
    Identifier "system-keyboard"
    MatchIsKeyboard "on"
    Option "XkbLayout" "jp,us"
    Option "XkbModel" "pc106"
    Option "XkbVariant" ",dvorak"
    Option "XkbOptions" "grp:alt_shift_toggle"
EndSection

$ sudo reboot

日本語入力

xprofile - ArchWiki

$ sudo pacman -S fcitx-mozc fcitx-im fcitx-configtool

$ vim ~/.xprofile
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=”@im=fcitx”

$ vim ~/.xinitrc
[ -f /etc/xprofile ] && . /etc/xprofile
[ -f ~/.xprofile ] && . ~/.xprofile
fcitx-autostart &

$ sudo reboot

ALSAの設定

alsa-utilsのインストール

$ sudo pacman -S alsa-utils

バイスの確認

サウンドボード(ice1724)から音を鳴らしたい

$ alsamixer
カード: ONKYO SE200PCI                      F1:  ヘルプ
チップ: ICE1724 - multitrack                F2:  システム情報
  表示: F3:[再生] F4: 録音  F5: 全て        F6:  サウンドカード選択
  項目: Front [dBゲイン: -18.00, -18.00]    Esc: 終了

ロードされているモジュールを確認する

$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_hda_intel
2 snd_ice1724

おそらく

  1. オンボード
  2. HDMI
  3. サウンドボード

snd_ice1724をデフォルト(0)のデバイスに設定する

UEFIオンボードを無効化(Disable)し、以下のファイルで読み込み順を指定する

$ sudo vim /etc/modprobe.d/alsa-base.conf
options snd slots=snd_ice1724,snd_hda_intel
options snd_ice1724 index=0
options snd_hda_intel index=1

再起動後,

$ cat /proc/asound/modules
0 snd_ice1724
1 snd_hda_intel

となり,無事に再生できた.

一応,失敗した設定例も下に乗せておく.

失敗1:snd_ice1724をデフォルト(0)に固定する

オンボードを有効にした状態

$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_hda_intel
2 snd_ice1724

では,snd_hda_intelが2つ存在し,

$ sudo vim /etc/modprobe.d/alsa-base.conf
options snd slots=snd_ice1724,snd_hda_intel
options snd_ice1724 index=0
options snd_hda_intel index=1

$ sudo vim /etc/modprobe.d/alsa-base.conf
options snd slots=snd_ice1724,snd_hda_intel,snd_hda_intel
options snd_ice1724 index=0
options snd_hda_intel index=1
options snd_hda_intel index=2

等を設定してもsnd_ice1724がデフォルトにならなかった

失敗2:環境変数を使ってデフォルトPCMを選択する

Select the default PCM via environment variable - ArchWikiの通りに設定するとice1724から音が出るようになったが複数同時再生(Firefox+SMPlayer)ができなかった

$ sudo vim /etc/asound.conf
pcm.!default {
    type plug
    slave.pcm {
        @func getenv
        vars [ ALSAPCM ]
        default "hw:2,0"
    }
}

ここで,hw:2,0

$ aplay -l
カード 2: SE200PCI [ONKYO SE200PCI], デバイス 0: ICE1724 [ICE1724]
  サブデバイス: 0/1
  サブデバイス #0: subdevice #0

でしらべた

失敗3:~/.asoundrcでデバイスを指定する

Alternative method - ArchWiki の通りに設定した場合も同時再生ができなかった

この設定では,はじめに音声再生を始めたソフトがハードウェアがデバイスを専有してしまうため同時再生できないらしい.

$ vim ~/.asoundrc
pcm.!default {
    type hw
    card 2
}

ctl.!default {
    type hw
    card 2
}

renameコマンドでファイルをリネームする

Ubunturenameコマンドが正規表現を使ってファイルをリネームするとは違っていたのでメモ

vild.hatenablog.com

使い方

$ rename <expression> <replacement> <file>...

なので

拡張子変更

$ ls
aaa.sh  abc.sh  sh_script.txt

$ rename .sh .txt *.sh
$ ls
aaa.txt  abc.txt  sh_script.txt

最初の1つしか置換されないので注意が必要

$ ls
aaa.sh.sh

$ rename .sh .txt aaa.sh.sh

$ ls
aaa.txt.sh

文字列の削除

空の文字列('')で置換する

$ ls
aaa_bak.sh

$ rename _bak '' aaa_bak.sh

$ ls
aaa.sh

prefixの追加

正規表現が使えないのでファイル名にprefixを追加したい場合はlsを用いて

$ ls
aaa.sh  aaa_sh.txt
$ ls /path/to/dir/*
/path/to/dir/aaa.sh  /path/to/dir/aaa_sh.txt

$ rename /path/to/dir/ /path/to/dir/prefix_ $(ls /path/to/dir/*)

$ ls /path/to/dir/
/path/to/dir/prefix_aaa.sh  /path/to/dir/prefix_aaa_sh.txt

するしかない??

Ubuntu16.04にTheanoをインストールする

Ubuntu16.04でのDeepLearning用環境構築
で構築した環境にTheanoをPython3用に追加する

インストール

$ python3 --version
Python 3.5.2

$ sudo apt-get -y install \
    python3-dev \
    libopenblas-dev

$ pip3 install --user --upgrade pip
$ pip3 install --user numpy scipy nose sphinx pydot-ng
$ pip3 install --user theano

確認

ubuntu14.04 theanoとかgpgpu環境構築メモ - 備忘録とか日常とか
check.pyをpython3用に書き換えて実行する

変更点

  • print => print()
  • xrange => range
$ THEANO_FLAGS=floatX=float32,device=gpu python3 ~/check.py
...
Used the gpu

続 GPGPU用マシンにCUDAをインストール - まんぼう日記
も実行してみる

$ THEANO_FLAGS=floatX=float32,device=gpu python3 ~/.local/lib/python3.5/site-packages/theano/misc/check_blas.py
...
We executed 10 calls to gemm with a and b matrices of shapes (5000, 5000) and (5000, 5000).
Total execution time: 0.39s on GPU.

まとめ

動いた!!


References