ラズパイ３ 導入メモ２

# ユーザー設定

## 新規ユーザーの追加

```shell-session:ラズパイ
$ sudo adduser feelinguy
ユーザ `feelinguy' を追加しています...
新しいグループ `feelinguy' (1001) を追加しています...
新しいユーザ `feelinguy' (1001) をグループ `feelinguy' として追加しています...
ホームディレクトリ `/home/feelinguy' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
feelinguy のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
	フルネーム []: 
	部屋番号 []: 
	職場電話番号 []: 
	自宅電話番号 []: 
	その他 []: 
以上で正しいですか? [Y/n] 

$ id feelinguy
uid=1001(feelinguy) gid=1001(feelinguy) groups=1001(feelinguy)

$ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),999(spi),998(i2c),997(gpio)

$ id pi | tr ',' '\n'
uid=1000(pi) gid=1000(pi) groups=1000(pi)
4(adm)
20(dialout)
24(cdrom)
27(sudo)
29(audio)
44(video)
46(plugdev)
60(games)
100(users)
101(input)
108(netdev)
999(spi)
998(i2c)
997(gpio)
```

新規に追加したユーザーを `pi` と同じグループに所属させる。
`usermod -aG GroupName[, ...] UserName`
これで既存 GroupName のリストへ追加してね、となるらしい。

```shell-session:ラズパイ
$ (gnames=$(
> id pi |
> tr ',' '\n' |        # カンマを改行に置換
> sed 1d |             # 一行目を削除
> sed 's/^[0-9]*(//' | # 先頭の数値と'('を削除
> sed 's/)$//' |       # 最後の')'を削除
> tr '\n' ',' |        # カンマ区切りで一行にまとめる
> sed 's/,$//'         # 最後の','を削除
> )
> sudo usermod -aG $gnames feelinguy)

$ exit
ログアウト
Connection to xxx.local closed.
```

GroupName のリストを手打ちするのが危ういなーと思ったけど、
上記コマンドラインもどーだかねー。手打ちでいいね。

## `pi` ユーザーの削除

新規ユーザーで再ログイン。

```shell-session:ラズパイ
$ sudo userdel -r pi

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

[sudo] feelinguy のパスワード:
userdel: pi のメールスプール (/var/mail/pi) がありません
```

日本語で警告されるとドキッとする。

# ファイアーウォール

Firewalld と思ったが、今のところ外部に公開するものは無いので、
ブロードバンドルーターに任せよう。

# NTP

```shell-session:ラズパイ
$ timedatectl status
      Local time: 日 2019-04-21 01:37:16 JST
  Universal time: 土 2019-04-20 16:37:16 UTC
        RTC time: n/a
       Time zone: Asia/Tokyo (JST, +0900)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no
```

`Network time on: yes` なら有効になっているらしい。
有効化するには `timedatectl set-ntp true` で。
設定は `/etc/systemd/timesyncd.conf` へ。

```shell-session:ラズパイ
$ sudo nano /etc/systemd/timesyncd.conf
```
```config:/etc/systemd/timesyncd.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
NTP=ntp.jst.mfeed.ad.jp
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
```

設定を反映させる。

```shell-session:ラズパイ
$ sudo systemctl restart systemd-timesyncd
Warning: systemd-timesyncd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
$ sudo systemctl daemon-reload
```

# デバイス
## SDカード

延命措置。

### スワップ無効化

```shell-session:ラズパイ
$ free -h
     total used free shared buff/cache available
Mem:  927M  29M 829M    11M        68M      838M
Swap:  99M   0B  99M

$ sudo swapoff --all
$ sudo apt purge -y --auto-remove dphys-swapfile
$ sudo rm -fr /var/swap

$ free -h
     total used free shared buff/cache available
Mem:  927M  31M 747M    11M       148M      834M
Swap:   0B   0B   0B
```

一時ファイル、ログとかは後回しでいいかな。

## USBメモリ

USB3.0 64GB があるけど、ノートPC との相性が悪いんだよね。
USB2.0 なラズパイで使おう。

まず、デバイスの状態を調べて、
存在するのであればパーティションを削除する。

```shell-session:ラズパイ
$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 57.7G  0 disk 
└─sda1        8:1    1 57.7G  0 part 
mmcblk0     179:0    0 29.7G  0 disk 
├─mmcblk0p1 179:1    0 42.9M  0 part /boot
└─mmcblk0p2 179:2    0 29.7G  0 part /

$ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) rm 1                                                             
(parted) print                                                            
Model: ELECOM MF-CAU31 (scsi)
Disk /dev/sda: 61.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags

(parted) 
```

次に、MBR または GPT かを選択し、パーティションを作る。

```shell-session:ラズパイ
(parted) mklabel
New disk label type? gpt
Warning: The existing disk label on /dev/sda will be 
destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? y
(parted) mkpart
Partition name?  []? data
File system type?  [ext2]? ext4
Start? 0%
End? 100%
(parted) print
Model: ELECOM MF-CAU31 (scsi)
Disk /dev/sda: 61.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  61.9GB  61.9GB  ext4         data

(parted) q
Information: You may need to update /etc/fstab.
```

そして、フォーマット。

```shell-session:ラズパイ
$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.43.4 (31-Jan-2017)
/dev/sda1 contains a ext4 file system
	created on Sat Apr 20 22:20:02 2019
Proceed anyway? (y,N) y
Creating filesystem with 15119872 4k blocks and 3784704 inodes
Filesystem UUID: 7a8e352b-*****
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424

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

$ blkid /dev/sda1 | tr ' ' '\n'
/dev/sda1:
UUID="7a8e352b-*****"
TYPE="ext4"
PARTLABEL="data"
PARTUUID="d617acd6-*****"
```

`UUID` を `/etc/fstab` に追記する。

### 自動マウント

```shell-session:ラズパイ
$ sudo mkdir -p /media/feelinguy/data
$ sudo nano /etc/fstab
```

```config:/etc/fstab
proc               /proc           proc    defaults          0       0
PARTUUID=xxxxx-01  /boot           vfat    defaults          0       2
PARTUUID=xxxxx-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
UUID="7a8e352b-*****"	/media/feelinguy/data	ext4	defaults	0	2
```

最後の２つの数字は、

- `dump` のバックアップ対象 - `0`:false, `1`:true
- `fsck` のチェック対象 - `0`:false, `1`:root, `2`:true

だそうだ。

```shell-session:ラズパイ
$ sudo reboot
...
$ lsblk /dev/sda1
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda1   8:1    1 57.7G  0 part /media/feelinguy/data

$ sudo chown feelinguy:feelinguy /media/feelinguy/data
$ sudo chmod o-x /media/feelinguy/data
$ ls -l /media/feelinguy
合計 4
drwxr-xr-- 2 feelinguy feelinguy 4096  4月 21 00:18 data
```

再起動前に `chown` `chmod` したら、再起動後には元に戻されていた。
上記の様に順番を逆にしたら永続化された。よくわからん。

# 簡易操作

`ssh -t` で疑似端末を割り当てることができるそうな。

```shell-session:Ubuntu
$ ssh -t feelinguy@xxx.local 'sudo apt update'
feelinguy@xxx.local's password:
[sudo] feelinguy のパスワード:
...
パッケージはすべて最新です。
Connection to xxx.local closed.
$
```

鍵認証してないと、ありがたみが薄い。

# セキュア・コピー

```shell-session:Ubuntu
$ touch 空ファイル
$ ls
空ファイル
$ scp 空ファイル feelinguy@xxx.local:~/空ファイル
feelinguy@xxx.local's password: 
空ファイル           100%    0     0.0KB/s   00:00
$
```

ここまでで、最低限のことはできそうかな。