2018年1月29日月曜日

Raspberry Pi の無線 LAN まわりの設定

raspi-config で無線 LAN の設定をしたのですが、設定ファイルを見るとパスワードがそのまま記録されていました。 かなり気になるので修正して、ついでに固定 IP にしました。

環境

  • Raspberry Pi 3 Model B
  • Raspbian Stretch Lite

無線 LAN パスワードがそのまま記録されていたので修正

パスワードがそのまま記録されているのはこのファイルです。

/etc/wpa_supplicant/wpa_supplicant.conf

まずはこのファイルから関連の箇所をごっそり削除

改めて SSID とパスワードを設定

$ wpa_passphrase MY_SSID | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
  • 標準入力からパスワードを入力してリターンキー

この時点で以下のようになりました。

$ cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

# reading passphrase from stdin
network={
        ssid="MY_SSID"
        #psk="MY_PASSWORD"
        psk=da2beb2e20bc43948554653b92b7c79c589926b0f91b0cd16a7dacc2e2b4dc95
}
  • いろいろいじったのが原因か、一般ユーザーでも見ることができてしまっています。

以下の行を削除

#psk="MY_PASSWORD"

一般ユーザーが中身を見たり修正できないようにしておきました。

$ sudo chmod 640 /etc/wpa_supplicant/wpa_supplicant.conf
$ ls -la /etc/wpa_supplicant/wpa_supplicant.conf
-rw-r----- 1 root root 214 Jan 29 23:25 /etc/wpa_supplicant/wpa_supplicant.conf

無線 LAN に固定 IP アドレスを設定

以下のように IP アドレス情報追加

echo "
interface wlan0
static ip_address=192.168.0.11/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8
" \
| sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf

Raspberry Pi 再起動


Raspberry Pi に Raspbian をヘッドレスで最初から固定 IP でインストール

Raspberry Pi 3 にモニターを接続しない状態 (ヘッドレス) で Raspbian Stretch をインストールします。

モニターが無いため最初から SSH でログインする必要があり、デフォルト状態では最初に DHCP で割りあてられた IP アドレスを探り出す必要があり大変です。

そこで、母艦 Ubuntu で microSD メモリカードに Raspbian をインストールする時に Raspbian の IP アドレスも固定で設定します。

環境

  • Raspberry Pi 3 Model B
  • Raspbian Stretch Lite
  • 母艦: Ubuntu 14.04

microSD カードに Raspbian イメージを書き込み (母艦の Ubuntu で作業)

Raspbian をインストールする microSD カードは手元にあった 32G のものを使います。 大事なファイルが残っていないことを確認し、念のため全てのパーティションを fdisk コマンドで削除しておきました。

https://www.raspberrypi.org/ から Raspbian Stretch Lite (デスクトップ環境無し) のイメージファイルをダウンロード。ダウンロード時の最新イメージファイルは 2017-11-29-raspbian-stretch-lite.zip でした。

念のため、チェックサムがサイトに掲載されているものと一致することを確認

$ sha256sum 2017-11-29-raspbian-stretch-lite.zip
e942b70072f2e83c446b9de6f202eb8f9692c06e7d92c343361340cc016e0c9f  2017-11-29-raspbian-stretch-lite.zip

ダウンロードした zip ファイルを解凍

$ unzip 2017-11-29-raspbian-stretch-lite.zip
$ ls -l
合計 2170716
-rw-r--r-- 1 worker worker 1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker  364724005  1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
  • 解凍されて .img ファイルができました。

microSD カードがマウントされていないことを確認

$ mount | grep /dev/XXXXXXX
  • /dev/XXXXXXX は実際は microSD カードのデバイスファイルです。 (環境によって異なります)

イメージを microSD カードに書き込み

Warning

/dev/XXXXXXX を間違えると、意図せず HDD など他のデバイスの情報を消去してしまうので注意が必要です。

$ sudo dd bs=4M if=2017-11-29-raspbian-stretch-lite.img of=/dev/XXXXXXX conv=fsync

書き込んだ後の microSD の中身

$ sudo fdisk -l /dev/XXXXXXX

... snip ...

/dev/XXXXXXXp1            8192       93236       42522+   c  W95 FAT32 (LBA)
/dev/XXXXXXXp2           94208     3629055     1767424   83  Linux

正しく書き込めたこと確認 (母艦の Ubuntu で作業)

microSD カードからイメージを吸い出し

Warning

microSD カードのサイズが 32G の場合、以下を実行すると Ubuntu の HDD も 32G 消費されるので、HDD が容量不足にならないように注意が必要です。

$ sudo dd bs=4M if=/dev/XXXXXXX of=from-sd-card.img
$ ls -l
合計 33053532
-rw-r--r-- 1 worker worker  1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker   364724005  1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
-rw-r--r-- 1 root   root   31624003584  1月 28 00:59 from-sd-card.img

from-sd-card.img のサイズは microSD カードと同じ 32G なので、比較のため切り詰め

$ sudo truncate --reference 2017-11-29-raspbian-stretch-lite.img from-sd-card.img
$ ls -l
合計 3985244
-rw-r--r-- 1 worker worker 1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker  364724005  1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
-rw-r--r-- 1 root   root   1858076672  1月 28 01:04 from-sd-card.img
  • from-sd-card.img のサイズが 2017-11-29-raspbian-stretch-lite.img と同じになりました。

比較

$ diff -s from-sd-card.img 2017-11-29-raspbian-stretch-lite.img
ファイル from-sd-card.img と 2017-11-29-raspbian-stretch-lite.img は同一です
$ md5sum from-sd-card.img 2017-11-29-raspbian-stretch-lite.img
85c7c13b75e45e5394120e52415234a6  from-sd-card.img
85c7c13b75e45e5394120e52415234a6  2017-11-29-raspbian-stretch-lite.img

sync 実施

$ sudo sync

固定 IP アドレスの設定 (母艦の Ubuntu で作業)

microSD カードのパーティションを認識させる

$ sudo partx -v -a /dev/XXXXXXX
partition: none, disk: /dev/XXXXXXX, lower: 0, upper: 0
/dev/XXXXXXX: partition table type 'dos' detected
/dev/XXXXXXX: partition #1 added
/dev/XXXXXXX: partition #2 added

デバイスファイルができたことを確認

$ ls /dev/XXXXXXX*
/dev/XXXXXXX  /dev/XXXXXXXp1  /dev/XXXXXXXp2

Raspbian では以下のようにマウントされるようです。

デバイスファイル マウントポイント
/dev/XXXXXXXp1 /boot/
/dev/XXXXXXXp2 /

microSD カードがマウントされていないことを確認

$ mount | grep /dev/XXXXXXX

マウントポイント作成

$ mkdir mount_point_p1
$ mkdir mount_point_p2

マウント

$ sudo mount /dev/XXXXXXXp1 mount_point_p1/
$ sudo mount /dev/XXXXXXXp2 mount_point_p2/

Rasbian Stretch のカーネルは eth0 ではなく enxXXXXXXX (環境によって異なる) となります。このままだと実際のインターフェース名は Raspbian を起動して ssh しないとわからないので eth0 を使うようにします。

cmdline.txt をバックアップ

$ sudo cp -p mount_point_p1/cmdline.txt mount_point_p1/cmdline.txt.org

eth0 を使うように cmdline.txt の最後に以下のように追加

$ echo "
net.ifnames=0" | sudo tee -a mount_point_p1/cmdline.txt
$ diff -u mount_point_p1/cmdline.txt.org mount_point_p1/cmdline.txt
--- mount_point_p1/cmdline.txt.org      2017-11-29 02:37:02.000000000 +0900
+++ mount_point_p1/cmdline.txt  2018-01-28 16:35:22.000000000 +0900
@@ -1 +1,3 @@
 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=37665771-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
+
+net.ifnames=0

dhcpcd.conf をバックアップ

$ sudo cp -p mount_point_p2/etc/dhcpcd.conf mount_point_p2/etc/dhcpcd.conf.org

実際の環境にあわせて dhcpcd.conf の最後に IP アドレス情報を追加

$ echo "
interface eth0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8" | sudo tee -a mount_point_p2/etc/dhcpcd.conf
$ diff -u mount_point_p2/etc/dhcpcd.conf.org mount_point_p2/etc/dhcpcd.conf
--- mount_point_p2/etc/dhcpcd.conf.org  2017-11-22 23:46:27.000000000 +0900
+++ mount_point_p2/etc/dhcpcd.conf      2018-01-28 16:41:48.855806158 +0900
@@ -55,3 +55,8 @@
 #interface eth0
 #fallback static_eth0

+
+interface eth0
+static ip_address=192.168.0.10/24
+static routers=192.168.0.1
+static domain_name_servers=192.168.0.1 8.8.8.8

Raspbian 起動時に ssh サーバーも起動するようにするため、ssh ファイル作成

$ sudo touch mount_point_p1/ssh

microSD カードをアンマウント

$ sudo umount mount_point_p1
$ sudo umount mount_point_p2

Ubuntu 機から microSD カードを抜く

インストール後の設定 (Raspberry Pi で作業)

microSD カードを Raspberry Pi に挿して起動

Raspberry Pi に ssh でログイン

  • user: pi
  • password: raspberry

ログインパスワード変更

$ passwd

raspi-config 起動

$ sudo raspi-config

raspi-config で以下を設定しました。

  • 無線 LAN
  • Locale
  • Timezone
  • Wifi Country

SSH 鍵の更新

$ sudo rm -v /etc/ssh/ssh_host*
$ sudo dpkg-reconfigure openssh-server

パスワード無しでの sudo 禁止

現状はこのような感じになっていました。

$ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL=(ALL) NOPASSWD: ALL

このファイルを削除

$ sudo rm /etc/sudoers.d/010_pi-nopasswd

その他

/boot/ssh は自動で削除されましたが、Raspberry Pi 再起動後も ssh でログインできています。

microSD は 32G を使いましたが、/ は最大容量まで拡張されたようです。

$ sudo fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.5 GiB, 31624003584 bytes, 61765632 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd711aa51

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       8192    93236    85045 41.5M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      94208 61765631 61671424 29.4G 83 Linux
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  1.1G   27G   4% /
devtmpfs        460M     0  460M   0% /dev
tmpfs           464M   76K  464M   1% /dev/shm
tmpfs           464M   12M  452M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1   41M   21M   21M  51% /boot
tmpfs            93M     0   93M   0% /run/user/1000

2018年1月2日火曜日

連続画像から動画作成

環境

  • Ubuntu 16.04.3 LTS

こんな感じでできました。

$ sudo apt install mencoder
$ mencoder "mf://images/jma3/*.png" -mf fps=25 -ovc lavc -lavcopts vcodec=mpeg4 -o test.avi

MTP で接続したスマホをファイルシステムとしてマウント

環境: Ubuntu 16.04


jmtpfs インストール

$ sudo apt install jmtpfs
MTP 接続されたスマホを確認 (PC に接続したスマホは 1台のみの場合)
$ jmtpfs -l
Device 0 (VID=04dd and PID=9a8b) is UNKNOWN in libmtp v1.1.10.
Please report this VID/PID and the device model to the libmtp development team
Available devices (busLocation, devNum, productId, vendorId, product, vendor):
1, 22, 0x9a8b, 0x04dd, UNKNOWN, UNKNOWN
busLocation devNum productId vendorId product vendor
1 22 0x9a8b 0x04dd UNKNOWN UNKNOWN

スマホ 2台接続した場合はなぜか以下のようになった
$ jmtpfs -l
Device 0 (VID=04dd and PID=9a8b) is UNKNOWN in libmtp v1.1.10.
Please report this VID/PID and the device model to the libmtp development team
Device 1 (VID=0e8d and PID=2008) is a MediaTek Inc MT65xx.
Available devices (busLocation, devNum, productId, vendorId, product, vendor):
1, 22, 0x9a8b, 0x04dd, UNKNOWN, UNKNOWN
1, 23, 0x2008, 0x0e8d, MT65xx, MediaTek Inc
1, 22, 0x9a8b, 0x04dd, UNKNOWN, UNKNOWN
1, 23, 0x2008, 0x0e8d, MT65xx, MediaTek Inc
busLocation devNum productId vendorId product vendor
1 22 0x9a8b 0x04dd UNKNOWN UNKNOWN
1 23 0x2008 0x0e8d MT65xx MediaTek Inc

マウント

マウントポイント作成

$ mkdir test

マウント

$ jmtpfs test/
Device 0 (VID=04dd and PID=9a8b) is UNKNOWN in libmtp v1.1.10.
Please report this VID/PID and the device model to the libmtp development team
Device 1 (VID=0e8d and PID=2008) is a MediaTek Inc MT65xx.
Android device detected, assigning default bug flags

マウントした中身を確認

$ ls -la test/
合計 4
drwxr-xr-x  4 worker worker    0  1月  1  1970 .
drwxrwxr-x  3 worker worker 4096  1月  2 16:14 ..
drwxr-xr-x 22 worker worker    0  1月 30  4438088 Internal storage
drwxr-xr-x  8 worker worker    0  3月 17  4438090 microSD
  • 中身を確認すると、busLocation=1, devNum=22 のスマホがマウントされた
  • 最初の有効な MTP デバイスを自動選択してマウントされるとのこと

MTP デバイスを指定してマウントする場合

$ jmtpfs -device=1,22 test/
Device 0 (VID=04dd and PID=9a8b) is UNKNOWN in libmtp v1.1.10.
Please report this VID/PID and the device model to the libmtp development team
Device 1 (VID=0e8d and PID=2008) is a MediaTek Inc MT65xx.
Android device detected, assigning default bug flags
  • busLocation=1, devNum=22 を指定

アンマウント

$ fusermount -u test/

Windows10 で Ctrl と Caps キーを入れ替え

環境: Windows10 Home

やってることは「 Windows8.1 で Ctrl と Caps キーを入れ替え 」と同じですが、レジストリエディタで値を手打ちするのが面倒なので DOS 窓でやってみました。


レジストリエディタで対象の値が無いことを確認

管理者としてコマンドプロンプトを実行

コマンドプロンプトで以下を実行

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v "Scancode Map" /t REG_BINARY /d 0000000000000000030000001d003a003a001d0000000000 /f

レジストリエディタで対象の値ができたことを確認

Windows を再起動


2017年9月20日水曜日

Android の FolderSync アプリ設定

Android スマホのバックアップに FolderSync を使っているのですが、新しいスマホに FolderSync をインストールする度に設定値どうするんだっけ?と悩むのでまとめときます。


環境

  • Android: 6.0.1
  • FolderSync: 2.9.12

バックアップ概要

FolderSync から Ubuntu サーバーに sftp で接続し、バックアップの度に名前が時刻のフォルダを作成し、そこにスマホのファイルをバックアップします。


Ubuntu サーバー側設定

  • IP: 192.168.0.1
  • スマホの IP アドレスからの sftp 接続 (22番ポート) を ufw で許可しておきます。
  • sftp アカウント: worker (sftp でネットワークから接続できるようにこのアカウントを作成しておきます)
  • バックアップ先ディレクトリ: /some/where/

FolderSync アカウント設定

FolderSync トップ画面で [Accounts] をタップ

[+] アイコンをタップ

[SFTP] をタップして以下を設定値を入力

Main

項目 設定値
Unique_name 適当な名前を設定

Server address

項目 設定値
Server_address sftp://192.168.0.1/

Login

項目 設定値
Use_anonymous_login OFF
Login_name worker
Password worker ユーザーの sftp パスワード
Known_hosts_file 空白
Private_key-file 空白
Key-file_password 空白

Advanced

項目 設定値
Disable_Compression OFF
Legacy_library OFF
Charset Default

Ubuntu サーバーが起動して sftp できる状態で [TEST] をタップ

  • Login succeeded となることを確認

[SAVE] をタップして保存


FolderSync Folderpairs 設定

FolderSync トップ画面で [Folderpairs] をタップ

[+] アイコンをタップして以下を設定

Main

項目 設定値
Unique_name 適当な名前を設定
Account 先ほど作成した sftp アカウントを選択
Sync_type To remote folder
Remote_folder /some/where
Local_folder /storage/emulated/0/DCIM/

Scheduling

項目 設定値
Use_scheduled_sync OFF
Sync_Interval Daily (グレーアウト)
Sync_days 空白 (グレーアウト)
Sync_times 空白 (グレーアウト)

Sync options

項目 設定値
Copy_files_to_time-stamped_folder ON
Naming_Pattern 空白
Instant_sync OFF (グレーアウト)
Exclude_from_force_sync OFF
Sync_subfolders ON
Sync_hidden_files ON
Delete_source_files_after_sync OFF
Retry_sync_if_failed OFF
Only_resync_source_files_if_modified_(ignore_target_deletion) OFF
Sync_deletions OFF (グレーアウト)
Overwrite_old_files Always (グレーアウト)
If_conflicting_modifications Skip file (グレーアウト)

Connection

項目 設定値
Use_WiFi ON
Turn_on_Wifi OFF
Allowed_WiFi_SSID’s_(_separate_with_,_) 空白
Disallowed_WiFi_SSID’s_(_separate_with_,_) 空白
Use_3G/4G OFF
Use_Edge/2G OFF
Sync_when_roaming OFF
Use_other_connections OFF
Ignore_network_state OFF

Notifications

項目 設定値
Show_notification_when_syncing OFF
Show_notification_on_sync_success ON
Show_notification_when_changes_occur OFF
Show_notification_on_sync_error ON

Advanced

項目 設定値
Only_sync_if_charging OFF
Rescan_media_library OFF
Use_MD5_checksums OFF
Use_temp-file_scheme ON
Disable_file-size_check OFF

[SAVE] をタップして保存


バックアップ

FolderSync トップ画面で [Folderpairs] をタップ

作成した Folderpair の [SYNC] をクリック

バックアップが完了すると、Ubuntu 側の /some/where 配下に名前が時刻のフォルダが作成され、スマホのファイルがバックアップされています。


2017年8月20日日曜日

VMware ゲストのディスクイメージを圧縮してみました

VMware ホストの空きディスク容量が少なくなってきたので VMware ゲスト内の不要ファイルを削除してみたのですが、ホストの空きディスク容量は増えませんでした。

ググってみると、ゲストイメージを圧縮する必要があるようです。 以下、 http://qiita.com/gogonosmarty/items/f13fd3f20c2fffd531d3 に書いてある通りやってみました。


環境

  • ホスト OS: Windows10 Home
  • VMware: VMware Player 6.0.7 build-2844087
  • ゲスト OS: Ubuntu 16.04.2 LTS

条件は以下の通りとのことです。

  • ゲストに VMware Tools がインストールされていること
  • ゲストが起動していること
  • スナップショットがあるとうまくいかないことがあるとのこと

disk コマンドのサブコマンドを確認

$ sudo vmware-toolbox-cmd help disk
disk: perform disk shrink operations
Usage: vmware-toolbox-cmd disk <subcommand> [args]

Subcommands:
   list: list available locations
   shrink <location>: wipes and shrinks a file system at the given location
   shrinkonly: shrinks all disks
   wipe <location>: wipes a file system at the given location
  • list サブコマンドで仮想ディスクファイルシステムを確認できるようです。
  • shrink サブコマンドで仮想ディスクファイルシステムを圧縮できるようです。
  • shrinkonly サブコマンドで全ての仮想ディスクファイルシステムを圧縮できるようです。

仮想ディスクファイルシステムを確認

$ sudo vmware-toolbox-cmd disk list
/

/ を圧縮

$ sudo vmware-toolbox-cmd disk shrink /