LS-VL: SSD壊れた...Debian stretch構築やり直し (未完あり)
GWに入ってWiFi動いてないなーと思っていたら、 LS-VLのSSDが壊れてました。
しかも3年(?)ぐらいバックアップがとれていません。
WiFiつながらないと色々困るので急いで復旧しました。
LS-VL7: LS-VL Debian Jessie管理: 2018年
LS-VL6: LS-VL 10 DHCP導入
LS-VL5: LS-VL 9 時間調整など設定を行う
LS-VL4: LS-VL 7-8: debian jessie標準kernelでUSB機器を使う
LS-VL3: LS-VL 6 debian jessie化
LS-VL2: LS-VL1.0G server(2台目)
LS-VL1: LS-VLの調整
SSD購入+stretchインストール |{{{1|
LS-VLはdebian入れるのは簡単です。PCに新品のSSDを接続して \ パーティションを設定するだけです:
$ parted mklabel mkpart primary ext3 0% 1G boot mkpart primary ext4 1G -1s root quit $ partprobe $ mkfs.ext3 /dev/sdb1 $ mkfs.ext4 /dev/sdb2
ネットワーク環境がなかったので古いルーターを \ 接続して我が家のinternet回線を復旧。
debian から持ってきた uImage 等を配置して準備は完了:
$ cp kernel.buffalo /run/media/shimoda/boot $ cp uImage.buffalo /run/media/shimoda/boot
LS-VLにSSDを接続してinstall開始。
userはinstaller、 passはinstall
パーティションが再初期化されたりしてpartedでやった作業は \ あまり意味はなかった気もした。
sshサーバを入れるのを忘れずに
トラブル1: sudoできない->shadowの生編集 |{{{1|
debianはデフォルトでsudo入らない。
rootのパスワードが、installerで設定したつもりだったが、 \ 設定されていなかった
root権限ないと作業が進まない
rootのパスワード再設定がCPU違うと難しい
shadowのパスワード欄を通常ユーザの文字列にして回避
rootのパスワードリセットはchrootの例がよく見られるが \ CPUが違うとchrootできないので、x86のhostではうまくいかなかった
トラブル2: 面倒でbr0に移行できない |{{{1|
install後はeth0で動かすことになりますが、 \ hostapdを使う関係でbr0に移行しないといけません。
iptablesでなんとかなるのかもしれませんが、 \ 良い前例が見つけられませんでした
しっかり設定しておけばbr0でも大丈夫ですが \ 移行には結構手間取りました。
今思うと、原因がよくわからないな...なんでだろ?
背面スイッチで電源が切れるようにした |{{{1|
br0がうまく設定できずに何回も電源を抜き差ししていると \ あんまりSSDに良くない気がしてきました。
sshで入れなかったとしても、安全に電源が切れるように \ 背面スイッチで電源を切るようにします
debian stretchでは、なぜかgpioのexportがいじれずに \ 通常の方法(/sys/class/gpio/gpio??/value)が使えませんでした。
ただ、 /sys/kernel/debug からは情報がとれたので常時監視することに
-
cronで定期的に実行:
* * * * * cat /sys/kernel/debug/gpio | /home/root/detect-switch.sh
-
下のようなスクリプトで結果を取得し、実行:
#! /opt/bin/python3.7 import os import sys in_fn = 0, " gpio-45" # active lo -> normal: hi in_pw = 1, " gpio-46" # active lo -> normal: hi in_at = 2, " gpio-47" # active lo -> normal: lo HI, LO = True, False def log(src): if len(sys.argv) > 2 and sys.argv[2] == "-d": print(src) return # os.system("/usr/bin/logger -p auth.crit " + src) os.system("/usr/bin/logger " + src) def invoke_shutdown(): log("system go to shutdown with btn") os.system("/sbin/shutdown -h now") def invoke_disable_networks(): log("disable networks with btn") os.system("/home/root/disable_networks.sh") def invoke_restart_wifi(): log("restart wifi with btn") os.system("/home/root/restart_wifi.sh") def main(argv): btns = [None, None, None] for l in sys.stdin: for n, st in [in_fn, in_pw, in_at]: if not l.startswith(st): continue if ") in hi (" in l: btns[n] = HI else: btns[n] = LO # log("button status: %s" % btns) if None in btns: return 1 if len(argv) > 1 and argv[1] == "-o": print("button status:,%s" % btns) return 0 if btns[1] == HI and btns[2] == HI: invoke_shutdown() elif btns == [LO, HI, LO]: # auto and function invoke_restart_wifi() elif btns == [LO, LO, HI]: # power-on and function pass elif btns == [HI, LO, HI]: # power-on invoke_disable_networks() return 0 if __name__ == "__main__": main(sys.argv[1:]) # vi: ft=python:fdm=marker:et:sw=4
トラブル3: WiFiアダプタが刺さる |{{{1|
SSDふっとんだので、前回の記録がない
8812AUのWiFiアダプタですが、とりあえず、version4系で使ってみる (本家)
-
kernel headerを追加でinstall+ビルド:
$ apt install linux-header-4.9.0.9-marvel
hostapdもうまく動く
なんかよく刺さる
version4は古くてメンテされてない模様
version5系を探してみる。Driverがどれがいいのか迷う (いっぱいforkされてる)
もう一度build
syslogがたくさんで過ぎるので、DEBUG=0でビルド -> コンパイルエラー
syslogがたくさんで過ぎるので、DEBUG=1でビルド
-
modprobe.d/でoption指定し、syslogの量を削減:
option 8812au ...
トラブル4: hostapdがうまく設定できない |{{{1|
これも、原因がよくわからない...なんでだろ?
なぜか、authが失敗し出す
再起動する -> 治ってる
トラブル5: udhcpdがうまく設定できない |{{{1|
br0がないと、udhcpdが立ち上がらない
systemctlでは、udhcpdがhostapdと優先順位が決まらない。udhcpdが先に起動する
systemctl disable udhpcdでsystemdから起動しないようにする
-
interfacesのpost.upで起動する:
post.up /etc/init.d/udhcpd start pre.down /etc/init.d/udhcpd stop
-
/etc/defaults/udhcpdは変更する:
a
-
init.d/udhcpdを変更する:
a
今思うと、/etc/defaults/udhcpdの変更は、不要かもしれない \ 動いてるから放置するけど
証明書をlet's encryptに変更 |{{{1|
セルフ証明書を発行してたけど、 \ ブラウザからの警告が面倒だし \ 無料のサービスが始まっていると知り、移行することに。
samba設定 |{{{1|
スマホからサーバが見えるようにsambaを導入。特になんてことはなかった
またiptablesの記述が足りなくて、ちょっと時間がかかった
logrotate設定 |{{{1|
cronが1分ごとに出力を出してしまうので調整
コメント
Comments powered by Disqus