「Linuxのこと」カテゴリーアーカイブ

SSHでno matching host key type found. Their offer: ssh-rsa」と言われたら

ども。こんばんは。

macOS 13 Venturaにアップデートしてから、一部のサーバやネットワーク機器へのSSH接続で以下のようなエラーが出るようになりました。

Unable to negotiate with [IPアドレス] port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

どうやらssh-rsaとかもうやめようぜ!っていう流れらしいです。が、そうも行かないので、以下参考記事と同じ要領で、~/.ssh/configに追記します。
※公開鍵認証を使ってない場合は、PubkeyAcceptedAlgorithmsは不要。

host IPアドレスorホスト名
HostKeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa

参考:SSHで「no matching key exchange method found. Their offer: diffie-hellman-group1-sha1」と言われたら

ではでは。またの機会に。

新しいラズパイを買った(Raspberry Pi 4 Model B 8GBモデル)

ども。こんばんは。

先日からRaspberry Pi 3 Model BのSDが不調に陥ってまして、また壊れました。

で、たまたまAmazonでタイムセールをやっていたので買ってしまいました。

TRASKIT Raspberry Pi 4 Model B /ラズベリーパイ4B(8GB RAM)技適マーク付/MicroSDHCカード128GB NOOBSプリインストール/簡単に取り付けるケース/5.1V/3A Type-C スイッチ付電源/2つのMicroHDMI-to-HDMIケーブルライン/3つヒートシンクと2つの透明静音冷却

¥3,000引きで¥16,800なり。

ファン付きのケースやSDカード、USB Type-Cケーブルなど諸々付属です。自分でこの辺選ぶのも楽しみではありますが、面倒くさいので今回はキットを購入しました。

今回購入したのはメモリ8GBモデルです。

付属品はこんな感じ。

  • 技適マーク付きのラズベリーパイ4B(8GB RAM)
  • 128GB(Class10)のmicroSDカード ※Sandiskだった
  • カードリーダー
  • 5.1V3.0AのUSB Type-Cホワイト電源アダプター
  • スイッチ付きの電源ケーブル
  • MicroHDMI-to-HDMIケーブル 2本
  • 透明ケース
  • ヒートシンク 3つ
  • 冷却ファン(LED*1、LEDなし*1)
  • GPIOリファレンスカード、日本語の取扱説明書など

microSDカードはSanDiskのものでした。

マニュアルは日本語です。

本体お目見え。

まずはヒートシンクを取り付けます。

ケースはこんな感じ。結構いい感じじゃないかな。

ケースにファンを付けます。片方はLED付きだということに後で気づきました。
あと、商品紹介画像とは多分つける向きが逆ですがこっちが正しい・・はず。

ケースに収めていきます。

冷却ファンは、GPIOのに接続します。接続するピン(3.3V or 5V)によって回転数が変わります。

ACアダプタはこんな感じ。PSEマークもありますね。

動作確認中。

このディスプレイはこれ。

俺はVGAを少し甘く見ていたのかもしれない ― 小型モバイルディスプレイ購入

USBケーブルにはスイッチがついてます。これは便利。

あー、光ってるわー。

初期ではNOOBSが入っています。

とりあえず今回は64bit版を入れたかったので、公式サイトからダウンロードします。
※Raspberry Pi Imagerでは64bit版Raspberry pi osは選択できません。

ダウンロードしたやつをRaspberry Pi Imagerでやきます。

ここからはまぁ適当に。

ちなみに、やっぱりRaspberry Pi 3 Model BもSDが壊れただけでなんかもったいないなーと思ったので結局SDカードを買い直しました。

サンディスク microSD 128GB UHS-I Class10 Nintendo Switch メーカー動作確認済 SanDisk Ultra SDSQUA4-128G-EPK エコパッケージ

¥2,040なり。

あれ、これ今回かったキットと同じじゃね?

同じようにRaspberry Pi 3 Model Bにも64bit版のRaspberry Pi OSを入れました。無事起動。

ではでは。またの機会に。

久々にRaspberry Piをアップデートしたらぶっ壊れたので作り直し(2021年Raspberry Pi インストール)

ども。こんばんは。

我が家のRaspberry Pi 3 Model B Rev 1.2ですが、たまにはアップデートしようとおもってapt updateやらapt full-upgrade的なことをやってましたら、途中でエラーになりまして。
※最近はapt-getじゃなくてaptが推奨らしいですね。

まぁとりあえず再起動でもするかーとやってみたところ・・・

SQUASHFS error:Unable to read page…といったエラーが大量にorz

んー、SDカード壊れたのか、単に本当にファイルシステムが壊れただけなのかはいまいちわからないものの、まぁしばらく使ってなかったし、1から入れ直してみることにしました。

SDカードの故障ならインストール中にエラーになるでしょ、っていう感じです。

ということで久々にRaspberry PIネタで、初期設定周りの話です。

さて、最近はRaspbianじゃなくて正式にはRaspberry Pi OSというそうですが、随分入れやすくなりましたね。

以前はNOOBSをインストールしてそこからでしたが、最近は、Raspberry Pi Imagerという公式ツールでかんたんにイメージが作れます。

https://www.raspberrypi.org/software/

早速macOS版をインストールしてみました。

シンプルなUIで、OSと書き込み先のSDカードを選ぶだけでイメージが作れます

OSはおすすめのRaspberry Pi OS (32-bit) with desktop and recommended softwareを選びました。

SDカードはUSBのカードリーダーに挿したものです。
※一応先にアンマウントはしています。

あとは書き込みを押すだけ。かんたんです。

書き込みが終わったら早速Raspberry Piに差し込んで起動します。

おー。ちゃんと立ち上がった。SDカードは無事だったってことかな・・・。

このままウィザードで以下を設定します。(画像は省略)

  • 国・言語・タイムゾーン
  • piユーザのパスワード
  • スクリーンの調整
  • WiFiの設定

なお、これらは最低でもモニタとキーボードが必要です。(マウスはなくてもTABキーなどを駆使すればなんとかなります。)
初っ端からWiFiとSSHを有効にしてネットワーク経由で設定する場合は以下のサイトのやり方が参考になります。

Raspberry Pi 初期設定 – Qiita

基本的な設定が終わったので、そのままアップデートします。
そこそこ時間がかかります。25分くらいかかりました。

最新になったのでrestartします。

再起動後、ノリでrpi-updateをしてしまったのですが、やらないほうがいいそうです。

理由は以下のサイトに詳しく載っていますが、要するに「まってりゃaptで安定版が提供されるから、人柱になりたくないならやらないでね」って感じです。

おいらはてっきりチップセット?とかのファームウェアの更新だと思いこんでやってましたが、普通にパッケージの更新だったんですね。。。

まぁやってしまったのでしょうがないですが次回以降気をつけよう。

やらないで!! rpi-update | ゆっくり遅報

さて、あとはモニタとキーボードでやることはraspi-configでのSSH有効化です。Interfaceのところにあります。

これ以降はSSHで行います。

割と好みによるところも多いですが、おいらは以下の感じで設定しています。

【raspi-config】

・GUIの起動と自動ログインを無効化。

・ホスト名

・I2Cの有効化(LCDモジュールを使うため)

・パーティションの拡張

一旦再起動。

無事パーティションも拡張されました。

最後に、OS起動中はLEDにピカピカしてほしいので、/boot/config.txtの末尾に以下の設定を追加しています。

dtparam=pwr_led_trigger=heartbeat

そんなところですかね。

過去の自分の記事を見ていると、新しいユーザを作ったり、piユーザからsudoを剥奪したりと色々やってますが、今回は面倒臭いのでやらないです・・・。

参考:いまさらはじめるRaspberry Pi(2017) – 2 –

とりあえず今の所動いているのでいいかな。

あー、色々消えたスクリプトとか復活させるかぁ。。

ではでは。またの機会に。

 

 

いつものノリでkernelをアップデートしたらエライ目にあった話

ども。こんばんは。

いつものノリでAWS EC2上のCentOS 7.9.2009のカーネルをyumで「kernel-3.10.0-1160.11.1.el7.x86_64」にアップデートしたら、Kernel Panicになりました。。

EC2のトラブルシュートからシステムログを見るとこんな感じ。

Kernel panic – not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

お、おう。

クラウドでカーネルパニックになるって地味に大変だぞ。。。

ということで、結論は、

インスタンス停止
ボリュームをデタッチ
新しいCentOS 7のインスタンスを作成
ボリュームをアタッチ
マウントしてなおす

という感じです。

以下の手順に従っても直りませんでした。

カーネルをアップグレードした後、または EC2 Linux インスタンスを再起動しようとすると、「カーネルパニック」エラーが表示されます。どうすれば解決できますか?

で、結局古いカーネルで上がるようにしました。

更新後、Amazon EC2 インスタンスの再起動に失敗します。既知の安定したカーネルに戻すにはどうすればよいですか。

/etc/grub.confの中身はいまこんな感じ。

  1 default=1
  2 timeout=0
  3 
  4 
  5 title CentOS Linux (3.10.0-1160.11.1.el7.x86_64) 7 (Core)
  6     root (hd0)
  7     kernel /boot/vmlinuz-3.10.0-1160.11.1.el7.x86_64 ro root=UUID=29342a0b-e    20f-4676-9ecf-dfdf02ef6683 console=hvc0 LANG=ja_JP.UTF-8
  8 title CentOS Linux (3.10.0-1160.6.1.el7.x86_64) 7 (Core)
  9     root (hd0)
 10     kernel /boot/vmlinuz-3.10.0-1160.6.1.el7.x86_64 ro root=UUID=29342a0b-e2    0f-4676-9ecf-dfdf02ef6683 console=hvc0 LANG=ja_JP.UTF-8
 11     initrd /boot/initramfs-3.10.0-1160.6.1.el7.x86_64.img
 12 title CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core)
(略)

いやー、びっくりしたわ。。

ではでは。またの機会に。

codey rocky(ESP32)でMicroPythonを動かす(2) – MQTTでメッセージの送受信

ども。こんばんは。

codey rockyではメッセージキューWとしてMQTTWが実装されています。

せっかくなのでちょっと試してみます。

MQTTについては少し古いですがこの辺がわかりやすいです。

MQTTで始めるIoTデバイスの作り方 第1回:「MQTT」を知り「Mosquitto」を導入する (1/3)

まずはMQTTのブローカーとしてmosquittoをRaspberry Pi上にインストールします。
※そのうちRabbit MQも試したいなと思いますがまずは手軽そうなmosquittoで試します。

ブローカーの動作環境はRaspbian GNU/Linux 9.11 (stretch)で、2020/02/16時点最新のパッケージになっています。

・mosquittoのインストール

sudo apt install mosquitto

うちの環境ではlibev4とlibwebsockets8も合わせてインストールされました。

・続いてクライアントもインストールします。

sudo apt install mosquitto-clients

libmosquitto1が合わせてインストールされました。

・ブローカーの起動

sudo systemctl start mosquitto

sudo systemctl status mosquittoで確認して特に問題なく起動していました。
1883ポートでLISTENしているみたいですね。

・テスト

以下のコマンドでtestというトピックを購読(サブスクライブ)します。

mosquitto_sub -d -t test

実行結果はこんな感じ。
※lexはうちのラズパイのホスト名です。

Client mosqsub/6162-lex sending CONNECT
Client mosqsub/6162-lex received CONNACK
Client mosqsub/6162-lex sending SUBSCRIBE (Mid: 1, Topic: test, QoS: 0)
Client mosqsub/6162-lex received SUBACK
Subscribed (mid: 1): 0

・テストメッセージ送信

別のターミナルでSSHに接続してtestトピックに投稿(publish)します。

mosquitto_pub -d -t test -m “test 1”

すると、サブスクライバー側で以下のように表示されます。

Client mosqsub/6162-lex received PUBLISH (d0, q0, r0, m0, ‘test’, … (6 bytes))

test 1

これで最低限の動作はokですね。

続いてcodey側にこんなコードをアップしてみました。
以下のリファレンスからサンプルコードを流用していますが、リファレンス内のサンプルコードの「from mqtt import MQTTClient」は誤りで、正しくは「from cloud_message.mqtt import MQTTClient 」です。

https://makeblock-micropython-api.readthedocs.io/en/latest/public_library/Third-party-libraries/mqtt.html

■サンプルコード

#import mqtt package
#リファレンスは"from mqtt import MQTTClient"となっているが実際はcloud.message.mqttが正しい
#https://forum.makeblock.com/t/importerror-no-module-named-mqtt/15029
from cloud_message.mqtt import MQTTClient

import codey, time, event
import utime

MQTTHOST = "mosquittoのサーバのIPアドレス"
MQTTPORT = 1883

#なんでもいいらしいが重複はだめっぽい。
#https://qiita.com/egnr-in-6matroom/items/3aef4bd45857e75bb1d3
client_id = "101"

# Example Path
#ここの指定方法がまだわからない・・・。全部取得してみる。
Topic = "#"

# ID / PWはオプション。今回はmosquitto側では指定していないので省略した。
#mqttClient = MQTTClient(client_id, MQTTHOST, port=MQTTPORT, user='test', password='test', keepalive=0, ssl=False)
mqttClient = MQTTClient(client_id, MQTTHOST, port=MQTTPORT, keepalive=0, ssl=False)

# Connect to the MQTT server
def on_mqtt_connect():
    mqttClient.connect()

# publish a message
def on_publish(topic, payload, retain=False, qos = 0):
    mqttClient.publish(topic, payload, retain, qos)

# message processing function
def on_message_come(topic, msg):
    #print(topic + " " + ":" + str(msg))
    #b'test'みたいな表示になるので、文字列化して分割。なおメッセージ自体に'(シングルクォーテーション)がある場合は""で囲まれるが未対応
    temp_msg = str(msg).split("'")[1]
    codey.display.show(temp_msg,wait=True)

# subscribe message
def on_subscribe():
    mqttClient.set_callback(on_message_come)
    mqttClient.subscribe(Topic, qos = 1)

@event.button_a_pressed
def on_button_a_pressed():
    codey.display.show("Start",wait=True)
    codey.wifi.start('SSID', 'パスワード', codey.wifi.STA)
    time.sleep(1)
    if codey.wifi.is_connected():
        codey.emotion.smile()
        on_mqtt_connect()
        on_subscribe()
        codey.display.show("Ready!",wait=True)
        while True:
            #RTCがついてないので起動からの時間となる。
            #nowtime = utime.time()
            #codey.display.show(nowtime,wait=True)
            #codey.display.show(codey.battery.get_percentage(),wait=True)
            # Blocking wait for message
            mqttClient.wait_msg()
            #ブロッキングしない方
            #mqttClient.check_msg()
            time.sleep(1)

    else:
        codey.emotion.shiver()


@event.button_b_pressed
def on_button_b_pressed():
    codey.display.show("Stopped",wait=True)
    codey.stop_all_scripts()

これをcodeyにアップロードすると、パブリッシュされたメッセージを表示するようになります。

だいぶ前に作ったbrouteから消費電力を取得するスクリプトを少し改変して、取得した結果を単純にmosquitto_pub -d -t test -m 値で投稿(publish)するようにしました。
#python上からosコマンドを実行しています。こういう移植性のないことしちゃだめですね。ちゃんとmqttをpythonから操作するように変更しないと・・・

動作の様子はこんな感じです。
エアコンを入れると消費電力がちゃんと上がってますね。

 

本当はメッセージが無い間は、時計にでもしようと思ったのですが、odey rockyにはRTCが搭載されていないようで、utime.time()で取得した値は、電源投入後からの起動時間(秒)となります。

mqttClient.wait_msg()はブロックされますが、mqttClient.check_msg() はブロックされないので、まぁバッテリーの残量を出すとかそういう感じのことはできそうですね。

あと、MQTTのトピックの指定の仕方がよくわかりませんでしたので”#”としています。一応トピックは「test」で来てるみたいですが、「/test/」とかにしてもうまく拾えないんですよね。
これはもうちょっと調べないと。

次は赤外線周りをなんかやってみようかな。

【バックナンバー】

ではでは。またの機会に。

久々にRaspberry PIのパッケージを更新したらwpa_supplicantがどっかいった話

ども。こんばんは。

久々にうちのラズパイ(Raspberry Pi 3 Model B)のパッケージを更新しました。
※raspbianのバージョンは9.1 Stretchです。ディストリビューションはそのままでパッケージの更新だけした感じです。

普通にapt-get updateしてapt-get upgradeしただけなのになぜか無線がつながらない・・・。

結構悩みました。wpa_supplicantがうまく動いてない様子。

# systemctl status wpa_supplicant.service
● wpa_supplicant.service – WPA supplicant
Loaded: loaded (/lib/systemd/system/wpa_supplicant.service; enabled; vendor p
Active: failed (Result: exit-code) since Fri 2016-11-04 02:16:45 JST; 38s ago
Process: 376 ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant (code
Main PID: 376 (code=exited, status=203/EXEC)

11月 04 02:16:45 lex systemd[1]: Starting WPA supplicant…
11月 04 02:16:45 lex systemd[1]: wpa_supplicant.service: Main process exited, cod
11月 04 02:16:45 lex systemd[1]: Failed to start WPA supplicant.
11月 04 02:16:45 lex systemd[1]: wpa_supplicant.service: Unit entered failed stat
11月 04 02:16:45 lex systemd[1]: wpa_supplicant.service: Failed with result ‘exit

これ、結論から言うと、wpa_supplicantの実行ファイルが何故か消えてました。

# ls /sbin/wpa_supplicant
ls: ‘/sbin/wpa_supplicant’ にアクセスできません: そのようなファイルやディレクトリはありません

ただ、wpasupplicantパッケージ自体はapt上に存在している模様でしたので、apt-get remove wpasupplicantしてinstallしたら復活しました。

一体何だったんだろう・・・。

特に設定とかは変えてませんが、直ったあとに、wpa_passphraseコマンドでPSKを暗号化しておきました。

ではでは。またの機会に。

 

自分の尻拭いプロジェクト – 2 – Zabbix 4.4をCentOS 8(8.0.1905 (Core))にインストールする

ども。こんばんは。

気づけば年末年始の休暇もあと1日となりました。

この年末年始の最後に、やかして吹き飛ばした旧Zabbixの代わりに、新しいZabbixを構築します。

せっかくなのでCentOS 8にインストールします。

以下、とりあえずzabbixがうごいたやったーくらいの手順です。
SELinuxやfirewalldもノリで無効化しています。

apacheの設定周りとかもデフォルトのままです。

■CentOS 8.0.1905のインストール

VMWare ESXi 6.7.0U3上に仮想マシンを作成してDVD ISOファイルをもとにインストールします。
インストーラーは7とあんまり変わらないです。

とりあえず必要なものは後で入れるので、サーバにしました。
※あとでランレベルは3にします。

とりあえず入りました。

あれ、ifconfigとかnetstatとかそのまま使えちゃうのね。ipとかssとかせっかく覚えかけてたのに。

■CentOS 8 初期設定(1) ランベルを3にしたい

昔の人なので、inittabを探し回ってましたが、今はないようですので、以下のコマンドで変更します。
※CentOS 7系からこれのようですね。おじさんなので、inittabとかinit 3とかrunlevelな人ですorz

# systemctl set-default multi-user.target

以下確認コマンド

# systemctl get-default

■CentOS 8 初期設定(2) SELinuxを無効にする

無効にします。が、やらかしてカーネルパニックになります。
※今でもカーネルパニックっていうのかな。

Failed to load SELinux policy, freezing.

昔ながらのやらかして、/etc/sysconfig/selinuxの書き間違いです。

なので、シングルユーザで入って直します・・・が、シングルユーザモードの入り方がわからない。カーネルパラメータに–singleとか追加して起動すればいいんでしょ?と思ってたらこれも違っていた。。。

4行目のroを消してrw init=/sysroot/bin/shに書き換えてctrl+xで起動します。

はいれました。chroot /sysrootしてもいいですし、今回は/etc/selinuxを直すだけなので直接編集しました。

おバカですねぇ。disabledはそっちじゃない。(このミスはCentOS 5の頃からやらかしている気がしますね)

こんな感じに直してrebootして無事起動しました。

■CentOS 8 初期設定(3) その他初期設定

firewalldの無効化とSSHのrootログインの無効化をしました。
このあたりは特に特殊なことはなかったので割愛。

■(未解決)SSH経由での操作のレスポンスが悪い

ぱっと解決できなかったので放置していますが、ログイン後の操作のレスポンスがとても悪いです。エンター押すだけでもちょっと待たされます。VMWareのコンソール上だとそんなに遅く感じないのでSSH関連かtty関連のなにかかなー。ちょっとイライラします。

これはおいおい調査します。

■CentOS 8 初期設定(4) アップデート

CentOS 8からはyumが廃止されdnfになりました。
※pythonを3系に完全移行するためにdnfに変えたらしいです。

なおyumコマンドはdnfのラッパーとして残っていますのでyum updateでもdnf updateと同義になります。

とりあえずOSはこんな感じでしょうか。

■ZABBIX 4.4のインストール

以下のURLに従います。

https://www.zabbix.com/jp/download

うちは今回、4.4 / CentOS 8 / MySQL / Apache の構成としました。

なお、コマンドどおりに実行してもうまく行かない点がありましたのでその点は補足します。

まず先にmysql-serverとmysqlのインストールが必要です。
※サーバとクライアント。普通にdnf install mysql mysql-serverとかでいいです。自動起動とか忘れずに。

上記サイトに従ってコマンドを実行してきます。

・「a. Install Zabbix repository」はそのまま。

# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm
# dnf clean all

・「b. Install Zabbix server, frontend, agent」もそのまま。

# dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent

・「c. Create initial database」は案内されたgrant文がmysql 8系では通りません。

# mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ‘password’;
mysql> quit;

MySQL 8系ではGRANTと同時にユーザを作れなくなったようで、以下のようなエラーになります。

mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ‘password’;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘identified by ‘password” at line 1

なので、ユーザ作成とGRANTをバラバラに実行します。
※passwordのところにはパスワードを設定します。
(“mysql> create database zabbix character set utf8 collate utf8_bin;”は実行できるはず。)

mysql> create user zabbix@localhost identified by ‘password’;
mysql> grant all privileges on zabbix.* to zabbix@localhost;

以下のコマンドも普通に流せました。

# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

あとは、サイトの記載どおりです。

とりあえずコアスイッチだけぽいっと追加しましたがうまく動いてそうです。

【バックナンバー】

ではでは。またの機会に。

自分の尻拭いプロジェクト – 1 –

ども。こんばんは。

先日のオペミスで仮想マシンを全台虚空に返したわけですが、昨日(2019/12/30)午後〜夜まで時間をかけてなんとか復旧しました。

結局ほぼ元通りの構成で面白みはないですが、バージョンがだいぶ新しくなりました。

  • AD(Windows Server 2008 R2)
    • Windows Server 2012 R2をインストールして再構築。
      ※手持ちのライセンスが2012 R2しかないので・・・。
    • NPS(RADIUS)の構築までサクッとできた。
      • ちなみにAD DSはインストールしていたけど、証明機関のをインストールしておらずPEAPが使えなくてハマった。
        証明機関さえインストールすれば解決できる。
        (旧ADはIISの証明書とかも発行してたので証明機関入ってたみたい。)
    • MacBook Airは一旦Active Directoryのバインド解除して再度バインドした。無事AD上のコンピュータに表示されたし新しい証明書もインストールされているので多分大丈夫だと思う。。。プロファイルも消えなかった。
    • 過去もハマったけど、評価版にそのままライセンス入れようとして、「このエディションのWindowsのライセンス認証にそのキーは使えません。別のキーを試してください」とか言われたので以下のコマンドでキーを登録。

      DISM /online /Set-Edition:ServerDatacenter /ProductKey:xxxxx-xxxxx-xxxxx-xxxxx-xxxxx /AcceptEula

  • 大昔から動いているLinux(CentOS 5)
    • 正直作り直しは困難と判断・・・。DHCPの設定ファイルも抜き出したかったし。思い出はなかなか消せなかった。
    • あと、基本DNSがこいつで、ADもDNSはこいつを参照/更新している関係で意外と大事な役割になっている。
      (今回もADにはDNSサーバをインストールせずに作ってしまった・・・。)
    • Acronisで取得したバックアップ(tibファイル)から復元 
      • vSphere Converter Standaloneでは6.0までしかサードパーティのイメージ変換機能が実装されておらず、手元の5.0でtibをvmdkに変換・・・するも失敗。
      • しょうがないのでAcronis TrueImageのブータブルCDで頑張って復元。
      • vSphere 6.7だと、マウスが動かない。
        TABキーとかの操作だとどうもうまく行かず、マウス機能(F10とか押すとテンキーでカーソルが動かせる)で頑張った。(わざわざMacBook Airにキーボード取り付けて・・・)
      • 一部どうしても見えないボタンがあったのでTABキーとか駆使してなんとか復元。結局これが一番うまくいくなー。(数年前にも同じことした気がする。)
  • PBX
    • FreePBX STABLE SNG7-PBX-64bit-1910(FreePBX 15/Linux 7.6/Asterisk 16)で再構築。
    • アナウンス音声の日本語版が付属していて嬉しい。
    • ひかり電話とのトランク、Cisco IP Phone 7961のレジスト、内線、外線発信/着信までまさか数時間で終わるとは思わなかった。
    • 特にIP PhoneのConfigが旧FreePBXサーバのtftpbootフォルダにしかおいてないと思い込んでいたのでもう一度Config作成は絶望かと半分あきらめていましたが、過去の自分がうまく動いたときの一連のパケットキャプチャを保存してくれていたので、パケットキャプチャの中身からtftpでやりとしていたファイルを抽出して復元できました。まぁファイルとしておいておいてくれれば言うことないのですが、自分の所業なので諦めます。(どうせパケットおいておけば最悪どうにかなるだろうとか当時考えたんだろうな。)
    • FreePBXのバージョンもだいぶ変わっていたけどCisco側は設定修正なしでいけた。日本語化まで数時間でできた。
  • 監視サーバ
    • まだ未構築・・・。年明けかな。

以下、電話関連(FreePBX)のメモ。

環境、バージョンは以下の通り。

ハイパバイザー:VMware vSphere 6.7.0U3
イメージ:FreePBX STABLE SNG7-PBX-64bit-1910(CentOS 7.6ベース)
FreePBX :15
Asterisk:16

今回は全部WebUIだけで完結しましたが、以下ハマったポイントを書いておきます。

なおSIPドライバーはPJSIPです。

  • FreePBXのIPアドレス変更
    • /etc/sysconfig/network-scripts/ifcfg-eth0を編集。
      ※CentOS 7系だけどNetworkManagerは使ってないみたい。
  • tftpサーバの起動
    • /etc/xinetd.d/tftpを編集
    • disableをnoにしてservice xinetd restartする。
  • Fail2Banの解除
    • なんかGUIからできなくなった?ぽいのでコマンドで
      service fail2ban stop
      /var/log/fail2ban.logをけす
      service fail2ban start
  •  FreePBXのモジュール更新
    • 量が多すぎて一度にアップグレードができなかった。少しずつ更新する必要あり。
  • TCPのリッスン(Cisco IP Phoneのため)
    • Asterisk SIP設定で、chan_pjsipの設定を変えばいいが、Apply Configだけでは反映されず、osごと再起動が必要だった(Asteriskの再起動でも良かったかも)。
  • Outboundルール(外線発信)
    • 以前は「0X」だけでマッチした気がしますが、今回はそれだとルールにマッチせず11桁と10桁それぞれ登録しました。
  • ひかり電話にRegistできているのに、外線発信、着信両方FreePBXまでこない。
    • 正直ここが一番ハマりましたが、Asterisk SIP設定のGeneral SiP SettingsのNAT設定の外部アドレスを自分自身のIPアドレスにして、再起動したらうまくいきました。
      ※我が家はFreePBXからひかり電話HGWまでの間はNATはしていません。
      デフォルトでは、へんてこなIPアドレス(104.145.12.102)が1設定されており、実際のSIPパケット見ているとViaとかContactとかにそのIPがセットされていました。

以下、最低限のひかり電話発着信のためにいじったところ
(WebUIは日本語にしていたので項目が日本語のところがあります。)
※DID/CID制御とかはしていません。やりたい方はVoIP-Info.jp Wikiが大変参考になります。

  • ひかり電話HGW側
    • 内線設定
    • ダイジェスト認証なし
    • MACアドレスはうちの場合だとL3スイッチになる
      ※最初SVIのMACアドレスにしてたけど、よく考えたらNAT関わるわけじゃないから普通に出ていくところのインターフェースのMACアドレスを登録。
  • 接続
    •  トランク
      • General
        • トランク名:適当
        • アウトバウンドCID:自分の外線番号
        • 最大チャネル数:1(うちは1本の契約)
      • ダイヤル番号の操作ルール
        • 未設定
      • PJSIP設定
        • General
          • ユーザ名:0003(HGWの内線番号の頭に0を3つ)
          • Language Code:日本語
          • SIP Server:ひかり電話HGWIPアドレス
        • 高度な設定
          • DTMF Mode:バンド内
          • From Domain:ひかり電話HGWIPアドレス
          • From User:3(HGWの内線番号。0なし)
          • クライアントURI:sip:3@ひかり電話HGWIPアドレス
          • なんとなくパケットみてこんなリクエストになってれば行けるはず。

            REGISTER sip:ひかり電話HGWIPアドレス SIP/2.0
            From: <sip:3@ひかり電話HGWIPアドレス>;(略)
            To: <sip:3@ひかり電話HGWIPアドレス>

    • インバウンドルート
      • 単純に全部着信回すなら気にしなくていい。
      • 宛先をセット:自分で作った着信グループ
    • アウトバンドルート
      • ルートCID:意味ないらしいけど一応外線番号
      • 内線を上書き:はい
      • 一致したルートのトランクシーケンス:ひかり電話とのトランク
    • Dial Patterns
      • こんなかんじで。(これだと110とか119とか104とかは発信できませんのでご注意。うちは発信するつもりはないのであえて携帯と固定電話だけトランクに流すようにしています。)

あら、書いてみると意外と設定すくないですね。

あ、書いてないですが内線は普通に設定しています。
といっても番号とSecretくらしか設定してないですが・・・。

あと、我が家専用ですが、Cisco側がTCP/5061でSIPをしゃべるのでPJSIPがTCPで5061を待ち受けるようにしています。
※過去のFreePBXではchan_ipでしかTCPが設定できずいろいろ悩んでポート変えていたみたいです。

今日は家の掃除もしたし、なんとか新年が迎えられます。

皆様良いお年を。

ではでは。またの機会に。

 

我ながら自分のバカさ加減に腹が立つ・・・。

ども。こんばんは。

派手にオペミスしました。

というか、してたことに数時間後に気づきました。

移行したばかりのVMのデータストア吹き飛ばしました\(^o^)/

そして、旧NASからも削除済みで、旧NAS上はすでにThikで新しいLUNを作ってしましましたので、もう復元できない\(^o^)/

10数年分のログと思い出が(´;ω;`)

まぁいい。これが仕事じゃなくてよかったと思うことにしよう。
そし旧環境から気持ちを一新するいい機会を得たと、新しいことにチャレンジする機会を得たということにしよう(´;ω;`)

結局、何をやらかしたか。

  1. 旧NAS上にバックアップ用にiSCSIのLUNを作る(←問題なし)
  2. 新NAS上で旧NASをiSCSIでマウントする(←IPアドレスを間違ってしまい自分を自分でをマウントしていた)
    タイムマシンがあったら過去に戻ってぶん殴りたい。
  3. iSCSIのLUNをEXT4でフォーマット(←大惨事発生、気づかずorz)
  4. 新NASでLUNのエクスポートジョブ開始(←更に問題をややこしくした。自らとどめを・・・)
  5. なんか仮想マシンの調子が悪いぞ?(←気づき)
  6. VMからデータストアがみえないなー(←軽い気持ち)
  7. LUNエクスポートジョブキャンセル(←これはまあありかな)
  8. データストア消失に気づく(←まだ希望があった)
  9. パーティションの作り直し方とか調べて色々する(←無意味)
  10. 作業中のスクリーンショットとかを見直す(←あっ)

\(^o^)/

まぁいつかはやめようと思ってたわけだし、OSも全体的にサポート切れだし、メールはオンプレExchangeからO365へ、DNSはCloudflareへ、ブログもAWSにそれぞれ移行は終わってるので、実害は少ないかも。

直前まで使っていた仮想マシンと消失により想定される影響はこんなところかな。

  • AD(Windows Server 2008 R2)
    • Exchangeはもう役目を終えている(無駄にo365とのハイブリッドのままだけど・・・)
    • ADのSyncしなくなったからo365側もちょっと設定見直そう。
    • NPS(RADIUSサーバ)が死んだので一部機器の無線LANが死ぬ
      →もう.1Xもやめようかと思うけど、FreeRADIUSで再構築かな・・・。やっぱAD作り直すか・・・。(手持ちが2012しかないけど。。。)
    • MacBook AIRのアカウントに影響でるかも?
      →これ一番まずいかも・・・。今一番怖い。
  • 大昔から動いているLinux(CentOS 5)
    • 最悪Acronisのバックアップから戻せる(今朝フルバックアップが取れてる)けど、どうするかな・・・。
    • LAN内のDNSのマスターだった(セカンダリは物理サーバなのでセーフ)
    • そういえばADもこのDNSサーバを更新しにいく方式だっけか。。
    • DHCPサーバがいなくなった
      • 一部MACアドレス固定で払い出している機器がある。。。
        地道にFortiGateに移行するか。。。
    • SYSLOGを受けていた
    • SNMP-TRAPをメールに変換して飛ばしてた。
    • LAN内の機器のSMTP中継サーバだった。
    • AWSのサーバのSSHキーをここにしかおいてない気がしたけど一応バックアップとってた
  • PBX
    • 電話死亡
    • クソ苦労して作ったIP PhoneのConfigがとんだと思う。。
    • DHCPサーバでtftpサーバのIPとか渡してたっけか・・・。
  • 監視サーバ
    • ふるーいzabbix。2.xとかそんくらいかも
    • トラフィックとか見るのに便利だったなぁ

実質4台が常時稼働だったけど、それぞれ思い入れというか、もう存在が日常なサーバたちだったので、実のところショック大。。。

まぁ年末年始を利用して色々作り直そう。

来年は良いことあるといいな。

ではでは。またの機会に。

NASリプレースプロジェクト – 6 –

ども。こんばんは。

地道にデータをコピーしています。

まずはReadyNAS104の中身をコピーしています。
ReadyNASがおわったらTS-859 Pro+に取り掛かろうとしています。

今の所、

ReadyNAS -[NFS]-> CentOS -[NFS]-> TS-873

こんな感じでやっています。ReadyNAS側は以前からCentOSにマウントして使っていましたので、NFSマウントを一つ追加してコピーしています。
#ReadyNAS104は4TBx4でRAID5ですが、多分200Mbpsで頭打ちかな。。。 

しかし毎回悩むのが、コピー方法です。
さらっと、「コピー」と書きましたが、今回はmvコマンドを使ってNFSからNFSへ移動する形をとっていました。

毎回悩みます。この作業。SMBでマウントしてWindows上からやるのがいいのか?とか。Linux使うにしてもNFSじゃなくてCIFSのほうがいいのか?とか。rsyncのほうがいいのかなーとか。
新NASで旧NASを直接マウントしてもいいんじゃかないか?とか。

まぁ結局今回mvでやったのですが、ちょっとハマりました。
どうでもいいデータから作業し始めてよかった・・・。

以下ハマったこと

(1)ReadyNAS側のI/Oがおっつかないので移動に失敗する

これは割とどうしようもないです。きりの良いところで、時々ReadyNASを再起動しないと激重になります。

(2)オーナー、グループがおかしくなる

これは想定内。あとでQNAP上でchownで強引にやって直しています。(本当は両機器でuidなどを合わせるべきかと思いますが。。。。)

(3)inodeが重複する(inter-device move failed )

これは正直知りませんでした。。。。
#うち場合SSDキャッシュ使っていますがその場合、inodeってQNAPのキャッシュのinodeなのかな・・・?

参考:[linux] 異なるデバイスを跨いだ mv で inter-device move failed エラー
参考:mvコマンドでエラー「inter-device move failed, unable to remove target」が出る。
参考:cpとmvとinodeの話

(4)cpだと-pが使えない?

mv問題を解決するためcpを使うことにしましたが、-pをつけると失敗する(cp:cannot create regular file )ケースが多かったです。(これ”(5)”のせいだったかも・・・)

オプションなしだと、権限やオーナーは(2)で対処できるとして、日付が全部コピーした時間に上書きされます。なので、今回は以下のようにしました。
※「-p」は「–preserve=mode,ownership,timestamps」と同等のようです。

nohup cp -r –preserve=timestamps 旧 NAS 新NAS > result.txt &

※iやvはお好みで。

(5)QNAP側のRAID6スクラブ中はやはり失敗が多い。

初期構築時に、毎週日曜日の0時からスクラブを開始するようにしていました。(初期設定ではoff)

速度は中(既定)で、150MB/secほどで進んでいました。体験上は全然遅くないのですが、やっぱりI/Oがちょっともつれる感じがあります。

スクラブは最低1ヶ月に一回以上が推奨らしい。ので、毎週しなくてもいいかということで、月イチにしました。まぁホットスペアもあるし大丈夫だと思います。。
RAID10だとこれいらないんだよなー。地味に14時間くらいかかります。

完全移行にはまだまだかかりそうです。

【バックナンバー】

ではでは。またの機会に。