「パソコンのこと」カテゴリーアーカイブ

令和になったことだしクラウドへ移行する – 15 – Azure AD Connectを強制停止する

ども。こんにちは。

先日ADをぶっ壊してしまい、再構築しましたが、AD Connectはインストールしておらず、以前のオンプレEchangeからExchange online(Office 365)へ移行した際に設定したAzure AD Connectがずっと同期エラーの状態でした。

また、こんな感じでソースが「Windows Server AD」となっているユーザは、Azure AD上で編集や削除ができません。
不要なユーザはAzure AD上でサインインをブロックに設定はしていましたが、いい加減適当な名前のユーザも結構います・・・。

もう二度とオンプレADと同期はしないと覚悟を決めたので、同期を強制的に解除します。

やり方としてはPowerShellで

 Set-MsolDirSyncEnabled -EnableDirSync $false

を叩くだけです。

参考:Office 365 のディレクトリ同期を無効にする

上記のページにも書いていますが、これは最終手段というかもう二度と同期しないくらいの覚悟?のコマンドのようですね。

PowerShell を使用して、ディレクトリ同期を無効にすることができます。 ただし、トラブルシューティング手順としてディレクトリ同期を無効にすることはお勧めしません。 ディレクトリ同期のトラブルシューティングに関してサポートが必要な場合は、「 Office 365 のディレクトリ同期の問題を解決する」の記事を参照してください。

ハマったのは、反映されるまでの時間です。

オンプレミス Active Directory Domain Services から Azure AD に同期したオブジェクトを管理、削除できない

注: アカウントが無効化されるまで、72 時間ほどかかる場合があります。処理に要する時間は、Office 365 サブスクリプション アカウントにあるオブジェクト数により異なります。

結局、ソースがAzure Active Directoryに変わるまで36時間ほどかかりました。

これで無事Azure AD上から削除できます。

で、やらかしたことは・・・

ユーザを消しすぎた

です・・。

オンプレExchangeからOffice 365に移行したときに、いくつかのメールボックスをユーザメールボックスから共有メールボックスに変換しています(ライセンス節約のため)が、変換前のユーザを勢いで消してしまい、一瞬共有メールボックスがみえなくなりました。。。。

すぐに削除済みユーザから戻したので復活しましたが・・・。

これ忘れそうだな。。。

以前ここで読んでたのに忘れてました。

ユーザー メールボックスを共有メールボックスに変換する

古いユーザー アカウントは削除しないでください。 それは共有メールボックスの固定に必要です。 ユーザー アカウントを既に削除している場合、「削除済みユーザーのメールボックスを変換する」 (削除されたユーザーのメールボックスを変換する) を参照してください。 

またやらかしそう・・・

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

【バックナンバー】

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

HaloCode(ESP32)でMicroPythonを動かす(1)

ども。こんばんは。

Codey Rockyに続いて同じくMakeBlock社のHaloCode(ハロコード)も買ってしまいました・・・。

今回買ったのは、
Makeblock Halocodeスタンダードキット【国内正規品】
Amazonで¥5,890なり。

本体だけでも良かったのですが、電池ケースが欲しかったのでキットにしてみました。
本体だけなら¥3,000以下で購入できます。

HaloCodeもcodey rockyと同じESP32チップが乗っているようで、MicroPythonが動きます。もちろんWiFiにも繋がります。

マイクが付いてるので音声識別もできるらしいのと、モーションセンサーがついています。

出力機能はLEDなのでちょっとデバッグがしづらそうですが、小さくて面白そうなので購入してみました。

 

中身はこんな感じ。

本体はかなり小さいです。

とりあえずUSBケーブルに繋いで起動してみました。

mBlock 5経由でファームウェアをアップデートしました。
使えるブロックや拡張もcodey rockyとは違いますね。

モーションセンサーと音声認識は使ってみたいですね。日本語だめな気もしますが。。。

とりあえず、先日つくったリモコンでcodey rockyを動かすスクリプトを改変してHaloCodeのモーションセンサーに合わせて動くようにしようかな。

メッセージのやり取りはMQTTでつくってみようかなー。

色々楽しみですね。

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

codey rocky(ESP32)でMicroPythonを動かす(3) – テレビのリモコンでrockyを動かす

ども。こんばんは。

なぜだかわかりませんが思いの外ハマっています。楽しい。

ラズパイに比べてできることに制約が多いので、制約の中でできることを探しながら色々試すのが楽しいですね。

で、今回は、赤外線(Infrared)を使って、テレビのリモコンでrockyを操作するコードを作ってみました。

・Codey
Aボタン:リモコンから受け取ったコードを表示するだけ
Bボタン:全スクリプトを停止
Cボタン:リモコン操作で動くモード

・リモコン
音量大小:速度を変更(1-100)
上下左右:押している間rockyがその方向にすすむ

・おまけ
前に障害物がある場合は、止まる。

動かすとこんな感じです。
音量キーでの速度の調整がやたら早いので少しwaitを入れたいのですが、他のコード受信時と同じ処理でやっているので、waitをかけるとrockyの動きがカクカクになります。。。

 

 

■コード

import codey,rocky,event

#このグローバル変数イマイチ
rspeed = 10

def speedctl(flg):
    global rspeed
    if flg == "up":
        if rspeed < 100: rspeed = rspeed + 5 else: if rspeed > 10:
            rspeed = rspeed - 5


#リモコンモード
# TOSHIBA製リモコン
# 64 26 音量大
# 64 30 音量小
# 64 62 上
# 64 64 下
# 64 95 左
# 64 91 右
@event.button_c_pressed
def button_c_cb():
    global rspeed
    codey.display.show("RC",wait=True)
    while True:
        ope = codey.ir.receive_remote_code()[1]
        codey.display.show(rspeed,wait=True)

        if ope == 26:
            speedctl('up')
        elif ope == 30:
            speedctl('down')

        if ope == 0:
            rocky.stop()
        elif ope == 91:
            rocky.turn_right(rspeed)
        elif ope == 95:
            rocky.turn_left(rspeed)
        elif ope == 62:
            if not rocky.color_ir_sensor.is_obstacle_ahead():
                rocky.forward(rspeed)
            else:
                rocky.stop()
        elif ope == 63:
            rocky.backward(rspeed)
        else:
            rocky.stop()

#ただのリモコン読み取りモード
@event.button_a_pressed
def on_button_a_pressed():
    codey.display.show("Recv mode",wait=True)
    while True:
        ope = str(codey.ir.receive_remote_code()[0])
        ope2 = str(codey.ir.receive_remote_code()[1])
        codey.display.show(ope2,wait=True)

#### TEMPLATE ####
#基本的な構文間違いなどにきづけるように起動時にok!と表示 
@event.start
def on_start():
    codey.display.show("ok!")

#スクリプト停止
@event.button_b_pressed
def on_button_b_pressed():
    codey.display.show("Stopped",wait=True)
    codey.stop_all_scripts()

 

ちなみに、赤外線の送信はまだうまく行ってません・・・。というか、送信機能未完成っぽい?

フォーラムでテクニカルサポートからこんな回答がでてます・・・。

リモコンに信号を送るには2つ送らないと行けないけどまだエミッターができてないよ、的な・・・。

2年経ったけどいかがでしょうか・・・。

Sensing IR signals

I am afraid that currently IR control port on mblock software is not open for users yet, although the firmware supports that. Users now cannot use remote controller to control codey rocky.
We will update the information if we add this function to mblock software officially.
Thank you for the feedback, we’ll complete APIs for IR reception emitter then.
 

【バックナンバー】

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

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

ども。こんばんは。

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

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

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を暗号化しておきました。

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

 

codey rocky(ESP32)でMicroPythonを動かす(1)

ども。こんばんは。

先日購入したcodey rockyが思いの外色々できそうだったので、書いてみることにしました。

codey rockyの開封記事:STEM教育用のおもちゃ「codey rocky」を買ってみた

で、前回の記事でも書きましたが、このcodey rockyにはESP32という制御基板が搭載されており、MicroPythonというPythnoの実装系で動作させることができるようです。

参考になるリファレンスなど:
codey rockyの開発元であるMakeBlock社のPython APIリファレンス
https://makeblock-micropython-api.readthedocs.io/en/latest/

MicroPythonのリファレンス
https://micropython-docs-ja.readthedocs.io/ja/latest/index.html#

さて、とりあえずPythonで色々動かす前に動作確認というか、本当にMicroPython動くんだよね?的な意味も込めてこんなコードをmBlockから流してみました。
※mBlockの使い方の簡単な紹介は前回の記事で。

なお、Codeyのファームウェアは「23.01.013」です。(mBlock上で確認)

import codey, time, event
import uos

@event.button_a_pressed
def on_button_a_pressed():    
    codey.display.show('sysname:' + uos.uname().sysname, wait=True)
    #codey.display.show('nodename:' + uos.uname().nodename, wait=True) same as sysname
    codey.display.show('version:' + uos.uname().version, wait=True)
    codey.display.show('release:' + uos.uname().release, wait=True)
    codey.display.show('machine:' + uos.uname().machine, wait=True)

これをcodeyへアップロードして実行すると、codeyのLCDに以下の文字列が表示されます。
※手書きで写したので間違ってるかも・・。

sysname:esp32
version:23_01_007_004-ht3-21-g28f29e21-dirty on 2019-12-03
release:0.0.0
machine:ESP32 module wth ESP32

なるほど。わからん。けどまぁMicroPythonは動く模様。(“u”から始まるパッケージはMicroPython用らしい)

続いて、ネットワークを使ったプログラムを動作させてみます。
WiFiへの接続部分はcodeyのライブラリを活用して、外部へHTTP GETして表示するだけの単純なプログラムです。
HTTPリクエストにはureqeustを利用します。

import codey, time, event
# import ureqeust
import urequests as requests

@event.button_a_pressed
def on_button_a_pressed():
    res = ""
    codey.wifi.start('SSID', 'PASSWORD', codey.wifi.STA)
    time.sleep(1)
    if codey.wifi.is_connected():
        codey.emotion.smile()
        res = requests.get(url = 'https://www.hits-net.com/blog/ip2.php').text
        codey.display.show("myIP:" + res, wait=False)
        
    else:
        codey.emotion.shiver()

これを実行すると、このサーバ上のIPアドレスを表示するだけのPHPの実行結果を拾ってLCDに表示します。

こいつデバッグが超しづらい。
MicroPythonだとWebREPLっていうブラウザ経由で対話型に実行する仕組みとかを使って皆さんやってるみたいなのですが、codeyにファイルを転送する仕組み、ってかそもそもできんのか・・・?がわからず、とりあえずディスプレイの表示とかcodeyの動きを頼りにデバッグするしかないですね。

ここまで動けば、あとはもうセンサーの結果を拾ってPOSTしたり、別のサーバ上からコマンドをGETで拾ったりといろいろできそうなことがわかります。

codey rocky自体にもクラウドメッセージという機能があるみたいですがまだ使い方がわかりません。。。
あと将来的にIFTTTに対応するとかしないとかの話もあるようです。

赤外線周りも使えそうなので、ちょっとしたリモコンにもできる・・・かなぁ。

【バックナンバー】

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

STEM教育用のおもちゃ「codey rocky」を買ってみた

ども。こんにちは。

唐突に「ロボットのおもちゃ」がほしいなぁと思い、Amazon「のコミュニケーションロボット」を眺めたら良さそうなものがあったので買ってみましたとかそんな感じの話です。

COZMOとか言うのが面白そうだったんですが、お値段が結構高いのと、製造元のAnkiという会社が開発を終了したらしいです。

COZMOは過去HIKAKINさんがYouTubeで紹介していますね。

この分野あまり興味なかったのですがこんな記事がありました。

家庭用ロボットのAnkiが経営破綻、その“失敗”が残した功績と教訓

そういやペッパーくんも最近見かけませんねえ。

で、今回購入したのは、

Makeblock プログラミングロボット codey rocky 日本語版 【日本正規代理店品】

¥13,800なり。ちょっとおもちゃにしては高いか。

対象年齢は6歳以上らしいですが、おっさんもう軽く30オーバーだよ。。。

これは上述のCOZMOのような感じではなく、教育用?のロボットみたいです。
最近では小学校でのプログラミング教育が必修化とかそんな話もあるみたいですね。
海外ではSTEM教育(“Science, Technology, Engineering and Mathematics” の頭文字)なんていう言葉もあるみたいです。

で、このcodey rockyは自分でプログラムを書いて実行させられます。
しかも、ScratchベースのプログラムだけじゃなくPythonでコードが書けるらしい。

またいろんなセンサーがついていて、センサーを組み合わせたちょっとしたIoT的なこともできそう。赤外線も送受信できるみたい。どこまでこちらがわで制御できるかはまだ調べてないですが、Wi-FiやBluetoothも使えるみたい。

制御基板にESP32というのが搭載されていて、割とIoT界隈では著名なチップのようです。

参考リンク

最近の子供は面白そうなおもちゃがあって羨ましいですね。

前置きが長くなりましたが、届いたので開封します。

異国のキッズが楽しそうに遊んでいるパッケージ。

ROBOT LIFEという会社が代理店をしているみたいです。

箱の中身。

mblockというアプリのダウンロード方法がかかられたかんたんなガイドと電圧などの規格が書かれた紙、謎のシール・・・?子ども用なのでお名前シールといったところでしょうか?

本体。これはcodeyですね。

下側にはrockyとUSBケーブル(Micro B-A)とストラップが入っていました。

codeyとrockeyを合体させてみました。

電源を入れたところ。なんかうにゃうにゃ言ってます。

初期状態である程度プログラムが入っているようで、AボタンやBボタンを押すと反応します。

もちろんそれが目的ではないので、続いてPCの準備をします。

環境はmacOS Catalina 10.15.3です。

以下のURLからmblockというIDEをダウンロードします。

https://www.mblock.cc/ja-jp/download/

インストールします。って、これ6歳でできるかな・・・?
特にmacOSだと野良アプリはブロックされるし。

とりあえず立ち上げて、サインインします。今回はGoogleアカウントでサインインしました。

【2020/02/11追記】
mBlockにGoogleアカウントでサインインしていましたが、保存がうまく行かなかったり、makeblock社のサイト上でのプロフィールが見れなかったりと不具合があったので、結局個別アカウントを作成しました。
また、IoT関連のブロックを使って天気や気温を外部から取得する場合、ここで登録したアカウント?に発行されるAPIキーを使うようなので、アカウントがちゃんと動作していないとIoT関連機能が一部使えない模様です。

こんなGUI。

続いてCodeyに接続してみます。付属のUSBケーブルとPCをつないでデバイスタブから接続をクリック。
ちなみに、Bluetoothで接続してプログラムをアップロードしたりするには、PC用の専用ドングルがいるらしいです。
¥2,500くらいするのでまぁケーブルでいいか。

とりあえずファームウェアを更新しました。

いろんな各様拡張機能があったので全部突っ込みました。

とりあえず、適当に作ってみました。
Scratchベースでブロックを組み合わせればすぐに作れます。
また、ブロックをPythonコードで表示することもできます。

ブロックベースで作ったものはPhtyonのコードで表示できますが、編集はできない模様です。また1からPythonで作ることもできます。一応補完機能とかも付いてるのですが、拡張のIRとかに関してはコードの補完ができないっぽい。

なので、ブロックで適当に組んでコードをみて、それを別のエディアとかに貼り付けながら、Pythonで書き起こすっていう使い方になりそう。

ブロック

コード

# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, time, rocky, event

@event.button_a_pressed
def on_button_a_pressed():
    time.sleep(1)
    codey.emotion.look_around()
    if rocky.color_ir_sensor.is_obstacle_ahead():
        codey.emotion.sad()
        codey.stop_all_scripts()

    rocky.forward(50, 1, straight = True)

上記のプログラムをcodey rockyにアップロードするとこんな動作になります。

 

おー、これなかなか楽しいぞ。
画像認識とかもできるようなので、もうちょっと色々触ってみます。

普通に大人向けのプログラミングの実習にも使えそうな気がしますねー。

てか大人でもここまで一発でできない人多いと思う。。。

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

 

 

自分の尻拭いプロジェクト – 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が設定できずいろいろ悩んでポート変えていたみたいです。

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

皆様良いお年を。

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

 

MacBook Airのキーボードが壊れたかもしれない・・・・

ども。おはようございます。

昨日盛大にやらかしたので、今日は早起きして環境再構築に向けて色々準備していますが、なんとそんなタイミングでMacbook Airのキーボードが壊れたかも・・・。

泣きっ面に蜂、踏んだり蹴ったり、ピンチにパンチ・・・そんな感じです。

キーボードの右半分が死んだようで。
幸いパスワードに使っている文字や記号数字はセーフでした。ほんと不幸中の幸い。

症状としては、「o」キーを押すと「oi」に、「u」キーを押すと「oui」にとか、カーソルキーを押すと「]」が連続で入力されるとか。「:」とか「;」が入力できないとか。
制御文字っぽいのが勝手に送られるとか。

多分機械的な故障な気がします。少しほっといたら今は直ったぽいですが、これは時間の問題で再発しそう。。。
ちなみに水とかこぼしてないんだけどな・・・。

これはあれかな。ADが壊れた問題もあるので、無理に復旧せずに、新しいMacを買って、次はADに参加させるなよ、という啓示かなにかなのかな。。。

 

 

もうどないせーっちゅーねん。

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