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

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

Debian Stretchインストール後の設定メモ

リポジトリの設定

リポジトリのリストからcdromを削除する。
sudoが使えないのでsuしてから作業する。

$ su

# sed -i -e 's/^deb cdrom/# deb cdrom/' /etc/apt/sources.list

一応アップデートしておく

# apt update
# apt -y upgrade

sudoの有効化

sudoのコマンドのインストール

$ su
# apt -y install sudo 

ユーザをsudoグループに追加し、sudoできるようにする。

# gpasswd -a ユーザ名 sudo

ログインし直すとsudoできるようになる。

IPの固定

staticに変更し、IPアドレス等を追加。

$ sudo vim /etc/network/interfaces
#iface eth0 inet dhcp
iface eth0 inet static
address         192.168.1.5
network         192.168.1.0
netmask         255.255.255.0
broadcast       192.168.1.255
gateway         192.168.1.1
dns-nameservers 192.168.1.1

$ sudo ifdown eth0 && sudo ifup eth0

Ubuntu18.04でソフトウェアRAIDを組む

Ubuntu18.04でmdadmソフトウェアRAIDを組んでデータストレージとして使う

構成

ディスクの確認

/dev/sdc~/dev/sdfまでのHDD4本でRAID10を作る。

$ sudo parted -l | grep /dev/sd
Disk /dev/sda: 2000GB
Disk /dev/sdb: 240GB
Disk /dev/sdc: 1000GB
Disk /dev/sdd: 1000GB
Disk /dev/sde: 1000GB
Disk /dev/sdf: 1000GB

ファイルシステムの作成

まずHDD4本に対してpartedでパーティションを作成する。
(参考: LinuxでHDDのパーティションテーブル作成とフォーマット方法
また、RAIDのフラグをオンにする。

$ sudo parted /dev/sdc
(parted) mklabel gpt Y
(parted) mkpart ext4 0% 100%
(parted) set 1 raid on

次に、ファイルシステムを作成する

$ sudo mkfs -t ext4 /dev/sdc1

これを/dev/sdc~/dev/sdfの4本に対して実行。

RAIDアレイの構築

下記コマンドで、RAID10を4本のHDDで構築できる。
ファイルシステムを作成していないとそのHDDが出力に出力されない

$ sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[cdef]1
mdadm: /dev/sdc1 appears to contain an ext2fs file system
       size=976760832K  mtime=Thu Jan  1 00:00:00 1970
mdadm: /dev/sdd1 appears to contain an ext2fs file system
       size=976760832K  mtime=Tue Feb 26 06:19:05 2019
mdadm: /dev/sde1 appears to contain an ext2fs file system
       size=976760832K  mtime=Thu Jan  1 00:00:00 1970
mdadm: /dev/sdf1 appears to contain an ext2fs file system
       size=976760832K  mtime=Thu Jan  1 00:00:00 1970
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

構築経過は下のコマンドで確認できる。3時間ちょっとかかりそう。

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid10 sdf1[3] sde1[2] sdd1[1] sdc1[0]
      1953257472 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [>....................]  resync =  0.3% (5872256/1953257472) finish=197.5min speed=164280K/sec
      bitmap: 15/15 pages [60KB], 65536KB chunk

unused devices: <none>

mdadmを設定する

$ sudo bash -c  'mdadm -Es | grep md/0 >> /etc/mdadm/mdadm.conf'

RAIDアレイの初期化

RAIDアレイを確認する

$ sudo parted -l
Error: /dev/md0: unrecognised disk label
Model: Linux Software RAID Array (md)
Disk /dev/md0: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags:

パーティションを作成(不要?)

$ sudo parted /dev/md0
(parted) mklabel gpt
(parted) mkpart ext4 0% 100%
(parted) quit

フォーマット

$ sudo mkfs -t ext4 /dev/md0
mke2fs 1.44.1 (24-Mar-2018)
Found a gpt partition table in /dev/md0
Proceed anyway? (y,N) y
Creating filesystem with 488314368 4k blocks and 122085376 inodes
Filesystem UUID: ac9462a0-e789-475e-86a6-55e4abb4ffc6
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

マウント(テスト)

$ sudo mount /dev/md0 /mnt

自動マウント

UUIDを確認

$ sudo blkid | grep /dev/md0
/dev/md0: UUID="ac9462a0-e789-475e-86a6-55e4abb4ffc6" TYPE="ext4"

/etc/fstabを編集

$ sudo vim /etc/fstab
UUID=ac9462a0-e789-475e-86a6-55e4abb4ffc6   /mnt    ext4    defaults,noatime    0 0

LinuxでUUIDでHDDをマウントする

UbuntuCentOS上でのUUID確認と/etc/fstabでの自動マウント方法

UUIDの確認

CentOS7でもUbuntu18.04でも、blkidの出力をgrepすればUUIDを確認できる。

$ sudo blkid | grep /dev/sdd1

CentOSの場合はUUID="..."の部分が必要

$ sudo blkid | grep /dev/sda1
/dev/sda1: UUID="eda3624c-15a5-4871-931e-5fbcaedcdfac" TYPE="ext4"

Ubuntuの場合はPARTUUID="..."の部分が必要

$ sudo blkid | grep /dev/sdd1
/dev/sdd1: PARTLABEL="ext4" PARTUUID="dd120623-d167-43d5-a372-ba77b4b4f15c"

コマンドでマウントする

UUID="..."PARTUUID="..."の部分をそのまま使用して

$ sudo mount -t ext4 UUID="..." /mnt

とか

$ sudo mount -t ext4 PARTUUID="..." /mnt

でマウントできる

自動マウント

自動マウントする場合は/etc/fstabにUUID="..."PARTUUID="..."の部分をそのまま使って書く。

$ sudo vim /etc/fstab
UUID="..."     /mnt/hdd    ext4    defaults    0 0
PARTUUID="..." /mnt/hdd    ext4    defaults    0 0

Raspberry Piとウェブカメラでmotionを使う

motionをインストール

$ sudo apt-get -y install motion

motionの設定

stream_localhost on
webcontrol_localhost on

stream_localhost off
webcontrol_localhost off

に変更する。

動作確認

USBカメラの確認

$ lsusb 
Bus 001 Device 005: ID 046d:082c Logitech, Inc. 

起動する

$ sudo motion -n
[0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
[0:motion] [NTC] [ALL] motion_startup: Motion 4.0 Started
[0:motion] [NTC] [ALL] create_path: creating directory /var/log/motion
[0:motion] [NTC] [ALL] motion_startup: Logging to file (/var/log/motion/motion.log)

Ctrl+Cで止めて、 /var/lib/motionに画像が保存るはずなのでsftp等で確認する。

Raspbian StretchをインストールしてSSHログインするまで

Raspbianをダウンロード

Download Raspbian for Raspberry Piから
Raspbian Stretch Lite (2018-11-13-raspbian-stretch-lite.img)をダウンロードする

Raspbianの書き込み

ddで書き込む

$ sudo fdisk -l
...
ディスク /dev/sdc: 14.5 GiB, 15548284928 バイト, 30367744 セクタ
ディスク型式: Flash Reader    
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x00000000

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdc1  *        2048 30367743 30365696  14.5G  c W95 FAT32 (LBA)


$ sudo dd bs=64MB if=2018-11-13-raspbian-stretch-lite.img of=/dev/sdc
29+1 レコード入力
29+1 レコード出力
1866465280 bytes (1.9 GB, 1.7 GiB) copied, 411.178 s, 4.5 MB/s

sshd有効化

デフォルトでsshdが自動機能しないためSSHログインはできない。

How to enable SSH on Raspbian without a screen - howchoo
の通り下記コマンドを試したがssh: connect to host 192.168.1.17 port 22: Connection refusedで接続できなかった。

$ sudo fdisk -l
デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdc1           8192    98045    89854  43.9M  c W95 FAT32 (LBA)
/dev/sdc2          98304 30367743 30269440  14.4G 83 Linux

$ sudo mount /dev/sdc2 /mnt/pi
$ cd /mnt/pi/boot
$ sudo touch ssh

諦めてキーボード、ディスプレイを接続して下記コマンドで有効化する。

$ sudo systemctl start sshd
$ sudo systemctl enable sshd

SSHでログイン

ルータのDHCP割り当て状態からRaspberry PiMACアドレスB8:27:EB:??:??:??)に割り当てられているIPを調べる

Yamaha NVR510の場合はshow status dhcpでホスト名まで表示された

  Leased address: 192.168.1.17
(type) Client ID: (01) b8 27 eb 60 59 21
       Host Name: raspberrypi
 Remaining lease: 2days 23hours 59min. 31secs.

下記ユーザ名・パスワードでSSHログインする
- ユーザー名: pi - パスワード: raspberry


その他の設定

IP固定

インターフェース名の確認

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.17/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::11cb:3d7e:78f0:2ead/64 scope link 
       valid_lft forever preferred_lft forever

/etc/dhcpcd.confの編集

interface eth0
static ip_address=192.168.1.27/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

再起動

$ sudo reboot

Ubuntu16.04でnvidia-dockerを動かす

構成

初期設定

ネットワーク

$ sudo apt-get -y install resolvconf

$ sudo nmcli con mod eno1 ipv4.method manual
$ sudo nmcli con mod eno1 ipv4.address 192.168.1.23/24
$ sudo nmcli con mod eno1 ipv4.dns 192.168.1.1
$ sudo nmcli con mod eno1 ipv4.gateway 192.168.1.1

$ sudo nmcli con down eno1 && sudo nmcli con up eno1

アップデート

$ sudo apt-get update
$ sudo apt-get -y upgrade
$ sudo apt-get -y dist-upgrade

OpenSSHのインストール

$ sudo apt-get -y install openssh-server

$ sudo systemctl start sshd
$ sudo systemctl enable sshd

CUDA

確認

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

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

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

リポジトリ(Proprietary GPU Drivers : “Graphics Drivers” team)
を登録して,ドライバをインストールする
途中で,secure bootを無効にするかを聞かれたが,無効にせずに続行した

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

$ sudo apt-get -y install nvidia-387

再起動し,GPUが認識されているかを確認

$ sudo reboot

$ nvidia-smi
Sat Dec  9 10:19:09 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 387.34                 Driver Version: 387.34                    |
|-------------------------------+----------------------+----------------------+
| 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 106...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   37C    P8     6W / 156W |     91MiB /  6071MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

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

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

nvidia-dockerのインストール

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

$ sudo apt-get -y install curl

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/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

テスト(nvidia-docker run --rm nvidia/cuda nvidia-smiでもいける)

$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
Unable to find image 'nvidia/cuda:latest' locally
latest: Pulling from nvidia/cuda
660c48dd555d: Pull complete
4c7380416e78: Pull complete
421e436b5f80: Pull complete
e4ce6c3651b3: Pull complete
be588e74bd34: Pull complete
f597507b3c37: Pull complete
9c5d4127a23d: Pull complete
398bf259fcdc: Pull complete
4f4092762618: Pull complete
94130a21e154: Pull complete
Digest: sha256:954c82d2d060f38de13b3d7933b7e1549b25330cc6412008dc1253f3c148448d
Status: Downloaded newer image for nvidia/cuda:latest
Sat Dec  9 01:59:36 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 387.34                 Driver Version: 387.34                    |
|-------------------------------+----------------------+----------------------+
| 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 106...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   37C    P8     6W / 156W |     91MiB /  6071MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

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

Debian StretchでNFSサーバを動かす

インストール

$ sudo apt -y install nfs-kernel-server

共有ディレクトリの設定

NFSv4で共有するように/etc/exportsを編集する。
/srv/nfs4NFSのルートにし、shareを公開する。

$ sudo vim /etc/exports
/srv/nfs4         192.168.1.0/24(rw,async,fsid=0,crossmnt,no_root_squash)
/srv/nfs4/share   192.168.1.0/24(rw,async,no_root_squash)

共有ディレクトリのバインドマウント

ディレクトリ作成

$ sudo mkdir -p /srv/nfs4/share

/etc/fstabの編集、マウント

$ sudo vim /etc/fstab
/mnt/hdd    /srv/nfs4/share    none    bind    0 0

$ sudo mount -a

サービス起動

$ sudo systemctl start nfs-server
$ sudo systemctl enable nfs-server

公開状態の確認

$  sudo exportfs
/srv/nfs4       192.168.1.0/24
/srv/nfs4/share
                192.168.17.0/24

クライアント側からは下記コマンドでマウントできる

$ sudo mount.nfs <NFSサーバIP>:/ /mnt

$ ls /mnt
share