本文を読み飛ばす

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分ごとに出力を出してしまうので調整

Docutils System Messages

コメント

Comments powered by Disqus
宣伝: