ホーム » コンピュータ » Linux » Debian (ページ 10)

Debian」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

stretchで起動しづらい

自宅で色々と動いている Raspberry-Pi 。OS更新はまめにやっているけど、外気温測定に使っているのが Jessie のままだったのに気づく。stretch に上げたけど、どうも起動に失敗する。更新に失敗したかと思ったけど、キーボードをつなぐために USB WiFi を抜いて起動すると、普通に動いている。

今までも、多少 boot が不安定なのはあったけど、stretch になって起動シーケンスが最適化されたのか、WiFi 有効化のタイミングが早まり、ブート時の電力不足が発生していると思われる。

ひとまず、改造面倒だし USB WiFi を抜いて、boot がそれなりに進んでから USB を指して対応。

アマチュア無線: aprx を動かしてみた

知り合いより譲り受けた、TH-D72を活用したいということで、APRS の iGate 局を動かしてみた。

我が家は、ロケーション的に福井市にあるリピータにも、ハンディ機では接続できず、無線機の位置情報などをインターネットに伝えることができる APRS や、インターネットを経由した通話ができる D-STAR などを、あまり活用することが難しい。

aprx を動かす

そこで、TH-D72 を APRS の iGate 局として動かすために、aprx をインストール。

以下のように設定したけど、まずい所がないか要チェックだな。ひとまず、データ流しまくりでaprsインターネット側には、迷惑をかけていないはず。ハンディ機なので、どのあたりまで電波が飛んでいるのか、チェックしてみよう。

$ sudo aptitude install aprx
$ sudo vi /etc/aprx.conf
$ sudo systemctl enable aprx.service
$ sudo systemctl start aprx.service
# /etc/aprx.conf
mycall JR9PVZ-10
myloc  lat 3553.48N lon 13613.33E
<aprsis>
   passcode 22202
   server   rotate.aprs2.net
</aprsis>
<logging>
   pidfile /var/run/aprx.pid
   rflog   /var/log/aprx/aprx-rf.log
   aprxlog /var/log/aprx/aprx.log
   dprslog /var/log/aprx/dprs.log
</logging>
<interface>
   serial-device /dev/ttyUSB1 9600 8n1 KISS
   initstring  "HBAUD 9600\x0dKISS ON\x0dRESTART\x0d"
   alias       RELAY,WIDE,TRACE
   callsign    $mycall # callsign defaults to $mycall
   tx-ok       true # transmitter enable defaults to false
   telem-to-is false # set to 'false' to disable
</interface>
<beacon>
   beaconmode both
   cycle-size 60m
   beacon     symbol "I#" $myloc comment "Tx-iGate + Digipeater"
</beacon>
<digipeater>
   transmitter $mycall
   <source>
      source   $mycall
   </source>
</digipeater>

TH-D72の設定

[TNC]-[TNC] KISSモード
[メニュー]-310 データバンド A-BAND
[メニュー]-311 パケットスピード 9600 bps
無線周波数 144.640 MHz

Postieでimap-ssl接続に失敗

職場のサーバでWordPressを動かす中、簡単な画像付きメールでのポストをするために、plugin の Postie を使っている。

状況確認

当初は、imap-ssl で動かしていたのだが、接続に失敗するようになった。

Postie (v 1.9.32)
getemails: There was an error connecting to the server 

メールサーバが、自宅メールサーバなので、FireWall 関連の設定のミスが考えられたが、nagios-plugins を入れて実験すると、以下のような結果なので、接続はできている。

$ /usr/lib/nagios/plugins/check_imap -p 993 -H xxxx -S
IMAP OK - 0.146 second response time on xxxx port 993 [* OK
  [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE
  IDLE LITERAL+ AUTH=PLAIN] Dovecot (Debian) ready.]
  |time=0.145649s;;;0.000000;10.000000

問題点

原因を確認ということで、syslog を確認すると、以下のように SSL のハンドシェークでエラーが出ている。

Mar 24 00:50:39 xxxx dovecot: imap-login: Disconnected
  (no auth attempts in 0 secs): user=<>, rip=xx.xx.xx.xx,
  lip=192.168.xx.xx, TLS handshaking: SSL_accept() failed:
  error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert
  unknown ca: SSL alert number 48, session=<xxxxxx>

暫定の解決法

しかたがないので、dovecot の ssl の設定を変更、TLSv1.2 になっていた部分を TLSv1 に修正

(( /etc/dovecot/conf.d/10-ssl.conf ))
- ssl_min_protocol = TLSv1.2
+ ssl_min_protocol = TLSv1

”TLS 1.0にはBEASTやPOODLEといった脆弱性があり、一定の条件下であれば暗号解読が可能であると言われています。”で、2018年6月30日以降は、TLSv1.0 は通常用途では勧められないとのことなので、多少心配ではあるけど…。

通常使っているメールソフトは、TLSv1.0 を使わないだろうし、実質このPostieだけの利用だろうし。

he.net を使った IPv6 トンネル

IPv6 の導入の実験として、IPv6トンネルを無料で利用できる he.net を使って設定してみた。

現在、自宅サーバ自体を IPv6 対応することはできたけど、サーバ配下のパソコンもこのトンネルを使うようにできていないので、まだ目標の半分。

he.netへの登録

Hurricane Electric(he.net)の接続方法を紹介しているサイトの記事を見ながら、he.net に利用者登録をして、トンネルの割り当てを受ける。

トンネル起動の設定

he.netのサイトで、上記の登録が終わると、”Example of Configuration”のタブで、OSを選べば、接続するための設定ファイルのサンプルが表示される。

ただ、Debian/Ubuntu を選ぶと、/etc/network/interfaces 用の設定が示された。自宅サーバは systemd を使っているので、このままでは使えない。ほかのサイトで調べて、最終的に以下に落ち着いた。

(( /etc/systemd/system/he-ipv6.service ))
[Unit]
Description=he.net IPv6 tunnel
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/ip tunnel add he-ipv6 mode sit remote 74.82.xx.xx local 192.168.yy.yy ttl 255
ExecStart=/bin/ip link set he-ipv6 up mtu 1480
ExecStartPost=/bin/sleep 0.3 ; /bin/ip -6 route add ::/0 dev he-ipv6
Execstop=-/bin/ip -6 route del ::/0 dev he-ipv6
ExecStop=/bin/ip link set he-ipv6 down
ExecStop=/bin/ip tunnel del he-ipv6

[Install]
WantedBy=multi-user.target

systemd の サービス として設定するために、he-ipv6.service ファイルを作成する。

systemd ではサービスの処理を起動/停止するためのコマンドは、ExecStart / ExecStop に記載する。

“ip tunnel add” の remote 欄は、割り当てられたhe.net のIPアドレス、localには自分のグローバルアドレスを指定する。ただし、自宅サイトはルータ内にサーバがあるので、ポートフォワードされたプライベートのアドレスを指定する。

トンネル開通後のIPv6のデフォルトゲートウェイを設定する “ip -6 route add” の実行は、少し間を置かないと失敗するようなので、若干の sleep を挟んだ。ExecStart 行は、通常1行1コマンドしか使えないが、ExecStartPost は、複数コマンドが書けるので、こういう時には便利。

ExecStop でのデフォルトゲートウェイ削除の処理 “ip -6 route del ::/0″では、前述のsleepが無い場合、エラーが出ることがあるので、コマンドの先頭に”-“をつけエラーで止まらないようにしておいた。

# サービスの登録
$ sudo systemctl enable he-ipv6.service
# サービスの起動
$ sudo systemctl start he-ipv6.service
# サービスの停止
$ sudo systemctl stop he-ipv6.service

ただし、後にも述べるように常時 IPv6 化は現状では問題があるので、systemctl enable は行わないでおく。

RAの設定(ルーティング広告)

ルータ周りの他のパソコンがグローバルなIPv6アドレスが割り当てられるように、RAの設定を行う。実は、リンクローカル”fe80::”での自宅内IPv6ネットワークの運用では、グローバルIPv6が無いので RA が不要だけど、IPv6の DNS をアナウンスが必要なので、今までは DHCPv6 を使っていた。でも、radvd.conf の設定を調べると、アナウンスするプレフィックス設定の欄を “prefix ::/64” と記載すれば、”fe80::”のリンクローカルはアナウンスされないようなので、radvd に変更。”RDNSS”の欄で、自宅内 IPv6 対応なDNSサーバを指定することで、IPv6経由で名前解決をできるようにしておく。

interface eth0
{
   AdvSendAdvert on;
   AdvManagedFlag on;
   AdvOtherConfigFlag on;
   
   # 非リンクローカルなアドレスだけアナウンス
   prefix ::/64
   {
      AdvOnLink on;
      AdvAutonomous on;
      AdvRouterAddr on;
   };

   # DNSは、リンクローカルなDNSサーバをアナウンス
   RDNSS fe80::xxxx:xxxx:xxxx:xxxx
   {
      AdvRDNSSLifetime 30;
   };
   DNSSL example.jp {
      AdvDNSSLLifetime 30;
   };
};

この段階で、IPv6 のファイアウォールの設定(ferm)の設定が間違っているのが判明したので、別途修正。

常時IPv6対外接続は問題あり

よく、IPv6 を使うとネット通信速度が速くなると言われているけど、現時点では IPv6 利用者が少ないので、上流が詰まらないだけ。今回のような、IPv4 を使ったIPv6トンネリングでは、IPv4 以上には速くなるはずもないし、IPv6 も無料でサービスを提供している he.net では、上流の輻輳もあるだろうし高速通信も期待できない。

このため、上記の IPv6 接続は単なる自分の勉強用で、必要な時だけ”systemctl start he-ipv6.service”でトンネル接続させる予定。。当面、常時 IPv6 運用はしないだろう。

emacsをsystemdで起動

Linux で OneDrive のクライアントを systemd で起動する方法を知って、”systemctl –user” でできることを調べてみたら、emacs server も systemd で使えるような設定がデフォルトで入ってた。

emacs server

emacs server とは、emacs を常に使いまくるような人向けに、emacs をサーバで起動しておき、emacsclient から起動させる機能。
emacsclient は、端末画面を割り当てるだけなので、emacs のプロセスを1つにできる。

(( emacs server 起動))
$ emacs --daemon
(( emacs を使う ))
$ emacsclient -nw               # emacsエディタの起動
$ emacsclient -e "(kill-emacs)" # 起動したemacs serverを止める

systemd で起動

最近は、”/usr/lib/systemd/user/emacs.service” が書いてあるから、以下のコマンドで簡単にemacsサーバを起動できる。

$ systemctl --user enable emacs  # emacs起動を登録しておく
$ systemctl --user start emacs   # emacs serverを起動

とはいえ、最近は emacs でなんでもする訳でもないし、サーバに無駄な常駐させたくないから、しないけど。

linuxでOneDriveを使う

macOS用のonedriveアプリも更新され、オンデマンド機能が便利。以前は、使わないファイルの同期を外したり、利用頻度の低いファイルのパソコン側のディスク容量圧迫の心配がなくなった。

利便性が上がったし、linux 環境でも改めて使いたくなってきた。以前は、onedrive-d というソフトがあったけど、同じように開発されていた、onedrive の完成度があがってる。

linux用のonedriveを使ってみる。

OneDriveのインストール

$ sudo aptitude install onedrive

認証設定

最初の認証設定を行う。以前のバージョンで設定が残っているようなら、”rm -rf ~/.config/onedrive/” で消せばいい。

$ onedrive
Authorize this app visiting: ...URL...
このURLをブラウザでアクセスし、OneDriveの認証を行う。
この後、真っ白なページが表示されるので、
このページのURLをコピーする。

Enter the response uri: ここにURLをペースト

これで、使える状態になり同期が始まるけど、OneDrive をサービスで起動させたままにしたいので、ひとまず Ctrl-C で停止させる。

常駐起動させる

新しいバージョンでは、通常ユーザ状態での systemctl 起動に対応しているので、以下のコマンドで、自動起動の登録、および起動を行う。

$ systemctl --user enable onedrive
$ systemctl --user start onedrive

SambaがWindowsのネットワークから見えない

サーバが、Windows10のエクスプローラのネットワークから見えない。

どうも、Windows側で、「Windowsの機能の有効化または無効化」で、”SMB 1.0/CIFS Client” の設定が必要みたいで、設定したけど、また見えなくなった。

参考となる記事を探していたけど、IPv6 の問題が指摘されていたものがあった。自宅では、IPv6 が一応使えるようにしてあるし、設定を見直し。

(( /etc/samba/smb.conf ))
[global]
  # CIFS標準の SMB1 では見えないようなので、SMB3 を使えるようにする
  client max protocol = SMB3
  # IPv6 からのアクセスを受け付けるようにする。
  hosts allow = 192.0.0.0/8 192.168.0.0/16 fe80::/10
  :
$ sudo /etc/init.d/smbd restart ; sudo /etc/init.d/nmbd restart

IPv6 用の hosts allow を加えたら、Windows から サーバが見えるようになった。

香港からのアクセス制限解除

自宅サーバは、少しでも危険な攻撃を避けるために、国ごとのIPアドレスの配布状況にあわせアクセス拒否をしている。

しかし、明日からの香港での学会参加に合わせ、アクセス拒否の設定を外した。一時的だけどね。

 

apachectl graceful で segfault part2

以前、apachectl graceful を実行すると、segfault で子プロセスが止まっていて、php7.3 に 統一したら、なぜかしら問題解決をしていたが、症状が再発。

また、mbstring で segfault が発生している。

解決しないので、/etc/logrotate.d/apache2 を修正

/var/log/apache2/*.log {
   :
   postrotate
      if invoke-rc.d apache2 status > /dev/null 2>&1; then ¥
         invoke-rc.d apache2 stop   > /dev/null 2>&1; ¥
         invoke-rc.d apache2 start  > /dev/null 2>&1; ¥
      fi ;
   endscript
}

dhcp-evalの使い方

自宅ネットワークでは、利用する機器の状態を把握するために固定IPアドレスを割り振っているが、DHCP の hardware ethernet で、Mac アドレスをみて配布している。この DHCP のリース時に、状態に合わせた処理を起動するための機能がある。

on commit などで script を実行

on commit , on release , on expiry を設定すると、IPアドレス割り振り時にプログラムを起動できる。

# vi /etc/dhcp/dhcpd.conf
:
# IPアドレス割り振り時に on-commit.sh を起動
on commit {
    set clip = binary-to-ascii(10, 8, ".",
                 leased-address);
    set clhw = binary-to-ascii(16, 8, ":",
                 substring(hardware, 1, 6));
    execute("/etc/dhcp/on-commit.sh", clip, clhw);
}

# vi /etc/dhcp/on-commit.sh
#!/bin/bash
#   IPアドレスを割り振り時にメールを送る
IP=$1
MAC=$2
if [ -n "$IP" -a -n "$MAC" ]; then
    echo "$IP $MAC" \
    | /usr/bin/mail -s "dhcp on commit" foo@example.com
fi

on commit の例で示した方法は、DHCPがアドレスをリースする度に呼び出される。スクリプトは同期して行われるため、遅い処理の場合には アドレス割り振りに支障がでるかもしれない。よって、スクリプトはシンプルなものを使う必要がある。

自宅では、host { fixed-address … } で、固定しているとはいえ WiFi なスマホだと、電波強度不足で再接続が発生する時だと、頻繁にメールが届くことになる。接続情報を保存するなどの Script を書かないとウザぃ。

host 毎に script を実行

こういうことができると、状況に合わせてリースを制御したくなる。自宅で使う場合だと、子供が長い時間使っている場合には、IPアドレスのリースを失敗させて、ネットワーク接続を切りたいかもしれない。

こういう場合には、host … { } の中に、execute を埋め込むことができる。しかも、execute で実行される script の返り値で、lease を失敗させることもできる。

# /etc/dhcp/dhcpd.conf
:
host game-machine {
    hardware ethernet 00:11:22:33:44:55 ;
    fixed-address      192.168.11.222 ;
    execute( "/etc/dhcp/lease-check.sh ,
             "192.168.11.222" ,
             "00:11:22:33:44:55" ) ;
}

# vi /etc/dhcp/lease-check.sh

#!/bin/bash
#  DHCP接続を判定する script
IP=$1
MAC=$2
if [ -n "$IP" -a -n "$MAC" ]; then
    if [ アドレスを許可する条件 ]; then
        # 接続許可
        exit 1
    else
        # 接続禁止
        exit 0
    fi
fi

注意: 最初 lease-check.sh は許可するときに shell-script 成功時を表す exit 0 を返せばいいとおもったけど、逆だったな。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト