LINK


(無償)
logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)
The Document Foundation Wiki

人気の投稿(1ヶ月間)

Ad

Ad

ラベル RASPBIAN の投稿を表示しています。 すべての投稿を表示
ラベル RASPBIAN の投稿を表示しています。 すべての投稿を表示

2020年4月24日金曜日

【Raspberry pi 4 B / Raspbian 】USB 3.0対応のUSB HDDを自動的にマウントするように設定する手順



■概要

USB HDD(USB 3.0対応)を、Raspberry Pi 4 B のUSB3.0ポートに取り付けて、
指定したディレクトリにマウントして運用する手順について記した。
Raspberry pi 4 Bは、Raspbian Buster Lite 2020-02-13 がインストールした。
マウントはRaspbianの起動時に自動的にされるように設定した。


〇Raspberry Pi 4 B は、USB 3.0ポートを2つ備えている。

USB 3.0 SuperSpeedモード(SSモード)に対応したUSB HDDドライブを取り付けることによって、高速にディスクへのアクセスが可能になる。


〇外部電源を接続できるUSBハブ(USB 3.0対応)を利用する。

Raspberry Pi 4 BのUSB 3.0ポートが供給可能な電力は少ない可能性がある。

外部電源を供給せずに、直にRaspberry Pi 4 BのUSB 3.0ポートにUSB HDDを接続しても、
USB HDDは異音を発して正常に作動しなかった。
異なるメーカーのUSB HDD(いずれも2.5インチHDDが入るタイプ)も用いてみたが、同様に正常に動作しなかった。
駆動に必要な電力が不足していると考えられる。これは、Raspberry Pi 3においても同様だった。

そのため、USB HDDは、外部電源の接続が可能なUSB HUBを経由させてRaspberry Pi 4に接続した。すると正常にUSB HDDは駆動した。
もちろん、このUSB HUBも、USB3.0に対応している。


〇接続の全体の様子(下の写真)

右側にRaspberry Pi 4 B
中央の正方形のものがUSB 3.0 ハブと、USB HDDである。
左側で、ACコンセントにつないでいるのはUSBアダプタであり、中央のUSB3.0 ハブの外部電源である。



〇実際に使用したUSB 3.0 ハブ(下の写真)

4つのUSB 3.0ポートが上表面あり、そのうち一つにUSB HDDをつないでいる。

側面に2つ並んで接続されているものの内、
左側の端子がRaspberry Pi 4 のUSB 3.0ポートと接続されている。
右側の端子は、外部電源供給用であり、マイクロUSBケーブルが使用できるので専用DCアダプタが不要でとても便利である。
ここでは、1A出力程度のスマホのUSBアダプタに接続している。




感想(2件)


下記手順の前に、予め、rootユーザーになっておく。
pi@raspberrypi:~ $ sudo su


■先ず、USB3.0 HUB をRaspberry pi 4のUSB3.0 ポート接続

ここで接続したUSB HUBは、USB 3.0に対応している。
そのため、SuperSpeed Gen1 USB Device(USB 3.0 Hub)として認識されていることがわかる。
また、USB3.0デバイスだけでなく、USB 2.0デバイスとしても認識されていることもわかった。

詳細を知りたい場合は、下記ページを参考にしてください。

【Raspberry pi 4 B / Raspbian】USBポートに各種USB機器を接続したときのlsusbツリーやカーネルメッセージ表示【Raspbian Buster Lite 2020-02-13】



■次に、USB 3.0 接続のHDDドライブをHUBに取り付けた。

〇USB HDDのパーティション作成とフォーマット

HDDは、Raspberry Pi専用で使うので、パーティション1をEXT4でフォーマットしておいた。
パーティションの作成とファイルシステム作成については、次のページを参考にしてください。(HDD上のデータは消去されるので注意)


【Raspberry Pi 4 B / Raspbian】BOINCの作業領域を外付けUSB HDDドライブに移してSDの劣化を防止する【BOINC 7.14.2+dfsg-3】

上記ページの、
「■BOINCのワーキングディレクトリを移すためのUSB接続のHDD(もしくはSSD)の準備」の項目に手順を記載しています。
(こちらはアライメントについて記載があり、対処しています。)
「〇ext4ファイルシステムの作成(フォーマット)」まで完了したら、OKです。


あるいは、以下のページも参考にしてください。
(こちらはアライメントについて記述していません。)

【Linux CentOS6.2 64bit版】partedコマンドを使いGPT対応大容量ディスクにパーティションを追加する

上記については、今回使用したHDDは500GB程度なのでGPTの条件は無視した。
すなわち旧来からのパーティションテーブルを使用した。


〇USB HDDドライブを上記のHUBに取り付け、カーネルメッセージを確認した。

接続したUSB HDDは、SuperSpeedモードで認識された。
その上、USB HDDが対応しているため、SCSIディスクとして認識されている。(uasと表示)

そして、そのパーティション1(sda1)が認識された。

root@raspberrypi:/home/pi# dmesg
[  269.554717] usb 2-2.1: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[  269.586133] usb 2-2.1: New USB device found, idVendor=152d, idProduct=0578, bcdDevice= 1.00
[  269.586148] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  269.586161] usb 2-2.1: Product: USB to ATA/ATAPI Bridge
[  269.586173] usb 2-2.1: Manufacturer: JMicron
[  269.586185] usb 2-2.1: SerialNumber: 0123456789ABCDEF
[  269.638320] scsi host0: uas
[  269.639919] scsi 0:0:0:0: Direct-Access     JMicron  Generic          8101 PQ: 0 ANSI: 6
[  269.714236] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  271.939973] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[  271.939989] sd 0:0:0:0: [sda] 4096-byte physical blocks
[  271.944628] sd 0:0:0:0: [sda] Write Protect is off
[  271.944645] sd 0:0:0:0: [sda] Mode Sense: 53 00 00 08
[  271.945087] sd 0:0:0:0: [sda] Disabling FUA
[  271.945103] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  271.945843] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[  271.965122]  sda: sda1
[  271.968024] sd 0:0:0:0: [sda] Attached SCSI disk



■システム起動時に自動的にマウントするための設定を行った。


〇マウント先のディレクトリを作成した。

/mntディレクトリは最初から存在していた。
サブディレクトリとして、disk1というディレクトリを設けた。

root@raspberrypi:/home/pi# mkdir /mnt/disk1


作成したディレクトリを表示させた。

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 8
drwxr-xr-x 2 root root 4096 Apr 22 11:14 .
drwxr-xr-x 3 root root 4096 Apr 22 11:14 ..
上記のように、他ユーザーからのアクセスは許可されている。
これにより、他ユーザーもディレクトリを開くことが許可される。


〇マウントしたUSB HDDのディスク内のパーティションのPARTUUIDを調べた。

マウント設定には、パーティションのPARTUUIDが必要になるので調べておく。

root@raspberrypi:/home/pi# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="4***-****" TYPE="vfat" PARTUUID="7**a****-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="********-****-****-****-************" TYPE="ext4" PARTUUID="7**a****-02"
/dev/sda1: LABEL="hdd" UUID="e*******-****-4***-9***-b***********" TYPE="ext4" PARTUUID="0*0****e-01"
/dev/mmcblk0: PTUUID="7**a****" PTTYPE="dos"


〇fstab設定ファイルの編集を行った。

次のように、fstabファイルを編集した。

下記のように、PARTUUID項目には、上記で見つけた番号を記載しておく。
マウント先のディレクトリは、さきに作成した「/mnt/disk1」を指定した。
マウントしたいディスクのパーティション1は、ext4でフォーマットされているのでそのように指定した。
オプションは、nofailを忘れないようにすること。さもなければ、起動しなくなる危険がある。

root@raspberrypi:/home/pi# nano /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=7**a****-01  /boot           vfat    defaults          0       2
PARTUUID=7**a****-02  /               ext4    defaults,noatime  0       1
PARTUUID=0*0****e-01  /mnt/disk1      ext4    defaults,auto,rw,nofail   0       2
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

CTRL+O Write Out
File Name to Write: /etc/fstab
CTRL+X Exit


〇システムを再起動した。
root@raspberrypi:/home/pi# reboot



■確認

〇指定したディレクトリにマウントされたか確認した。

/mnt/disk1にマウントされたディスク(USB HDD)の容量は、459GBあることがわかる。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   53M  200M  21% /boot
/dev/sda1       459G   73M  435G   1% /mnt/disk1
tmpfs           391M     0  391M   0% /run/user/1000

〇アクセス権限を確認した。

もし、下記のように、マウント先ディレクトリのアクセス権限が700(rwx------)になっていれば、chmodコマンドで、755(rwxr-xr-x)に変更する。
さもなければ、他ユーザーからマウント先ディレクトリに作られたサブディレクトリにアクセスすることができなくなってしまう。

下記例において、/mnt/disk1にさらにサブディレクトリを設け、サブディレクトリにはpi以外の別ユーザーのアクセス許可を与えたとしても、
トップディレクトリである/mnt、/mnt/diskに、他ユーザーに5(r-x)以上の権限がなければ、サブディレクトリへアクセスができなくなってしまうからである。

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 24
drwx------ 3 pi   pi    4096 Apr 22 05:08 .  ←マウント先であるカレントディレクトリ(/mnt/disk1自身)
drwxr-xr-x 3 root root  4096 Apr 22 11:14 ..
drwx------ 2 root root 16384 Apr 22 05:08 lost+found

root@raspberrypi:/home/pi# chmod 755 /mnt/disk1

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 24
drwxr-xr-x 3 pi   pi    4096 Apr 22 05:08 .
drwxr-xr-x 3 root root  4096 Apr 22 11:14 ..
drwx------ 2 root root 16384 Apr 22 05:08 lost+found


以上



<参考>

・External storage configuration
< https://www.raspberrypi.org/documentation/configuration/external-storage.md > 2020年4月19日

・【Linux CentOS6.2 64bit版】partedコマンドを使いGPT対応大容量ディスクにパーティションを追加する
< https://akira-arets.blogspot.com/2012/02/centos62-parted-create-partition.html > 2020年4月19日

・ディスクのアクセス速度を上げるには
< https://www.atmarkit.co.jp/flinux/rensai/linuxtips/659noatime.html > 2020年4月19日

・Raspberry Piでfstab弄ったら起動できなくなった場合の備忘録
< https://qiita.com/YuzuRyo61/items/fa5d23a3420d8c24c77d > 2020年4月19日

・What is UUID, PARTUUID and PTUUID?
< https://unix.stackexchange.com/questions/375548/what-is-uuid-partuuid-and-ptuuid > 2020年4月24日



2019年11月15日金曜日

【Raspbian Buster September 2019】ショートカットをメニューに作成しアプリケーションローンチバーに追加する方法について


例えば、次のような組み合わせコマンドのためのショートカットを作成したい。

$ sudo /usr/bin/gnome-disks

ところで、上記の複合コマンドをパスワードなしで実行する方法については、
次のページを参照してください。
https://akira-arets.blogspot.com/2019/11/raspbian-buster2019sep-polkit.html



■メニューにショートカットを作成した。

○ショートカットで呼び出す。

いちいちターミナルを開かなくても良いように、
メニューにショートカットを登録することにした。

メニューの編集は次のコマンドで行った。
$ alacarte

NEW ITEMボタンから、アイテムを登録した。


上記のように、Commandのテキストボックスに、次のコマンドを設定した。
ショートカットの名称は適当に決めるとよい。
/usr/bin/sudo /usr/bin/gnome-disks
OKボタンで登録は完了するが、実際のメニューにアイテムを確認するには、
VNC Serverを利用している場合、VNC Serverの再起動が必要になった。

これで、いちいちパスワードを入力しなくても、
ディスクのフォーマットなどができるようになって便利になった。

しかし、この段階では、まだアイコンが表示されず、デフォルトのアイコンになっている。


○メニューショートカットにアイコンを表示させ、カテゴリを設定した。

まず、なぜ、アイコンが表示されないのか調べた。

メニューに表示されるようになったDisksと、Disks(privileged)の両方について、
メニュー上で右クリックして、「Add to desktop」を選び、ショートカットを作成した。

そして、それぞれの中身を次のように確認した。
URLという項目に注目する。
これがどこかリソースを参照することで情報を得ているのだろうと考えられる。
その結果、アイコンなどが表示されるのだと考えられる。
したがって、この参照先リソースを修正すればよいことになる。


(A) これはオリジナル(Disks)のデスクトップに作成したショートカットである。
mynewuser@raspberrypi:~/Desktop $ cat org.gnome.DiskUtility.desktop
[Desktop Entry]
Type=Link
Name=Disks
Icon=gnome-disks
URL=/usr/share/applications/org.gnome.DiskUtility.desktop

(B) 次に、Disks(privilege)のデスクトップに作成したショートカットである。
mynewuser@raspberrypi:~/Desktop $ cat alacarte-made.desktop
[Desktop Entry]
Type=Link
Name=Disks (privileged)
Icon=gnome-panel-launcher
URL=/home/mynewuser/.local/share/applications/alacarte-made.desktop

各々について、URLの参照先をcatコマンドで表示させた。

(a) まず、オリジナル(Disks)のリソースについて
mynewuser@raspberrypi:~/Desktop $ cat /usr/share/applications/org.gnome.DiskUtility.desktop
(略)
Icon=gnome-disks
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;X-GNOME-Utilities;
DBusActivatable=true
上記、オリジナル(Disks)の、Icon項目と、Categories項目に注目した。


(b) 次に、Disks(privilege)のリソースについて
mynewuser@raspberrypi:~/Desktop $ cat /home/mynewuser/.local/share/applications/alacarte-made.desktop
[Desktop Entry]
Comment=
Terminal=false
Name=Disks (privileged)
Exec=/usr/bin/sudo /usr/bin/gnome-disks
Type=Application
Icon=gnome-panel-launcher
NoDisplay=false
先と違ってIcon項目が異なり、Categories項目が存在していないことがわかった。
そこで、Disks(privilege)について、下記のように修正した。
[Desktop Entry]
Comment=
Terminal=false
Name=Disks (privileged)
Exec=/usr/bin/sudo /usr/bin/gnome-disks
Type=Application
Categories=GNOME;GTK;Utility;X-GNOME-Utilities;
Icon=gnome-disks

NoDisplay=false
そして再起動を行った。

すると、次のように、Disks(privileged)にDisksと同じアイコンが表示されるようになった。



○タスクバーランチャーにも追加した。

その上で、ようやくこれをタスクバーのアプリケーションランチャーに登録した。

1、まず、タスクバーで右クリックしてメニューを表示させ、「ADD / Remove Panel Items」を選択した。
すると、「Panel Preferences」というウインドウが開いた。右の「ADD」ボタンをクリックした。
すると、「Add Plugin to panel」ウインドウが開いた。「Application Launch Bar」を選択してから、下欄にある「ADD」をクリックした。



2、すると、次の写真のように、上右端に「+」アイコンが表示された。
これをクリックすると、「Application lauch Bar」というウインドウが開いた。


左側の欄には、「Disks(privileged)」というアイコン付の項目が表示された。
これを選択したうえ「ADD」ボタンを押すことで、+印と同じ同じ位置にディスクのアイコンが表示された。


3、前の「Panel Preferences」というウインドウの「UP」「DOWN」ボタンで、表示位置を変えることもできた。

追加した項目は、欄の下方(=タスクバー左端位置に対応)に存在している。
名前は、「Application Launch Bar」である。これを選択してから、「UP」ボタンで上方へ移動していく。
それにつれて、実際に、タスクバーの右側へと移動していく。



以上

2019年11月14日木曜日

【Raspbian Buster September 2019】リソースモニター「gnome-system-monitor」の導入

Raspbian Buster with desktop and recommended software(September 2019)には、
標準でCPUや動作プロセスを表示するアプリがインストールされていた。

しかし、以前から使用していたリソースモニターが見易いので別途導入することにした。
リソースモニターである「gnome-system-monitor」をインストールした。



○rootユーザーに切り替えてからインストール操作を行った。

# su
# apt-get install gnome-system-monitor
The following additional packages will be installed:
  libatkmm-1.6-1v5 libcairomm-1.0-1v5 libglibmm-2.4-1v5 libgtkmm-3.0-1v5
  libgtop-2.0-11 libgtop2-common libpangomm-1.4-1v5 libsigc++-2.0-0v5
The following NEW packages will be installed:
  gnome-system-monitor libatkmm-1.6-1v5 libcairomm-1.0-1v5 libglibmm-2.4-1v5
  libgtkmm-3.0-1v5 libgtop-2.0-11 libgtop2-common libpangomm-1.4-1v5
  libsigc++-2.0-0v5
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 2,616 kB of archives.
After this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

○インストール完了後、デスクトップのターミナルからコマンドを実行し起動した。

user@raspberrypi:~ $ gnome-system-monitor


gnome-system-monitorは見易いが、CPU使用率が5%程度上昇した。
このときは、同時に別に5%程度の使用率を占有するプログラムも動作させていた。



<参考>
・3.2. GNOME および KDE システムモニタ
< https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-analyzeperf-gnome > 2019年11月14日

・How to Install and Use GNOME System Monitor and Task Manager in Ubuntu
< https://vitux.com/how-to-install-and-use-task-manager-system-monitor-in-ubuntu/ > 2019年11月14日

2019年11月11日月曜日

【Raspbian Buster September 2019】古いタイプのSAMBAサーバーの共有フォルダをマウントする方法


■念の為、次のパッケージを導入しておいた。
(これらは不要かもしれないので、後に示すmount -t cifs コマンドでマウント可能か先に試してみること。)

# apt-get install samba-common smbclient samba-common-bin smbclient  cifs-utils



■Sambaサーバーに接続して、共有フォルダをマウントした。

Raspbian Buster September 2019 から、mount -t cifs を用いて、
CentOS 6のSAMBAサーバー(Ver. 3.6.23 43.el6_9)に接続するためには、
明示的に、vers=1.0と、sec=ntlmssp のオプションを付加しなければならなかった。

さもなければ、次のエラーが発生してサーバーへの接続に失敗した。
mount error(22): Invalid argument
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
あるいは、次のエラーが発生して失敗した。
mount error(2): No such file or directory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

いずれの場合も、次のように、オプションを指定すると問題なく接続でき、マウントに成功した。
root@raspberrypi:/home/pi# mount -t cifs //my-file-server.example.com/SHARENAME /mnt -o user=USERNAME,pass=PASSWORD,vers=1.0,sec=ntlmssp


Raspbian Buster September 2019 では、カーネルにおいて、SMBはversion 3がデフォルトになったらしい。
そのため、SMB3や、SMB2.1をサポートしていない古いタイプのSAMBAサーバーに接続するには、
上記のようにオプションを指定する必要がある。

エラー発生後に、dmesgコマンドで調べると、次のログが記載され同様の説明が行われていた。
[174413.609298] No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
[174413.653627] CIFS VFS: cifs_mount failed w/return code = -22


<参考>

・Pi 3B+ Samba client mount issues... mount error(22)
< https://www.raspberrypi.org/forums/viewtopic.php?t=209698 > 2019年11月11日

・Access network Samba share from Pi client
< https://raspberrypi.stackexchange.com/questions/40974/access-network-samba-share-from-pi-client > 2019年11月11日

2019年11月8日金曜日

【Raspbian Buster September 2019】(polkit、sudoers)デスクトップ環境でアプリが特権を行使できる方法について

通常ユーザーがroot権限でプログラムを動作させるための方法について

例えば、gnome-disksというGUIアプリケーションを用いれば、
フラッシュメモリーやハードディスク等のディスクに対して、
フォーマット、パーティションの作成など低レベルの操作ができる。

gnome-disksは次のようにパッケージを導入すれば利用ができた。
root@raspberrypi:/home/pi# apt-get install gnome-disk-utility

実際、デフォルトのpiユーザーだと、ログインパスワードの入力で、これらの操作を行うことができた。
次の写真のように、piユーザー、rootユーザーのいずれかを選択し、
ログインパスワードを入力することで、特権の必要な操作ができた。



(注意)
ただし、RealVNC Serverをsysytemdから利用している場合、
バグがあるようで、この認証機構であるpolkitが機能しなかった。
エラーが発生し、「Not authorized to perform operation (udisks-error-quark, 4)」となった。
tiger vnc serverではこのバグが報告されていた。
この問題を回避するには、最後で述べるように、sudoersを用いて特権動作させるとよかった。
ただし、systemdではなく、手動でvncserverコマンドで起動した場合、
polkitは正常に動作した。

ところが、作成した通常ユーザー(mynewuser)がgnome-disksを起動した場合、
上記写真に示す認証ウインドウのドロップダウンリストには、mynewuserの名称が存在しなかった。
piユーザー、rootユーザーのみであった。

では、いかにしてpiユーザーと同様に、認証ウインドウのドロップダウンリストに新規ユーザーの名称を載せられるのだろうか。



■無駄だったこと

以下のことは無駄だったので、真似をしないように。

そこで、mynewuserが属しているグループについて調べた。
mynewuser@raspberrypi:~ $ id mynewuser
uid=1001(mynewuser) gid=1001(mynewuser) groups=1001(mynewuser)
比較のために、デフォルトのpiユーザーについても調べた。
mynewuser@raspberrypi:~ $ 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),105(input),109(netdev),999(spi),998(i2c),997(gpio)
ちなみに、rootだとシンプルである。
mynewuser@raspberrypi:~ $ id root
uid=0(root) gid=0(root) groups=0(root)
一方、フラッシュメモリーのデバイスファイルを調べると、diskグループに読み書きが与えられていた。
mynewuser@raspberrypi:~ $ ls /dev/sda -al
brw-rw---- 1 root disk 8, 0 Nov  4 03:54 /dev/sda
そこで、次のようにしてmynewuserをdiskグループに属させたが、
効果がなかった。上記と同じエラーとなった。
root@raspberrypi:/home/pi# usermod -aG disk mynewuser

そこで、グループから解除した。
root@raspberrypi:/home/pi# gpasswd -d mynewuser disk
Removing user mynewuser from group disk
これで元通りである。



■認証用ウインドウのリストに、新規ユーザーが表示されるように設定

次のように専用のファイルを編集して、システムをリブートすることで可能だった。
新規ユーザーもこのように登録さえすれば、polkitを利用することができた。
認証用ウインドウのユーザー一覧にユーザー名が表示されるようになった。

root@raspberrypi:/home/pi# nano /etc/polkit-1/localauthority.conf.d/60-desktop-policy.conf
[Configuration]
AdminIdentities=unix-user:mynewuser;unix-user:pi;unix-user:0
root@raspberrypi:/home/pi# reboot



■polkit以外の方法として、sudoersを用いる

この方法だと、sysytemdからVNC Serverを起動している場合でも、
問題なく、指定済みのアプリケーションを特権で動作させることができた。


○まず、一番最後の行に、次のように特権で動作させたいコマンドについて記述した。
root@raspberrypi:/home/pi# visudo
(略)
mynewuser   ALL=(root) NOPASSWD: /usr/bin/gnome-disks
mynewuser   ALL=(root) NOPASSWD: /sbin/poweroff
mynewuser   ALL=(root) NOPASSWD: /sbin/reboot
そして、システムを再起動した。
root@raspberrypi:/home/pi# reboot


○動作テストを行った。
再起動後、GUIのターミナルで、次のようにコマンド起動すると、
パスワードの入力なしで特権でアプリケーションを動作できた。

$ sudo /usr/bin/gnome-disks


○ショートカット並びに、ランチャーに追加する。

次のページを参照してください。
https://akira-arets.blogspot.com/2019/11/raspbian-alacarte-launcher.html



<参考>

・Enforcing security of your Raspberry PI user accounts
< https://blog.hardcoding.fr/enforcing-security-raspberry-pi-user-accounts/ > 2019年11月7日

・How to create a new user on Raspbian powered Raspberry Pi
< https://blog.gyt.is/2016/03/01/how-to-create-a-new-user-on-raspbian-powered-raspberry-pi/ > 2019年11月7日

・How to Rename the Default Raspberry Pi User
< http://unixetc.co.uk/2016/01/07/how-to-rename-the-default-raspberry-pi-user/ > 2019年11月7日

・after adding a new user the LXTerminal starts without running bash
< https://www.raspberrypi.org/forums/viewtopic.php?t=203669 > 2019年11月7日

・visudoでsudo権限の設定をする際のメモ(sudoersの'ers'って何の略なんですかね?)
< https://qiita.com/kmikmy/items/6a6a086f6415d9b55b96 > 2019年11月8日


2019年11月4日月曜日

【Raspbian Buster September 2019】VNC Server virtualモードで、新規に作成したユーザーのリモートデスクトップ環境を個々に構築する


下記ページでは、デフォルトのpiユーザーのデスクトップをVNC Server Virtual モードで作成し、ヘッドレスで運用ができるようにした。
https://akira-arets.blogspot.com/2019/10/raspberry-pi-4-vncserver-virtual.html

今回は、その追試として、
作成した任意のユーザーでも同様にVNC Server Virtual モードによるデスクトップの構成を行った。
したがって、ほぼ内容は同じである。

結論としては、piユーザーと、以下で作成する新規ユーザーのデスクトップ環境を、
並列して動作させることができた。
また、それぞれのユーザーのデスクトップ環境は、systemctlコマンドを用いて、
独立して制御(start restart stop)できるようにした。



■新しいユーザーを作成した。

まず、rootユーザーに切り替えた。
(sudo passwd root コマンドで予めパスワードを設定している必要がある。)

pi@raspberrypi:~ $ su
Password:
次に、新規ユーザーを作成した。
root@raspberrypi:/home/pi# adduser mynewuser
Adding user `mynewuser' ...
Adding new group `mynewuser' (1001) ...
Adding new user `mynewuser' (1001) with group `mynewuser' ...
Creating home directory `/home/mynewuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for mynewuser
Enter the new value, or press ENTER for the default
        Full Name []: ←特に設定する必要がなかったので、空欄のままエンターを押下した。(以下同様)
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y


■VNCでこのユーザー専用のデスクトップにアクセスできるようにする。

○VNC Serverのパッケージについて

Raspbian では、既にVNCサーバーのパッケージはインストール済みだった。
もしもなければ、apt-get install realvnc-vnc-server で導入できる。


○VNCセッションでのマウスカーソルの形状を矢印型になるように設定

(この設定がなければ、×印のカーソルになった。)
# nano /etc/vnc/xstartup
(略)
xsetroot -solid grey -cursor_name left_ptr(略)

CTRL+s で上書き保存、CTRL+x で終了する。


○作成したあたらしいユーザーでSSHログインのしなおし

一旦、現在のSSH接続を切断して、
新しく、SSHで新規作成ユーザーでRaspberry pi にログインしなおした。

$ ssh mynewuser@192.168.1.2

(注意)
上記のように、作成した新規ユーザーで新しくSSH接続をしなおすことは重要である。
なぜならもし、su mynewuser などとしてしまえば、以下のプロセスで次のようなエラーとなり、vnc serverの起動に失敗したからだ。

The virtual session failed to start. Session log:
XvncSession start time: 2019-11-03T17:40:33.510Z
pulseaudio not installed
Error: mkDir(/run/user/1000/session-xxxxxxxxxxxxxxxx): Permission denied (13)
[System-13]

○このユーザーのためのVNCパスワードを設定した。(-virtualを指定した。)
mynewuser@raspberrypi:~ $ vncpasswd -virtual
Setting "Password" VNC parameter for Virtual Mode server
Password:
Verify:

○vnc serverを一度だけ起動する。

上記のようにして新しく作成したユーザーでSSHでログイン後、
次のようにコマンドを実行した。
:3 は、ディスプレイ番号である。他のVNCユーザーと重ならないようにすること。

mynewuser@raspberrypi:~ $ /usr/bin/vncserver -Encryption PreferOff -Authentication VncAuth -geometry 1600x900 :3
VNC(R) Server 6.5.0 (r41824) ARMv6 (Aug 16 2019 00:24:44)
Copyright (C) 2002-2019 RealVNC Ltd.
RealVNC and VNC are trademarks of RealVNC Ltd and are protected by trademark
registrations and/or pending trademark applications in the European Union,
United States of America and other jurisdictions.
Protected by UK patent 2481870; US patent 8760366; EU patent 2652951.
See https://www.realvnc.com for information on VNC.
For third party acknowledgements see:
https://www.realvnc.com/docs/6/foss.html
OS: Raspbian GNU/Linux 10, Linux 4.19.75, armv7l
On some distributions (in particular Red Hat), you may get a better experience
by running vncserver-virtual in conjunction with the system Xorg server, rather
than the old version built-in to Xvnc. More desktop environments and
applications will likely be compatible. For more information on this alternative
implementation, please see: https://www.realvnc.com/doclink/kb-546
Running applications in /etc/vnc/xstartup
VNC Server catchphrase: "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
             signature: yy-yy-yy-yy-yy-yy-yy-yy
Log file is /home/mynewuser/.vnc/raspberrypi:3.log
New desktop is raspberrypi:3 (192.168.1.2:3)
(注意)
本当は、おそらく、上記結果中に、
Generating private key... done という情報が表示されるのだろうと思うが、
先に述べているように、su mynewuser などとしてvnc serverの起動をし損ねたときに、
既にそれらの処理が完了したために、ここでは表示されなかったと思う。

○VNCクライアントソフトウェアで接続テスト

ここで、VNCクライアントから接続テストをおこなった。
VNCクライアントの接続先指定において、
上記の最後に記されているアドレスとディスプレイ番号を指定し接続した。
192.168.1.2:3
これで、mynewuser専用のデスクトップにVNCで接続することができた。


○起動したVNCのプロセスをいったん終了

ディスプレイ番号を間違えないように注意すること。

mynewuser@raspberrypi:~ $ /usr/bin/vncserver -kill :3


○システム起動時にVNC Serverが起動するように設定

このユーザー専用のデスクトップがシステム起動時に自動的に準備されるように設定した。

rootユーザーに切り替えた。
pi@raspberrypi:~ $ su
Password:
このユーザー専用のVNC Serverを制御するための設定ファイルを作成した。
root@raspberrypi:/home/mynewuser# nano /usr/lib/systemd/system/vncserver-mynewuser.service
[Unit]
Description=VNC Server for user mynewuser in Virtual Mode daemon
After=network.target

[Service]
User=mynewuser   
Type=forking
#ExecStart=/usr/bin/vncserver -geometry 1600x900 :3
ExecStart=/usr/bin/vncserver -Encryption PreferOff -Authentication VncAuth -geometry 1600x900 :3
ExecStop=/usr/bin/vncserver -kill :3
Restart=on-failure
RestartSec=5
KillMode=process

[Install]
WantedBy=multi-user.target

上記設定ファイルを用いて自動起動されるようにセットした。
root@raspberrypi:/home/mynewuser# systemctl enable vncserver-mynewuser.service
Created symlink /etc/systemd/system/multi-user.target.wants/vncserver-mynewuser.service → /usr/lib/systemd/system/vncserver-mynewuser.service.

手動で、このユーザーのVNC serverを起動した。
(もし、vncserver-mynewuser.service を変更したなら、systemctl daemon-reload を行っておくこと。)
root@raspberrypi:/home/mynewuser# systemctl daemon-reload
root@raspberrypi:/home/mynewuser# systemctl start vncserver-mynewuser.service


ここで、再び、VNCクライアントから接続テストをおこなった。

VNCクライアントの接続先指定において、
上記の最後に記されているアドレスとディスプレイ番号を指定し接続した。
192.168.1.2:3
これで、mynewuser専用のデスクトップにVNCで接続することができた。

下記のように、No session for pid ・・・というエラー表示ウインドウが開いたものの、
特に気になる問題が生じることなく利用することができた。
(最後に注意点を記載した。)



このユーザーのデスクトップ環境は、次のコマンドで、再起動や停止も可能である。
root@raspberrypi:/home/mynewuser# systemctl restart vncserver-mynewuser.service
root@raspberrypi:/home/mynewuser# systemctl stop vncserver-mynewuser.service

(注意)
アプリケーションに特権を与えるpolkitが、
systemd経由でのReal VNC Server(virtualモード)ではうまく動作しなかった。
直接コンソールから、vncserverコマンドを起動する方法では問題なかった。
これを回避するために、sudoersを使った特権を与える方法について次のページに記載した。
https://akira-arets.blogspot.com/2019/11/raspbian-buster2019sep-polkit.html


○rebootコマンドが効くように設定

rebootコマンドを発行したところ、次のエラーが発生した。
mynewuser@raspberrypi:~ $ reboot
User pi is logged in on sshd.
User pi is logged in on tty1.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl reboot -i'.

調べると、piユーザーがログインしていた。
これはおそらく自動ログインによるものだと思う。
自動ログインしないように試したが、うまくいかなかった。(多分、やり方がまずかったのだろう。)
mynewuser@raspberrypi:~ $ who
pi       tty1         2019-11-15 02:24


そこで、rebootコマンドをsudoで起動(パスワードなし)できるように設定した。
poweroffコマンドも同様に設定を行った。
下記、ページに記述してある。


次のようにコマンドを発行することで直ちに再起動できた。
$ sudo reboot

次のようにコマンドを発行することで直ちにシャットダウンできた。
$ sudo poweroff



<参考>

・【Raspbian Buster September 2019】VNC Serverを利用してユーザーごとのリモートデスクトップ環境を構築する
< https://akira-arets.blogspot.com/2019/10/raspberry-pi-4-vncserver-virtual.html > 2019年11月4日

2019年10月30日水曜日

【Raspbian Buster September 2019】VNC Serverを利用してpiユーザーのリモートデスクトップ環境を構築する




■realvnc-vnc-serverというパッケージがインストールされているか確認

○まず、正式なパッケージ名を取得

piユーザーでSSHログインした後、suでrootユーザーになった。

root@raspberrypi:/home/pi# apt-cache search realvnc*
libnet-vnc-perl - Perl module implementing a simple VNC client
realvnc-vnc-server - VNC® Server
realvnc-vnc-viewer - VNC® Viewer

○取得したパッケージ名でインストール操作
すると、既に最新版がインストール済みだとわかった。
root@raspberrypi:/home/pi# apt-get install realvnc-vnc-server
Reading package lists... Done
Building dependency tree     
Reading state information... Done
realvnc-vnc-server is already the newest version (6.5.0.41824).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Raspbian Buster September 2019 with desktop and recommended software には、最初から、realvnc-vnc-serverパッケージがインストールされているとわかった。



■piユーザーでVNCセッションにログインするための設定

ただし、vncserverには三つのモードが存在する。
  -user       Set the password for VNC Server in User Mode.
  -service    Set the password for VNC Server in Service Mode.
  -virtual    Set the password for VNC Server in Virtual Mode.
今回は、VNC ServerをVirtualモードで使いたい。


○まず、piユーザー用に、VNCパスワードを設定した。

piユーザーになった。
root@raspberrypi:/home/pi# su pi

piユーザーのためのVNCパスワードを設定した。(-virtualを指定した。)
pi@raspberrypi:~ $ vncpasswd -virtual
Setting "Password" VNC parameter for Virtual Mode server
Password:
Verify:
Successfully set "Password" VNC parameter in /home/pi/.vnc/config.d/Xvnc
Successfully set "Password" VNC parameter in
/home/pi/.vnc/config.d/vncserver-x11-virtual

○VNCセッションでのマウスカーソルの形状を矢印に設定した。

sudoか、rootユーザーで編集を行うこと。

この設定がなければ、×印のカーソルになった。

CTRL + w で、下記コマンドで設定ファイルを開き、xsetroot を検索して編集箇所を見つけること。

# nano /etc/vnc/xstartup
(略)
xsetroot -solid grey -cursor_name left_ptr(略)

CTRL+s で上書き保存、CTRL+x で終了する。


○一度だけ、VNC Serverをpiユーザーで起動した。

piユーザーになった。
root@raspberrypi:/home/pi# su pi

そして、オプションを指定して、VNC Serverを起動した。
(重要)
ここで一度起動しておかないと、必要な設定が自動的にされないようである。また、後の手順に示すように、セッションを終了させることを忘れないように!
オプション最後の、:2はディスプレイ番号である。VNCセッション毎に異なる番号をつける必要がある。
pi@raspberrypi:~ $ /usr/bin/vncserver -Encryption PreferOff -Authentication VncAuth -geometry 1600x900 :2
VNC(R) Server 6.5.0 (r41824) ARMv6 (Aug 16 2019 00:24:44)
Copyright (C) 2002-2019 RealVNC Ltd.
RealVNC and VNC are trademarks of RealVNC Ltd and are protected by trademark
registrations and/or pending trademark applications in the European Union,
United States of America and other jurisdictions.
Protected by UK patent 2481870; US patent 8760366; EU patent 2652951.
See https://www.realvnc.com for information on VNC.
For third party acknowledgements see:
https://www.realvnc.com/docs/6/foss.html
OS: Raspbian GNU/Linux 10, Linux 4.19.75, armv7l
Generating private key... done
On some distributions (in particular Red Hat), you may get a better experience
by running vncserver-virtual in conjunction with the system Xorg server, rather
than the old version built-in to Xvnc. More desktop environments and
applications will likely be compatible. For more information on this alternative
implementation, please see: https://www.realvnc.com/doclink/kb-546
Running applications in /etc/vnc/xstartup
VNC Server catchphrase: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
             signature: xx-xx-xx-xx-xx-xx-xx-xx
Log file is /home/pi/.vnc/raspberrypi:2.log
New desktop is raspberrypi:2 (192.168.1.2:2)

ここで、一度、VNCクライアントソフト(私はTiger VNC Viewerを用いた)から、VNCセッションに接続した。
Raspberry piのIPアドレス:ディスプレイ番号 という書式で、VNC Serverを指定した。
192.168.1.2:2
問題なく、VNCセッションに接続することができた。

★VNCセッションを終了した。(これも忘れないこと!)
pi@raspberrypi:~ $ /usr/bin/vncserver -kill :2



○次に、piユーザーのためのVNC Serverを自動起動するための設定を行った。

(注意)
以下では、systemdを用いてvnc Serverを起動させる設定を行っている。
しかし、systemdからVNC Serverを動作させた場合、polkitが動作しなかった。
そのため、gnome-disksなど特権を必要とするアプリケーションでは権限がないというエラー
「Not authorized to perform operation (udisks-error-quark, 4)」
が表示された。
しかし、上記のように、ユーザーのSSHコンソールからvncserverコマンドを起動する方法では問題は発生しなかった。(←これは重要な回避策)
tigervncではこれについてバグが報告されている。
realvncでも同様のバグがあるのではないか。 

rootユーザーになった。
pi@raspberrypi:~ $ su

次のファイルを新規作成して下記のように記述した。
root@raspberrypi:/home/pi# nano /usr/lib/systemd/system/vncserver-pi.service
[Unit]
Description=VNC Server for user pi in Virtual Mode daemon
After=network.target

[Service]
User=pi     
Type=forking
#ExecStart=/usr/bin/vncserver -geometry 1600x900 :2
ExecStart=
/usr/bin/vncserver -Encryption PreferOff -Authentication VncAuth -geometry 1600x900 :2
ExecStop=/usr/bin/vncserver -kill :2
Restart=on-failure
RestartSec=5
KillMode=process

[Install]
WantedBy=multi-user.target

CTRL+s で上書き保存、CTRL+x で終了する。

piユーザーのためのVNC Serverがシステム起動時に自動的に立ち上がるよう設定した。
root@raspberrypi:/home/pi# systemctl enable vncserver-pi.service
Created symlink /etc/systemd/system/multi-user.target.wants/vncserver-pi.service → /usr/lib/systemd/system/vncserver-pi.service.

手動で、VNC Serverを起動した。
root@raspberrypi:/home/pi# systemctl daemon-reload
root@raspberrypi:/home/pi# systemctl start vncserver-pi.service

先程と同様にしてVNCクライアントソフトから、VNCセッションに接続した。
Raspberry piのIPアドレス:ディスプレイ番号 という書式で、VNC Serverを指定した。
192.168.1.2:2
VNCセッションに接続することができた。

手動で、VNC Serverを終了した。
セッション内デスクトップで動作中のプログラムなどは終了するので注意すること!
root@raspberrypi:/home/pi# systemctl stop vncserver-pi.service


これで、システムが再起動すると、自動的に、piユーザーのためのVNC Serverが起動することになる。



○さらに別のユーザーについても同じことを行いたい場合

もし、さらに別のユーザーを追加し各々デスクトップを用意してVNCで接続できるようにしたいなら、次のページを参考にしてください。

【Raspbian Buster September 2019】VNC Server virtualモードで、新規に作成したユーザーのリモートデスクトップ環境を個々に構築する




<参考>

・VNC viewer: "No matching security types"
< https://www.raspberrypi.org/forums/viewtopic.php?t=176408 > 2019年10月25日

・RealVNC server in virtual mode - Enterprise license required?
< https://www.raspberrypi.org/forums/viewtopic.php?t=249124 > 2019年10月25日

・Bug 1633805 - tigervnc-server, when started via systemd produces problems with polokit when DE is Xfce
< https://bugzilla.redhat.com/show_bug.cgi?id=1633805 > 2019年10月25日

・PolicyKit failed over headless VNC
< https://forums.fedoraforum.org/showthread.php?316905-PolicyKit-failed-over-headless-VNC&p=1809280#post1809280 > 2019年10月25日

・Jessie and XRDP
< https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=122386&p=861126 > 2019年10月26日

・Understanding VNC Server Modes
< https://help.realvnc.com/hc/en-us/articles/360002253238-Understanding-VNC-Server-Modes > 2019年10月25日

・VNC Connect and Raspberry Pi
< https://help.realvnc.com/hc/en-us/articles/360002249917-VNC-Connect-and-Raspberry-Pi#creating-and-remoting-a-virtual-desktop-0-5 > 2019年10月25日


2019年10月27日日曜日

【Raspbian Buster September 2019】OSインストールから初期セットアップ(rootユーザー、SSHログイン、システム更新、ヘッドレス運用、microSD丸ごとバックアップ、リストアなど)


以下では、Raspberry pi 4 Model B(4GBタイプ)に、Raspbian をインストールし、
rootユーザーへの切り替え、SSH接続、システムの更新を行うまでの手順を記載したものである。
また、最後に、RaspbianをインストールしたmicroSDXCカードの、
バックアップ方法とリストア方法についても記載した。

インストールには、microSDXCカードへの書き込みで別マシンが必要になる。
ここでは、Linux(CentOS 7)マシンを使用している。


<使用したもの>

○OSインストール段階で使ったもの
Linuxマシン、
SDXCカードリーダー、
空の高速なmicroSDXC(ここでは、ランダムアクセス性能にも優れた64GB、U3タイプを用いた)、

(注意)
microSDXCは、64GBのものを用いた。
容量が大きいことは、ユーザーデータの保存容量が増すだけでなく、
SDカードのコントローラーによって分散書き込みできる領域が増すということだと考えられるので、
SDカードの寿命も長くすることができると考えられる。

○OS初期セットアップ段階で使ったもの
キーボード、
マウス、
HDMI接続モニター、

アップデートのためにインターネットに接続できるネットワーク環境も用いている。



■Raspberry piの公式OSであるRaspbianの導入

ファイルのダウンロードやSDカードへの書き込みなどの準備作業では、
Linuxマシン(CentOS 7 64bit)を用いた。このLinuxマシンではGUIが使える。
この項目では、この準備用マシンでの操作について記載している。

○ダウンロード

以下のページから、Raspbian というOSをダウンロードした。
https://www.raspberrypi.org/downloads/raspbian/

Raspbianには、現在のところ二種類が用意されていた。
いずれも、バージョンは、September 2019 というものである。

一つは、Raspbian Buster with desktop and recommended software で、
デスクトップの環境に追加のお勧めソフトウェアがパッケージされたものである。

もう一つは、Raspbian Buster with desktop で、そういう追加のソフトウェアがないものである。
(必要に応じて、自分で追加ソフトを選択して導入することもできる。)

ここでは、追加ソフトウェア付のデスクトップ環境を選択した。
ダウンロードしたファイルは3GB程で、zipで圧縮されていた。

(注意)
ブラウザを用いてダウンロードした場合、転送速度が非常に遅い場合に、
セッションがタイムアウトになってしまうことがあった。
その場合、wgetコマンドを用いてダウンロードすれば良かった。


○microSDXCカードへのインストール

インストールと言っても、インストーラーがあるわけではない。
ダウンロードしたファイルは、OSのイメージになっているので、
それをSDカードにそのまま書き込むシンプルな方法で良い。

まず、圧縮ファイルを展開した。
# unzip 2019-09-26-raspbian-buster-full.zip

すると、2019-09-26-raspbian-buster-full.img というファイルが得られた。
このファイルをmicroSDXCカードにRAWデータとして書き込めば良い。
次にその方法を示す。

(注意)
ファイルとして書き込むのではない。
imgファイルにはRaspberry piシステムディスクのイメージがそのまま書き込まれている。
RAWデータとして専用のコマンドでmicroSDXCカードに書き込むことによって、
そのディスク構造(パーティションやファイルシステム)ごとmicroSDXCに転写されることになる。
(注意)
Linuxシステムでは、SDXCカードはデバイスファイルと対応づけられる。
即ち、対応づけられたデバイスファイルにデータを放り込むことによって、
そのSDXCカードにデータが転写される。
まず、SDXCカードリーダーに差し込んだSDXCカードが、
Linuxシステム上でどのデバイスファイル名で認識されたかを確認する。
そこで、microSDXCカードを操作するために、gnome-disksを起動した。(GUI必要)
# gnome-disks
このアプリケーションは、gnome-disk-utility というパッケージから導入できる。


そして、ターゲットの空のmicroSDXCカードを、準備用マシンのカードリーダーに差し込んだ。
起動中のgnome-disksにより、microSDXCがどのデバイスファイルに割り当てられたかわかった。
あるいは、下記ページを参考にして、デバイス名を調べることができる。
http://akira-arets.blogspot.com/2010/03/centos54sd.html

ここでは、microSDXCカードが /dev/sdX というデバイスファイルを割り当てられたものとする。


次のフォーマットを参考にして、microSDXCにデータを書き込んだ。(=インストール)
# dd if='2019-09-26-raspbian-buster-full.img' of=/dev/sdX bs=4M
1624+0 レコード入力
1624+0 レコード出力
6811549696 バイト (6.8 GB) コピーされました、 223.274 秒、 30.5 MB/秒
(注意)
この段階では、書き込まれたデータは6.8GBであるが、
Raspberry pi システムを立ち上げてセットアップが完了した段階では、
64GBのSDカードいっぱいにまでファイルシステムが拡張されていた。
以前のより古いRaspbianではこのような自動拡張はなかったと思う。

(注意)
デバイスファイル(/dev/sdX の所)の指定は間違えないようにすること。
さもなければ、意図せずに別のディスクの内容を破壊してしまうことになる。
bsで指定されている4Mというのは一度に書き込み操作するデータの大きさである。
これが小さいとシーケンシャルライトにならずに、書き込み速度が落ちてしまうことがある。
ここで使用したSDXCカードは、U3という書き込みが高速のものである。
Raspberry piでは、SDXCカードがハードディスク代わりとなるので、高速アクセスのタイプを選んだ。
本当はきちんとランダムアクセスの早いSDXCカードを探して選んだ方が良い。

書き込みが完了したら、microSDXCカードに対して予めgnome-disksで「ディスクの取り出し」を行う。
その上で、microSDXCカードをカードリーダーから取り外した。



■Raspberry pi の起動

○先ず初めに

インストール済みのmicroSDXCカードをRaspberry piのカードスロットに差し込んだ。
キーボード、マウス、そしてHDMI端子よりモニターに接続した。
さらに、ローカルネットワーク接続用のLANケーブルを差し込んだ。

その上で、電源供給のためにType-Cを差し込んだ。
これにより、Raspberry piが起動した。

(注意)
デフォルトでは、SSHログインもできないし、
セットアップは、GUIで行うためにマウスも必要だった。
モニターの無いところで起動してしまうと、終了させることもできなくなり、
仕方無く電源断をすればSDのファイルシステムを壊してしまうことになるだろう。

初回起動は、ラズベリーのアイコンが表示されてから、モニターにデスクトップ画面が表示されるまでに時間がかかった。(5分くらい?)
モニターが真っ暗な状態になっていてもじっくり待つ必要があった。

デスクトップが表示されると、セットアップを促すウインドウが開かれた。
地域や言語を選択し、piユーザー(デフォルトユーザー)のパスワードの設定を行った。
WiFi接続の設定もここで行うことができる。

設定が完了すると、再起動が行われた。


○rootユーザーを使用するための設定

rootユーザーは、パスワードを設定するだけで使用できるようになった。
仮想端末を起動した。

rootユーザーのパスワードを設定した。
pi@raspberrypi:~ $ sudo passwd root


○SSHログインできるようにするための設定

続いて、rootユーザーに切り替えた。
(さきほど設定したパスワードを入力した。)
pi@raspberrypi:~ $ su
Password: 
root@raspberrypi:/home/pi#
これでrootユーザーに切り替わった。

SSHという空のファイルをbootディレクトリに作成した。
root@raspberrypi:/home/pi# touch /boot/ssh

これで、再起動を行うと、SSH接続が可能となった。

次回は、SSH接続を行うので、ここでRaspberry piに割り当てられているIPアドレスを確認した。
root@raspberrypi:/home/pi# ip a | grep inet
inet 192.168.1.2/24 brd 192.168.1.255 scope global noprefixroute eth0
192.168.1.2 がそのアドレスである。環境によって当然異なる。

再起動を行った。
root@raspberrypi:/home/pi# reboot



■Raspberry pi システムの更新


○Raspberry pi へのSSHログイン

上記手順で、Raspberry piにリモート接続(SSH接続)ができるようになった。
別マシンから、Raspberry piにSSH接続を行った。
(デフォルトではrootユーザーは直接ログイン不可だった。)

$ ssh pi@192.168.1.2



○システムのアップグレードを行った。

piユーザーでSSHログイン後、rootユーザーに切り替えた。
(さきほど設定済みのrootパスワードを入力した。)
pi@raspberrypi:~ $ su
Password: 
これで、rootユーザーに切り替わった。
root@raspberrypi:/home/pi#

不意にSSHセッションが切れることに備えて、仮想端末tmuxを導入した。
root@raspberrypi:/home/pi# apt-get install tmux

仮想端末tmuxを起動した。
root@raspberrypi:/home/pi# tmux

念の為、インストール直後のunameの情報を挙げておく。
root@raspberrypi:/home/pi# uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
システムの更新を行った。
(updateでパッケージの更新の有無を調べ、upgradeで更新する。)
root@raspberrypi:/home/pi# apt-get update
root@raspberrypi:/home/pi# apt-get upgrade

更新には結構な時間が必要だった。
ネット環境、microSDXCカードの性能にも依るだろうと思う。

完了後、再起動を行った。
root@raspberrypi:/home/pi# reboot


アップデート後のunameの情報
とくに変化は無かった。
root@raspberrypi:/home/pi# uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux


■ディスプレイ不要のヘッドレス運用について

ところで、この段階で、マウスを使うGUIデスクトップ画面をリモートアクセスで利用するための設定ができる準備ができた。

ネットワーク越しに、別のパソコンからリモートアクセスでデスクトップ画面を利用することをヘッドレス運用と言う。
Raspberry pi 専用にディスプレイを接続する必要がないということである。

ヘッドレス運用のための設定が必要な場合は、以下を参照してください。

二つにページを分けていますが、注意点もあるため、順に目を通すことをお勧めします。

・デフォルトpiユーザーでヘッドレス運用をするための設定について
【Raspbian Buster September 2019】VNC Serverを利用してpiユーザーのリモートデスクトップ環境を構築する

・新規にユーザーを作成してヘッドレス運用をするための設定について
【Raspbian Buster September 2019】VNC Server virtualモードで、新規に作成したユーザーのリモートデスクトップ環境を個々に構築する

上記の設定を行う前に、システムのアップグレードを先ず行うことを推奨します。



■システムのバックアップとリストア

初期セットアップが完了した後、いつでも同じ環境に戻せるようにするために、
microSDXCにインストールされているシステム全体のバックアップを作成した。

ここでも、バックアップファイルの保存先はLinux(CentOS 7)とした。


○Raspberry piからmicroSDXCカードの取り出し

まず、Raspberry pi を終了させた。
root@raspberrypi:/home/pi# poweroff

Raspberry piのシャットダウンを確認後、
本体microSDカードスロットから、microSDXCカードを取り出した。


○取り出したmicroSDXCカードのバックアップ

microSDXCカードをバックアップ保存先とするLinuxマシンのカードリーダーに取り付けた。
既に述べた方法を参考にして、デバイスファイル名を確認した。

ここでは、microSDXCカードが /dev/sdX というデバイスファイルを割り当てられたものとする。

# dd if=/dev/sdX | gzip -c > Raspbian_Raspi4_testmachine_20191025.img.gz

ddコマンドにより、microSDXCの内容が全て読み取られて、
gzipコマンドによって圧縮されてから指定したgzファイルに保存される。
圧縮をかけたので、microSDXCは64GB程度あるが、3GB程度に圧縮されて保存できた。


○バックアップファイルからmicroSDXCへリストア

リストアするには次のようにする。
# gzip -dc < Raspbian_Raspi4_testmachine_20191025.img.gz | dd of=/dev/sdX

バックアップのときに発行したコマンドと逆のデータの流れになっている。

(注意)
一つ気になることがある。それは、リストア先のmicroSDXCの容量である。
リストア先のmicroSDXCカードがバックアップ元と全く同じ容量であるか、
あるいはそれよりも大きい場合は問題ないだろう。
しかし、逆に、少しでも容量が小さい場合にはデータを全て書き込みできずに、
エラーになると考えられる。
同じ64GBと表記されたmicroSDXCでもメーカーや型番やロットによって、
容量が同じでない場合があるので注意が必要である。
悩ましさを切り捨てるために、リストアが必要になった際には、
128GBサイズのmicroSDXCカードを使ってみることも手である。


○上記の方法でリストアを試した結果

バックアップしたRaspberry pi 4 のSDカードの容量は、次の通りである。

(parted) unit b                                                         
(parted) p                                                             
Model: SD SA64G (sd/mmc)
Disk /dev/mmcblk0: 61983424512B

そして、リストア先として用いた新しい空のSDカードの容量は、次の通りである。

(parted) unit b                                                         
(parted) p
Model: SD SR64G (sd/mmc)
Disk /dev/mmcblk0: 63864569856B

このように比べると、リストア先のSDカードの容量は同じ64GBタイプでも少し大きいものだとわかる。
これはメーカーや、型番、ロットによって異なるので実際に試してみなければわからない。
したがって既に述べたように、リストア先としてはワンサイズ上のタイプのSDカードを選ぶ手が確実となる。


リストアコマンドの結果は次の通りである。
bs=4M は一度に書き込むデータの量である。
これを省略するとシーケンシャルライトにならずにSDへの書き込みが非常に遅くなる場合がある。

[root@localhost Raspberry]# gzip -dc < Raspbian_Raspi4_testmachine_20191025.img.gz | dd of=/dev/sdX bs=4M
121061376+0 レコード入力
121061376+0 レコード出力
61983424512 バイト (62 GB) コピーされました
リストア先SDカードのサイズは、63864569856バイトあるので、問題なく書き込むことができたわけである。


そして、このリストアしたSDカードを、新規に購入したRaspberry pi 4で用いて、
そのまま起動したところ以前と同じ設定のシステムを得られた。
例えば、前のシステムで設定したVNC SERVERも自動的に起動された。

同じ設定のRaspberry piを増やすことができるのでバックアップ、リストアはとても便利である。
また、SDカードが故障して起動しなくったり、システムがおかしくなった場合でも、リストアは有効である。

以上



<参考>
・ddの進捗を確認
< https://qiita.com/tukiyo3/items/5e3fd748287ffa4b6612 > 2019年10月27日

・gzip - ファイルを圧縮・展開 - Linuxコマンド
< https://webkaru.net/linux/gzip-command/ > 2019年10月27日


新品価格
¥7,800から
(2020/1/19 06:25時点)

2018年4月1日日曜日

【RASPBIAN STRETCH LITE March 2018】静的ルーティング情報とIPアドレスの永続的登録の新作法【Raspberry Pi 2】


RASPBIAN STRETCH LITE(Debian Stretch)では、
ネットワーク周りの設定を行うファイルが以前のものとは異なっているそうだ。

ネットワークインターフェイスの設定は、
Debian Wheezy では、/etc/network/interfaces に設定すれば良かったようだが、
Debian Jessie からは、/etc/dhcpcd.conf に設定する必要があるらしい。

このことは、内部で、役割を dhcpd が担っていることを意味する。
この dhcpd は、DHCP と DHCPv6 client であり、豊富な機能をもっているそうだ。



■IPアドレスの固定方法

そこで、IPアドレスの固定は、/etc/dhcpcd.conf で行うことになる。

(RASPBIAN STRETCH LITEの)/etc/dhcpcd.conf 内に記述されていたサンプルである。
コメントアウトされている。
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

DHCPによる設定に失敗した場合に、指定した設定にフォールバックすることもできるようだ。
以下の例では、static_eth0 というプロファイルで指定される設定にフォールバックするようである。
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0 #static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1

# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
サンプルファイル内には、他にも設定項目が存在していた。



■ルーティング情報の登録と固定

また、ルーティング情報の登録と固定についても、dhcpd に合った方法で行う必要がある。

この dhcpd は、/usr/lib/dhcpcd/dhcpcd-hooks/ 以下にあるスクリプトを辞書順に実行する。

そこで、ルーティング情報の設定は、次の場所に記述することになる。


○次のファイルに、ipコマンドを使ったルーティング設定を追加し保存した。
root@raspberrypi:/home/pi# nano /lib/dhcpcd/dhcpcd-hooks/40-route
ip route add 192.168.0.0/16 via 192.168.20.1 dev eth1
ip route add 172.16.0.0/12 via 192.168.20.1 dev eth1
この段階では、登録したルーティング情報は有効にはなっていない。

マシンが再起動すると登録したルーティング情報が有効化される。
(マシンを再起動しても、登録したルーティング情報は復元される。)


○マシンを再起動した。
root@raspberrypi:/home/pi# reboot

○ルーティングテーブルが復元されていることを確認した。
root@raspberrypi:/home/pi# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ntt.setup       0.0.0.0         UG    202    0        0 eth0
default         192.168.20.1   0.0.0.0         UG    203    0        0 eth1
172.16.0.0      192.168.20.1   255.240.0.0     UG    0      0        0 eth1
192.168.0.0     192.168.20.1   255.255.0.0     UG    0      0        0 eth1

192.168.120.0   0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.126.0   0.0.0.0         255.255.255.0   U     203    0        0 eth1

新品価格
¥5,980から
(2018/3/30 01:45時点)

新品価格
¥2,160から
(2018/3/30 01:42時点)

<参考>
・Static routes not working
< https://www.raspberrypi.org/forums/viewtopic.php?t=163252 > 2018年4月1日

・Configuring a Static IP and Static Routes on a Raspberry Pi running Raspbian Jessie using the CLI
< http://www.hospitableit.com/howto/configuring-a-static-ip-and-static-routes-on-a-raspberry-pi-running-raspbian-jessie-using-the-cli/ > 2018年4月1日

・dhcpcd vs /etc/network/interfaces
< https://raspberrypi.stackexchange.com/questions/39785/dhcpcd-vs-etc-network-interfaces > 2018年4月1日

・dhcpcd/DHCP static route(s)
< https://wiki.archlinux.org/index.php/dhcpcd#DHCP_static_route.28s.29 > 2018年4月1日

・How to create a reoccurring static route in current Raspian?
< https://www.raspberrypi.org/forums/viewtopic.php?t=159009 > 2018年4月1日

・Raspberry Pi 2 (Raspbian: jessie) でIPアドレスを固定する
< https://qiita.com/ykog/items/a6dbba1c09e870f8f702 > 2018年4月1日

2018年3月31日土曜日

【RASPBIAN STRETCH LITE March 2018】iptablesのルールをシステム再起動後でも自動的に反映できるようにする【Raspberry Pi 2】

RASPBIAN STRETCH LITE(March 2018) で、
iptablesや、ip6tablesを用いて設定したフィルタルールが、システムの再起動後にも自動的に反映されるように設定を行った。

CentOS6なら、serivce iptables save で保存でき、また再起動時の自動復元が可能だった。
RASPBIAN STRETCH LITE でも、保存とパッケージの追加だけで再起動時の復元ができた。
ただし、作法が異なった。

そのパッケージの導入後、
iptableや、ip6tablesコマンドで変更したルールは、iptables-saveや、ip6tables-saveコマンドを用いて、設定保存ファイルに出力できる。

設定保存ファイルの内容は、サービスによってシステム起動時に自動的に反映される。

以下で、パッケージの導入から、動作確認までを扱っている。



■iptables-persistentの導入を行った。

○必要なパッケージを導入した。

インストール中に、TUIが現れてiptablesの設定とip6tablesの設定を保存するかどうかを聞かれる。
いずれも、<YES>で答えた。

root@raspberrypi:/home/pi# apt-get install iptables-persistent
Reading package lists... Done
Building dependency tree     
Reading state information... Done
The following additional packages will be installed:
  netfilter-persistent
The following NEW packages will be installed:
  iptables-persistent netfilter-persistent

0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 19.5 kB of archives.
After this operation, 79.9 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf netfilter-persistent all 1.0.4+nmu2 [8,792 B]
Get:2 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf iptables-persistent all 1.0.4+nmu2 [10.7 kB]
Fetched 19.5 kB in 1s (9,889 B/s)             
Preconfiguring packages ...
Selecting previously unselected package netfilter-persistent.
(Reading database ... 34547 files and directories currently installed.)
Preparing to unpack .../netfilter-persistent_1.0.4+nmu2_all.deb ...
Unpacking netfilter-persistent (1.0.4+nmu2) ...
Selecting previously unselected package iptables-persistent.
Preparing to unpack .../iptables-persistent_1.0.4+nmu2_all.deb ...
Unpacking iptables-persistent (1.0.4+nmu2) ...
Setting up netfilter-persistent (1.0.4+nmu2) ...
Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service → /lib/systemd/system/netfilter-persistent.service.
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Processing triggers for systemd (232-25+deb9u2) ...
Processing triggers for man-db (2.7.6.1-2) ...
Setting up iptables-persistent (1.0.4+nmu2) ...

▲途中で、iptablesで既に設定されているルールを保存するかどうか尋ねられるので、<YES>で答えた。
これによって、システムの再起動の際に自動的にこのルールがロードされる。
ここで保存されたルールは後でも変更ができる。
Configuring iptables-persistent
Current iptables rules can be saved to the configuration file /etc/iptables/rules.v4.
These rules will then be loaded automatically during system startup.
Rules are only saved automatically during package installation.
See the manual page of iptables-save(8) for instructions on keeping the rules file up-to-date.
Save current IPv4 rules?<Yes><No>
▲ip6tablesについても同様である。
Configuring iptables-persistent
Current iptables rules can be saved to the configuration file /etc/iptables/rules.v6.
These rules will then be loaded automatically during system startup.
Rules are only saved automatically during package installation.
See the manual page of ip6tables-save(8) for instructions on keeping the rules file up-to-date.
Save current IPv6 rules?<Yes><No>
以上で導入自体は完了した。



■システム再起動後にルールが復元されるか確かめた

○実際に保存されていることを確認した。

# cat /etc/iptables/rules.v6
# Generated by ip6tables-save v1.6.0 on Fri Mar 30 15:35:44 2018
*filter
:INPUT DROP [8:736]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [18:1474]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
-A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
COMMIT
# Completed on Fri Mar 30 15:35:44 2018

○システムを再起動してもルールが復元されているか確認した。

root@raspberrypi:/home/pi# reboot ←(注意)システムが再起動する。

root@raspberrypi:/home/pi# ip6tables -L -v
Chain INPUT (policy DROP 10 packets, 1598 bytes)
 pkts bytes target     prot opt in     out     source               destination       
    0     0 ACCEPT     all      any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             fe80::/64            ipv6-icmp neighbour-solicitation
    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             fe80::/64            ipv6-icmp neighbour-advertisement
    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             ff02::/16            ipv6-icmp neighbour-solicitation
    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             ff02::/16            ipv6-icmp neighbour-advertisement
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination       
Chain OUTPUT (policy ACCEPT 17 packets, 1954 bytes)
 pkts bytes target     prot opt in     out     source               destination
上記の通り、設定が復元されていた。


■後でルールを変更して有効化するか確認した。

(1)iptablesコマンドでルール変更する場合

○ルールを変更した。

FORWARDのポリシーをDROPに変更した。
root@raspberrypi:/home/pi# iptables -P FORWARD DROP


○変更したルールを保存した。

iptables-saveコマンドは設定内容をテキストに出力するだけ。
root@raspberrypi:/home/pi# iptables-save
# Generated by iptables-save v1.6.0 on Fri Mar 30 15:56:21 2018
*filter
:INPUT ACCEPT [22:1504]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [12:1136]
COMMIT
# Completed on Fri Mar 30 15:56:21 2018
したがって、このiptables-saveコマンドの出力を、先のルールファイルに書き込みした。
root@raspberrypi:/home/pi# iptables-save > /etc/iptables/rules.v4

書き込んだ内容を確認した。
root@raspberrypi:/home/pi# cat /etc/iptables/rules.v4
# Generated by iptables-save v1.6.0 on Fri Mar 30 15:56:37 2018
*filter
:INPUT ACCEPT [35:2392]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [20:2112]
COMMIT
# Completed on Fri Mar 30 15:56:37 2018

○システムを再起動してもルールが復元されているか確認した。

root@raspberrypi:/home/pi# reboot ←(注意)システムが再起動する。

root@raspberrypi:/home/pi# iptables -L -v
Chain INPUT (policy ACCEPT 87 packets, 9107 bytes)
 pkts bytes target     prot opt in     out     source               destination       
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination       
Chain OUTPUT (policy ACCEPT 65 packets, 8767 bytes)
 pkts bytes target     prot opt in     out     source               destination
上記の通り、設定が復元されていた。


(2)直にルール設定ファイルを変更する場合

○直接、ルール設定ファイルを変更した。

root@raspberrypi:/home/pi# vi /etc/iptables/rules.v6
# Generated by ip6tables-save v1.6.0 on Fri Mar 30 15:35:44 2018
*filter
:INPUT DROP [8:736]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [18:1474]
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED -j ACCEPT

-A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
-A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
COMMIT
# Completed on Fri Mar 30 15:35:44 2018

○この変更を反映させた。

サービスをrestartした。
root@raspberrypi:/home/pi# systemctl restart netfilter-persistent

反映されているか確認した。
root@raspberrypi:/home/pi# ip6tables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination       
    0     0 ACCEPT     all      any    any     anywhere             anywhere             state ESTABLISHED
    0     0 ACCEPT     all      any    any     anywhere             anywhere             state RELATED

    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             fe80::/64            ipv6-icmp neighbour-solicitation
    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             fe80::/64            ipv6-icmp neighbour-advertisement
    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             ff02::/16            ipv6-icmp neighbour-solicitation
    0     0 ACCEPT     ipv6-icmp    any    any     anywhere             ff02::/16            ipv6-icmp neighbour-advertisement
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination       
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
システムを再起動しても、変更は保持され復元された。


新品価格
¥5,980から
(2018/3/30 01:45時点)

新品価格
¥2,160から
(2018/3/30 01:42時点)

<参考>
・Persistent IPtables on Raspberry Pi (Raspbian)
< http://blog.mxard.com/persistent-iptables-on-raspberry-pi-raspbian > 2018年3月31日

・Make the configuration of iptables persistent (Debian)
< http://www.microhowto.info/howto/make_the_configuration_of_iptables_persistent_on_debian.html > 2018年3月31日


2018年3月30日金曜日

【RASPBIAN STRETCH LITE March 2018】OSの導入、SSHの有効化、システムの更新【Raspberry Pi 2】

Raspberry pi 2 に、CentOSのminimalのようなOSを入れて、CUIのみで動作させたい。

以下は、この要件を満たしたOSの導入、SSHリモート接続、
そしてシステムの更新までの手順を記している。


■microSDに、OSイメージの書き込み

○RASPBIAN STRETCH LITE のダウンロード

RASPBIAN STRETCH LITEは、Raspberry pi のminimal版OSのようなものである。
グラフィカルな機能は省かれていて、CentOSのminimalイメージの位置付けと似ている。

下記、WEBサイトから、RASPBIAN STRETCH LITE をダウンロードした。(370MBほど)
https://www.raspberrypi.org/downloads/raspbian/
RASPBIAN STRETCH LITE
Minimal image based on Debian Stretch
Version:March 2018
Release date:2018-03-13
Kernel version:4.9
Release notes:Link
○zipファイルを展開(imgファイルを取り出し)

○ddコマンドで、SDカードに書き込み

imgファイルは、2GB程度の大きさだった。
余裕を持たせて、書き込みには16GBのmicroSDを使用した。

(例)microSDがsdXの場合
# dd if=./2018-03-13-raspbian-stretch-lite.img of=/dev/sdX



■SSHでリモートからログインできるようになるまでの設定

○直接コンソールからpiユーザーでログイン

Raspberry pi 2 に、「RASPBIAN STRETCH LITE」 を書き込んだmicoSDを取り付けて起動した。
Raspberry pi には、HDMIでモニターと、USBでキーボードが接続されている。

ユーザー pi、パスワード raspberry、でログインした。


○rootパスワードの設定

pi@raspberrypi:~ $ sudo passwd root
Enter new UNIX password: ←rootユーザーのパスワードを設定
Retype new UNIX password: ←確認のために入力
passwd: password updated successfully

○SSHを有効化

SSHはデフォルトでは無効化されている。
次のように空のファイルを作成すると有効化される。

まず、rootユーザーになった。
pi@raspberrypi:~ $ su
Password: 
/bootディレクトリに、sshという名前の空のファイルを作成した。
root@raspberrypi:/home/pi# touch /boot/ssh

再起動を行った。
root@raspberrypi:/home/pi# reboot

再起動後、SSHは有効になって、リモートからログインが可能になった。



■システムのアップデート

ブロードバンドルーターに接続したLANケーブルをRaspberry pi 2のLANコネクタに接続しておくだけで、
自動的にネットワークを認識し、インターネットとの通信が可能になった。
IPv6通信も可能だった。

(注意)
iptablesやip6tables の状態を確認すると、フィルタリングは未設定だった。
そのため、ブロードバンドルーターなどのファイアウォールの配下に接続すべきである。


○仮想端末tmuxのインストールと起動

システムのアップデート中に、不意にSSH接続が切れては困るので仮想端末を利用した。

root@raspberrypi:/home/pi# apt-get install tmux
root@raspberrypi:/home/pi# tmux


○システムのアップデート(tmux仮想端末で実行)

利用可能なパッケージリストの更新
root@raspberrypi:/home/pi# apt-get update

リストに基づいて実際にシステムをアップデート
root@raspberrypi:/home/pi# apt-get upgrade

完了後、マシンを再起動しておく。
root@raspberrypi:/home/pi# reboot

新品価格
¥5,980から
(2018/3/30 01:45時点)

新品価格
¥2,160から
(2018/3/30 01:42時点)


<参考>
・Minimal image?
< https://www.raspberrypi.org/forums/viewtopic.php?t=195347 > 2018年3月30日

・Raspberry Pi セットアップ(書き込み~SSH設定まで)
< https://qiita.com/Halhira/items/1da2ae543217be26988a > 2018年3月30日

・RaspberryPiをRaspbianで使う場合の初期設定メモ(ユーザ追加)
< https://qiita.com/R-STYLE/items/b481ba2d695ddf8bcee4 > 2018年3月30日

・「Raspberry Pi」(ラズベリーパイ)Linuxコマンド集・基本編
< http://www.stdio.jp/entry/raspberry_pi/linux-command-collection-basic > 2018年3月30日

Ad

Ad