エントリー

カテゴリー「PC」の検索結果は以下のとおりです。

(本)サーバー異常(復旧後)

時空系状況

  • 先日2日の16時過ぎから(本)サーバーに異常が発生
  • 異常はBlogへのアクセスが遅延することから判り,ネットワーク障害でないことからサーバーへネットワーク経由でログインしようとしたが拒絶されたためサーバーの再起動を試みる
  • 再起動は虚しく失敗し(異常による再起動の繰り返し状態)ハードウェア障害の疑いが濃くなったためUPS電源断後HDDを取り外す
  • ArmbianシステムでUSB接続したHDDのバックアップを試みると,問題なくHDDアクセスができたため必要なデータの退避完了
  • HDDのrootファイルシステムがスーパーブロックを含め異常となっていたがfsckにて修復完了(データとしてのファイルシステムは問題なし,ただしDBはrootファイルシステムに位置する)
  • ログファイルを参照したところHDDインタフェースの問題のようなエラーがありHDDのRW異常は発生していないようだ
  • HDDを再接続し電源投入,起動を確認
  • Blog以外の問題はなしでBlogはDBのテーブル異常により表示不可能になっていた
  • 異常のあったテーブル(5個)はバックアップファイルからリストア
  • 概ね復旧(現在)

特記事項

  • 復旧のためArmbianサーバを利用したが最新であるDebian10でのMySQLのセットアップが簡単にできなかった(未対応や変更点が多い)
  • 最新のArmbian用のphpmyadminがない(面倒だがセットアップはできた)
  • DBテーブルのFrmエラーだったのでRAWファイルを変更して解決しようとしたが不可だった
  • 破壊されていた5個のテーブルがバックアップより更新が古かったおかげで復旧できた
  • 破壊されていたテーブルの実ファイルは念のためディスクのフリーリストに載らないよう削除しないで残している
  • freoがPHP7.3で動作不良
  • freoを1.21.0ベースに更新
  • 再発の可能性あり

NanoPi NEOサーバを復旧させる

優先すべきだが予定外の事態だったので後回しになってしまった

原因を探る

サーバからmicroSDカードを取り出してバックアップ機にセットしてコンソールで調査

IMG_20220116_132241.jpg

再起動しないのでネックは何かと思っていたら,microSDカードの異常というかRO(リードオンリー)ロックになっていた

コンソール出力ではrootファイルシステムのfsckで異常となり起動せずメンテナンスモードになっている

U-Boot SPL 2021.04-armbian (May 06 2021 - 17:50:40 +0000)
DRAM: 512 MiB
Trying to boot from MMC1



Starting kernel ...

Loading, please wait...
Starting version 241
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... Scanning for Btrfs filesystems
done.
Begin: Will now check root file system ... fsck from util-linux 2.33.1
[/sbin/fsck.ext4 (1) -- /dev/mmcblk0p1] fsck.ext4 -a -C0 /dev/mmcblk0p1
fsck.ext4: Read-only file system while trying to open /dev/mmcblk0p1
Disk write-protected; use the -n option to do a read-only
check of the device.
fsck exited with status code 8
done.
Warning: File system check failed but did not detect errors
mount: Read-only file system
Failed to mount /dev/mmcblk0p1 as root file system.
(initramfs)

手動でrootファイルシステムをチェックしたところROのため書込みできない事態となっている

(initramfs) fsck.ext4 -n /dev/mmcblk0p1
e2fsck 1.44.5 (15-Dec-2018)
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/mmcblk0p1: clean, 46517/2789280 files, 740918/7666688 blocks
(initramfs)

この現象は前にもあって原因はメディアが強制的に(ROにして)書込みできないよう処理していることで起こると思われ「メディア自体の異常」の要因もあるが,ほぼ間違いなく「メディアの書込み壽命」だと考える

実際は本当の壽命ということでフラッシュメモリ自体の書込みエラーで発生させているのではなく,書込み回数の上限を決めておいて超えたら記録内容を保護するためROにしているのだろうと考える

つまり,まだ読むことは可能ということである(実際に全部読める)

利用していたmicroSDは以下の「KLEVV NEO」という安価なメモリで,9月から4~5箇月とうことなので約150日間となる

IMG_20220116_133551.jpg

microSDには書込み回数があるのでいつかはエラーになると考えていたが32GBもあり僅かなログの書込みだけなのであまりにも短すぎる

MLCフラッシュは約1万回の書込みが可能であることが(かなり以前に)公表されている(今だともっと回数が増えてるかも)

論理的には書込み回数が1万回として32GBなら,32GB×10000=320000GB(320TB)の(ワンタイム)記録ができるということになる(実際は書込み単位があるので少なくなる)

これを150(日)で割ると,320000GB÷150=2133GBとなり毎日約2TBもの書込みがあったことになるが・・・

→ 連続でも書込みは最低10MB/s,最大は良くても100MB/s位として,100(MB)×3600(s)×24(H)=8640000(MB)=8640(GB)

かなり譲って1/100の,20GB/日としても(ほとんどがログになるので)考えられない書込み量である

このあたりの書込み量も予想試算して1年以上余裕で持つだろうと考えていたので想定外であった

前回も「KLEVV NEO」のmicroSDで発生しており,この時は書き込むことは起きていないのにROになってしまった(マイクロSDカードが壊れた

今回の件も含め,このメーカーのmicroSDはもう使用しないほうが賢明だろう(メディアは永久保証となっているけど交換しても使えない物はいらない)

最初の復旧手順

microSDへの書込みはできないが読むことはできるので別のmicroSDへデットコピーして復旧させる

新しいmicroSDは「Gigastone」にした

IMG_20220116_142334.jpg

ところが,コピーの段階で2つのmicroSDの(セクター)サイズが異なることが判明(これには驚いたが)

「KLEVV NEO」の方が「Gigastone」よりセクター数が多いのである

逆なら問題ないのだが,しかたないので無視してデットコピーした・・・けど・・・やはり途中で起動停止

(initramfs) fsck.ext4 /dev/mmcblk0p1
e2fsck 1.44.5 (15-Dec-2018)
The filesystem size (according to the superblock) is 7666688 blocks
The physical size of the device is 7632640 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>? yes
(initramfs)

34048 blocksも食い違っていてfsckは(ファイルシステムが破壊されていると判断して)動作しなかった

残念ながらデットコピーでの復旧は失敗に終わる

さて,どうやってNanoPi NEOサーバを復旧させるかだが,時間待ちもあったこともあり再構築とコピー復活の2つの手段を実施

システムの再構築(手段1)

前回のOSバージョンも置いていたが,新しいのがリリースされていたので新しい方で再構築する(要するに全部作り直し)

最新OSイメージ: Armbian_21.08.1_Nanopineo_bullseye_current_5.10.60.img

ネックは設定のバックアップで本当の最新の設定へ戻せるかである(なのでメディアから設定データを取り出し検証する必要がある → これが復活手順にもなる)

IMG_20220116_142320.jpg

設定は(NanoPi NEOのサーバ化(ソフトウェア))で記録されている通りで不足や注意事項を追加

・armbianの最初の起動(root/1234)時にsudo権限の管理者用のユーザ追加を行うが,このユーザのuidが1000になる

・既にセットアップされているパッケージがあった(問題になる事はない)

・NTPは前回の設定方法では動作しない(現在,未解決)

・bindについては記録の記事から変更がある(バックアップの利用で問題なし)

・dhcpが起動しない問題で以下のように(ターミナルではカラム落ちして)表示される(前回もあったが記録されていないので注意)

● isc-dhcp-server.service - LSB: DHCP server
Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
Active: failed (Result: exit-code) since Sun 2022-01-16 19:53:43 JST; 48s ago
Docs: man:systemd-sysv-generator(8)
Process: 8928 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=1/FAILURE)
Tasks: 12 (limit: 905)
Memory: 8.5M
CPU: 406ms
CGroup: /system.slice/isc-dhcp-server.service
tq7964 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf
tq8339 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf
mq8943 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf

1月 16 19:53:41 nanopineo dhcpd[8955]: exiting.
1月 16 19:53:43 nanopineo isc-dhcp-server[8928]: Starting ISC DHCPv6 server: dhcpd6check syslog for diagnostics. ...
1月 16 19:53:43 nanopineo isc-dhcp-server[8960]: failed!
1月 16 19:53:43 nanopineo isc-dhcp-server[8961]: failed!
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Control process exited, code=exited, status=1/FAILURE
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Failed with result 'exit-code'.
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Unit process 7964 (dhcpd) remains running after unit stopped.
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Unit process 8339 (dhcpd) remains running after unit stopped.
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Unit process 8943 (dhcpd) remains running after unit stopped.
1月 16 19:53:43 nanopineo systemd[1]: Failed to start LSB: DHCP server.

 これは「/etc/default/isc-dhcp-server」を修正する前にdhcp serverを起動すると「/var/run/dhcpd.pid」が残存してserverが再起動しないためで,正常にserverが起動しない場合にロックファイルを削除しないバグがあると思われる

パーティーションコピーで復旧(手段2)

resize2fsを使えばファイスシステムのサイズを変えられるので旧microSDからシステム部分だけ取り出してサイズを変更して新microSDへ書き込めば復旧できる

この場合,元のOSイメージでの復旧なので設定した情報は最新,さらに設定内容を参照したりバックアップすることができる

ただし別途microSDを操作するためのlinuxシステムが必要となる(エミュで遊ぶため構築していたUbuntuDesktopを利用した)

今回は1つのパーティションなので手間が掛からなかった

①Ubuntuで旧microSDを接続してデバイス名を確認(/dev/sdc)

※デバイス名の確認方法として,接続前に「fdisk -l」でデバイスリストを表示させて,接続後に再度リストに増えたデバイスが対象

パーティションを確認すると1つだけある

# fdisk -l /dev/sdc
ディスク /dev/sdc: 29.6 GiB, 31724666880 バイト, 61962240 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc236f75e

デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/sdc1 8192 61341695 61333504 29.3G 83 Linux
#

②/dev/sdc1をコピーする

# dd if=/dev/sdc1 of=disk.img bs=1G

# ls -l
-rw-r--r-- 1 root root 31402754048 1月 16 17:45 disk.img
#

③fsckで修正

# e2fsck -f disk.img

④ファイルシステムをリサイズ(8GBとした)

# resize2fs disk.img 8G
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on disk.img to 2097152 (4k) blocks.
The filesystem on disk.img is now 2097152 (4k) blocks long.
# ls -l
-rw-r--r-- 1 root root 8589934592 1月 16 20:00 disk.img
#

disk.imgはファイルシステムなのでmountして中身を参照することができる(必要ならファイルをバックアップする)

# mount disk.img /mnt
# ls -l /mnt
合計 80
lrwxrwxrwx 1 root root 7 5月 6 2021 bin -> usr/bin
drwxr-xr-x 4 root root 4096 9月 5 20:28 boot
drwxr-xr-x 2 root root 4096 5月 8 2021 dev
drwxr-xr-x 96 root root 4096 9月 27 17:53 etc
drwxr-xr-x 13 root root 4096 6月 26 2021 home
lrwxrwxrwx 1 root root 7 5月 6 2021 lib -> usr/lib
drwx------ 2 root root 16384 5月 8 2021 lost+found
drwxr-xr-x 2 root root 4096 5月 6 2021 media
drwxr-xr-x 2 root root 4096 5月 6 2021 mnt
drwxr-xr-x 2 root root 4096 5月 6 2021 opt
drwxr-xr-x 2 root root 4096 3月 20 2021 proc
drwx------ 5 root root 4096 9月 7 20:43 root
drwxr-xr-x 3 root root 4096 5月 8 2021 run
lrwxrwxrwx 1 root root 8 5月 6 2021 sbin -> usr/sbin
drwxrwxr-x 2 root root 4096 5月 8 2021 selinux
drwxr-xr-x 3 root root 4096 8月 29 15:27 srv
drwxr-xr-x 2 root root 4096 3月 20 2021 sys
drwxrwxrwt 2 root root 4096 5月 8 2021 tmp
drwxr-xr-x 10 root root 4096 5月 6 2021 usr
drwxr-xr-x 12 root root 4096 8月 28 19:53 var
#

⑤新microSDを起動できるようにする(IPLを書き込むとかBoot strapできるようにするという)

IPLのみ書き込む方法があるのだけど思い出せなかったので(DLして初期に書き込む)OSイメージを書き込む

何で書き込んでも良いが,Windows10で利用している「Win32DiskImager」を使った

WS_20220116_01.png

⑥Ubuntuで新microSDを接続してパーティションを操作する

パーティション1を削除して新規に8Gでパーティション1を作成(つまりパーティーションサイズを変更)

# fdisk /dev/sdc

fdisk (util-linux 2.31.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。


コマンド (m でヘルプ): p
ディスク /dev/sdc: 29.1 GiB, 31267487744 バイト, 61069312 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc236f75e

デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/sdc1 8192 2744319 2736128 1.3G 83 Linux

コマンド (m でヘルプ): d
パーティション 1 を選択
パーティション 1 を削除しました。

コマンド (m でヘルプ): n
パーティションタイプ
p 基本パーティション (0 プライマリ, 0 拡張, 4 空き)
e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
最初のセクタ (2048-61069311, 既定値 2048): 2048
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-61069311, 既定値 61069311): +8G

新しいパーティション 1 をタイプ Linux、サイズ 8 GiB で作成しました。

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

#

⑦リサイズしたファイルシステムを書き込む

# disk.img of=/dev/sdc1 bs=64M
128+0 レコード入力
128+0 レコード出力
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 549.08 s, 15.6 MB/s
#

⑧起動確認

U-Boot SPL 2021.04-armbian (May 06 2021 - 17:50:40 +0000)
DRAM: 512 MiB
Trying to boot from MMC1



Starting kernel ...

Loading, please wait...
Starting version 241
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... Scanning for Btrfs filesystems
done.
Begin: Will now check root file system ... fsck from util-linux 2.33.1
[/sbin/fsck.ext4 (1) -- /dev/mmcblk0p1] fsck.ext4 -a -C0 /dev/mmcblk0p1
/dev/mmcblk0p1: clean, 46546/762880 files, 611829/2097152 blocks
done.
done.
Begin: Running /scripts/local-bottom ... done.
Begin: Running /scripts/init-bottom ... done.

Welcome to Armbian 21.08.1 Buster!



[ OK ] Started Authorization Manager.
[FAILED] Failed to start LSB: DHCP server.
See 'systemctl status isc-dhcp-server.service' for details.
[ OK ] Started LSB: RPi-Monitor daemon.
[ OK ] Reached target Multi-User System.
[ OK ] Reached target Graphical Interface.
Starting Update UTMP about System Runlevel Changes...
[ OK ] Started Update UTMP about System Runlevel Changes.

Armbian 21.08.1 Buster ttyS0

nanopi login:

(※)ネットワークに接続していないのでDHCPがエラーとなっている

復旧

結果,新しいOSバージョンで運用したかったので手段1で復旧させている

バックアップ用に手段2のmicroSDは保管

20年前のMO

2000年以前のデジカメのデータがバックアップされていたディスクから紛失しており以前から探していた

ほとんど諦めていたが,もしかするとスマートメディア(DS-10の格納媒体)に残っているかもしれないと保管していた箱を見てみると写真をバックアップしたMOが見つかった

IMG_20211030_153044.jpg

そういえばこの頃はMO(230MB)にバックアップしていたのだった

その後MOでは容量不足になったためカートリッジ化したHDD(IDE時)に変更してバックアップ,HDDがSATAになって1TBを超えたあたりからUSB3接続の外付けディスクに(現在に至る)バックアップしている

早速,前々から確保していたUSBのMOドライブ(BUFFALO MO-C640U2)で読み込みしてみる

IMG_20211030_152657.jpg

MOの媒体は100年持つとバックアップに最適の媒体と言われていたので心配はしていなかったがドライブの方が長年動作させていなかったので心配・・・だったが読めた!

WS_20211030_01.png

中からGatewayやSONYの初期ノート,Print-itの画像が残っていた

DSC00014.JPGDSC00027.JPGDSC00031.JPG

新しいバックアップメディアへ移行させて完了

MOもこのままバックアップメディアとして確保しておく

(旧MOドライブ)

昔,利用していたMOドライブは破棄しないで置いてある

IMG_20211030_152840.jpg

MOの出始めで230MBのドライブ,TOWTOPで購入したバルクで50K程したと記憶している

IMG_20211030_152908.jpg

I/FはSCSI,PCIのSCSIボードもどこかに置いてあるはずだが動作するかどうかは不明

IMG_20211030_152850.jpg

1995年製,時代の進歩を感じる

後のギガクラスでは改善されているが,230MB時のMOは書込み時間が酷く遅かった(MOはデータ書き換え時に磁力の方向を整列する必要があるため書込みに最低3回転必要だった)

FDより遅かったじゃないのかなw

NanoPi NEOのサーバ化(ソフトウェア)

分散移行したいサーバのセットアップを実施して1W問題なく稼働した

WS20210904_001.png

更に追加もあるが,まずは移行を完了とする

セットアップ内容は以下に記録(色付きは追記分

NTP

先ずは,RTC(DS1307)を使えるようにする(こちらを参考)

# vi /boot/armbianEnv.txt

overlays=usbhost1 usbhost2 i2c0
                           ^^^^ ← 追加
# shutdown -r now

(再起動)

# apt install i2c-tools  #i2c-toolsをインストール

# i2cdetect -y 0
     0 1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

# lsmod | grep rtc
Noting

# modprobe -c | grep ds1307

# modprobe i2c:ds1307

# lsmod | grep rtc
Noting

# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
# lsmod | grep rtc
rtc_ds1307 28672 0

# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

# ls -l /dev/rtc*
lrwxrwxrwx 1 root root 4 Aug 22 20:46 /dev/rtc -> rtc0
crw------- 1 root root 253, 0 Aug 22 20:46 /dev/rtc0
crw------- 1 root root 253, 1 Aug 22 20:58 /dev/rtc1
# hwclock -r -f /dev/rtc1    #確認

/etc/rc.local に以下を追加

/usr/sbin/modprobe i2c:ds1307
echo 'ds1307 0x68' > /sys/class/i2c-adapter/i2c-0/new_device
ln -f -s /dev/rtc1 /dev/rtc
/usr/sbin/hwclock -s

NTP の設定状況

# timedatectl status
Local time: Mon 2021-08-23 21:08:11 JST
Universal time: Mon 2021-08-23 12:08:11 UTC
RTC time: Mon 2021-08-23 12:08:24
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no

NTPを有効化する

# timedatectl set-ntp true

/etc/systemd/timesyncd.confを編集

[Time]
NTP=ntp.nict.jp → https://jjy.nict.go.jp/tsp/PubNtp/index.html
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp

時刻同期デーモンの起動

# systemctl start systemd-timesyncd

時刻同期デーモン自動起動の設定

# systemctl enable systemd-timesyncd
# systemctl is-enabled systemd-timesyncd
RPi-Monitor

ラズパイ用のシステムモニターだが使えるようになっている

CUI

# armbianmonitor -m

GUI

# armbianmonitor -r
Installing RPi-Monitor. This can take up to 5 minutes. Be patient please

...

Now patching RPi-Monitor to deal correctly with H3

Now you're able to enjoy RPi-Monitor at http://192.168.xxx.xxx:8888

注)192.168.xxx.xxx:8888でないと参照できないようだ(IPアドレスが埋め込まれているかと)

常時起動するよう /etc/rc.local に以下を追加

/usr/bin/armbianmonitor -r > /dev/null 2>&1&

モニター表示例)CPU温度表示(2日間)

WS20210904_003.png

 

swap

実装メモリが512MBなので1GB程度のswapを設定する

ストレージがマイクロSDなのでswapパーティーションにする有効性もないためファイルにした

$ free
total used free shared buff/cache available
Mem: 503488 87696 10644 5468 405148 398600
Swap: 251740 0 251740

1GBのファイルを作成

$ sudo dd if=/dev/zero of=/var/swapfile bs=1024 count=1M
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 69.2829 s, 15.5 MB/s

パーミッションを変更

$ sudo chmod 0600 /var/swapfile

mkswapでswapファイルシステムを作成

$ sudo mkswap /var/swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=a4c1207b-65f4-42f3-be63-ea8955257f30

swaponでswap有効化

$ sudo swapon /var/swapfile
$ free
total used free shared buff/cache available
Mem: 503488 88560 9084 5468 405844 397732
Swap: 1300312 0 1300312

/etc/fstabの編集(設定を追加)

$ cat /etc/fstab
UUID=295de8c4-f8a3-40d3-9116-f2318feeed87 / ext4 defaults,noatime,commit=600,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
$ echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

※)エディタで編集の方が良い

$ cat /etc/fstab
UUID=295de8c4-f8a3-40d3-9116-f2318feeed87 / ext4 defaults,noatime,commit=600,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
/var/swapfile swap swap defaults 0 0
$
ネットワークインタフェース

現時点での最新のBuster(Armbian_21.05.1_Nanopineo2_buster_current_5.10.34.img を使用)ではMAC addressが可変になっており再起動ごとに変化する

なので,IP  addressは固定にする

# armbian-config
static で IP:192.168.xxx.xxx を設定

尚,MAC addressを固定にする安易な方法は,/etc/network/interfaces に以下を追加する

hwaddress ether aa:bb:cc:dd:ee:ff

(追記)

armbian-configで設定してもIPアドレスが固定にならないことがあった(カーネル更新で発生)

/etc/network/interfaces に追記(以下が記述可能)すれば良いようだ

auto eth0
allow-hotplug eth0
iface eth0 inet static
address <IPアドレス>
netmask 255.255.255.0
gateway <ゲートウェイアドレス>
dns-nameservers <DNSアドレス>

interfacesの編集でも不可の場合nmtuiで設定する方法もある

$ sudo nmtui
bind

本機をプライマリDNSとして稼働させる

WAN-IPアドレスはダイナミックなので内部のみ設定する(外部向けは定義できない)

bind9の導入

# apt install bind9 dnsutils ← dig コマンド用

設定ファイル(/etc/bind/named.conf)の編集

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local"; #編集(ファイル名は変更しても良い)
include "/etc/bind/named.conf.default-zones";

オプション設定ファイル(/etc/bind/named.conf.options)

options {
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk. See http://www.kb.cert.org/vuls/id/800113

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0's placeholder.

    // forwarders {
    // 0.0.0.0;
    // };

    //========================================================================
    // If BIND logs error messages about the root key being expired,
    // you will need to update your keys. See https://www.isc.org/bind-keys
    //========================================================================
    //BINDの利用を許す範囲
    allow-query { localhost; localnets; };

    //スレーブDNSのアドレス(内向きDNSの場合は必要ない)
    allow-transfer { none; };

    //再帰検索を許可する範囲
    allow-recursion { localhost; localnets; };

    dnssec-validation auto;

    auth-nxdomain no; # conform to RFC1035

    //listen-on-v6 { none; };
    listen-on-v6 { any; };

    //名前解決できないときにモデムに聞きに行く場合は以下
    //forwarders { 192.168.xxx.1; };
    //名前解決できないときはgoogleのDNSを使う
    forwarders { 8.8.8.8; 8.8.4.4; };

    version "unknown";
};

# EDNS0 の無効化
# "error (unexpected RCODE REFUSED) ..." 出力の抑止
    server 0.0.0.0 {
    edns no;
};

# "DNS format error ... invalid response" 出力の抑止
    logging {
    category resolver { null; };
};

内部向けゾーンファイル(/etc/bind/named.conf.local)

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

#正引きゾーン定義
zone "inoshita.jp" {
    type master;
    file "/etc/bind/inoshita.jp.lan";
    allow-update { none; };
};

#逆引きゾーン定義
zone "xxx.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/xxx.168.192.db";
    allow-update { none; };
};

正引きゾーン定義ファイル(/etc/bind/inoshita.jp.lan)

$TTL 86400
@       IN      SOA ns1.inoshita.jp. root.inoshita.jp. (
                2021082801    ; Serial
                     10800    ; Refresh
                      1800    ; Retry
                    604800    ; Expire
                     86400    ; Negative Cache TTL
)
        IN      NS     ns1.inoshita.jp.
        IN      MX 10 mail.inoshita.jp.
router  IN      A 192.168.xxx.1
nanopi  IN      A 193.168.xxx.xxx
Cubian  IN      A 192.168.xxx.xxx
ns1     IN A 192.168.xxx.xxx
mail IN A 192.168.xxx.xxx
home    IN CNAME nanopi
www     IN CNAME Cubian

逆引きゾーン定義ファイル(/etc/bind/xxx.168.192.db)

$TTL 86400
@ IN SOA ns1.inoshita.jp. root.inoshita.jp. (
2009110101 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ; Negative Cache TTL
)
IN NS ns1.inoshita.jp.
IN A 255.255.255.0
1 IN PTR router.inoshita.jp.
XXX IN PTR home.inoshita.jp.
XXX IN PTR nanopi.inoshita.jp.
XXX IN PTR ns1.inoshita.jp.
XXX IN PTR www.inoshita.jp.
XXX IN PTR mail.inoshita.jp.

/etc/resolv.conf を編集(起動時に更新されることに注意

nameserver 192.168.xxx.xxx ← 自身のIPにする

サーバ制御

# systemctl restart bind9
# systemctl status bind9.service

# service bind9 restart(旧)
DHCP

DHCPは isc-dhcp-server を導入する

# apt install isc-dhcp-server

/etc/dhcp/dhcpd.confを編集

#
# Sample configuration file for ISC dhcpd for Debian
#
#

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# option definitions common to all supported networks...
option domain-name "inoshita.jp";
option domain-name-servers 192.168.xxx.xxx, 192.168.xxx.xxx;

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

...
#ネットワークアドレスとサブネットマスク指定
subnet 192.168.xxx.0 netmask 255.255.255.0 {
    #デフォルトゲートウェイ指定
    option routers 192.168.xxx.1;
    #サブネットマスク指定
    option subnet-mask 255.255.255.0;
    #貸し出すIPアドレスの範囲指定
    range dynamic-bootp 192.168.xxx.xxx 192.168.xxx.xxx;
}

#固定IP
host WG1200HS {
    hardware ethernet aa:bb:cc:dd:ee:ff;
    fixed-address 192.168.xxx.xxx;
}

/etc/default/isc-dhcp-serverを編集

# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth0"
#INTERFACESv6=""

サーバ制御

# systemctl start isc-dhcp-server
# systemctl status isc-dhcp-server.service
# systemctl enable isc-dhcp-server
ddclient

ddclientはMyDNS未対応なので,今回から以下のシェルスクリプト(mydns.sh)に変更

#!/bin/sh
#
MYDNS_USER='userid'
MYDNS_PASSWORD='password'
#
/usr/bin/wget -O - http://${MYDNS_USER}:${MYDNS_PASSWORD}@ipv4.mydns.jp/login.html
/usr/bin/wget -O - http://${MYDNS_USER}:${MYDNS_PASSWORD}@ipv6.mydns.jp/login.html

exit 0

mydns.shをcron(rooth権限)で実行させる(以下は毎日4時に実行)

# crontab -l

0 4 * * * /usr/local/sbin/mydns.sh > /dev/null 2>&1

注)登録する際は crontab -e

nfs-client

ファイル共有化のため設定

nfsクライアントの導入

# apt install nfs-client

手動でnfsマウント(常時マウントなら/etc/fstabへ追加)

# mount -t nfs Cubian.inoshita.jp:/srv/share /srv/share

マウントを auto 化するためにautofsを導入

# apt install autofs

/etc/auto.masterへ追加

# vi /etc/auto.master

/- /etc/auto.nfs ← 追加行(ファイル名は変更可)

/etc/auto.nfsへマウントディレクトリを記載

# vi /etc/auto.nfs

/srv/share -fstype=nfs,rw Cubian.inoshita.jp:/srv/share

サーバ制御

# systemctl restart autofs
残件

残り,NTPのサーバ化(現在はNTPクライアント),Mailサーバ,UPS対応の設定を予定

ページ移動

ユーティリティ

検索

エントリー検索フォーム
キーワード

過去ログ

Feed