カテゴリー: ガジェット Page 43 of 104

Ansible検証:ローカルNWでのAnsibleサーバ設定

概要

複数のサーバー管理を効率化するため、Ansibleサーバをインストールします。

前提・概要

今回は検証のため、単純構成。

  1. Ansibleのホスト
  2. Ansibleのクライアント

の2台構成であり、両方とも同じネットワークに属しています。

また、OSは共にUbuntu20.04です。

本項では、「Ansibleのホストサーバ」の設定を行います。

Ansibleホストの設定 (Ubuntu20.04)

Ansibleをインストールします。

sudo aptitude update
sudo aptitude install ansible
# 筆者はapitudeの方が好みです。必要に応じてaptを利用してください。

ホスト~クライアント間のSSH鍵を生成します。

Ansibleホスト~クライアント間はSSHで通信を行うので、鍵のペアを作成します。また、ローカルネットワークのためパスワードは省きます。

  • 鍵作成
ssh-keygen -t ecdsa -b 521
# 後続のプロンプトは全て空Enterにします。

ssh-copy-id [Ansibleホストのユーザ名]@[AnsibleクライアントのIPアドレス]
# Ansibleホストのユーザ名のパスワードを入力して鍵を登録します。
  • SSH通信確認
ssh [Ansibleホストのユーザ名]@[AnsibleクライアントのIPアドレス]
# SSHログインを確認します。

exit
# ログアウトします。

Ansibleホスト側の設定

  • 設定ファイルのコピー(ansible.cfg)
sudo cp -pi /etc/ansible/ansible.cfg /path/to/backup/directory/ansible.cfg.$(date +%Y%m%d)
# 任意のバックアップディレクトリを指定します。

diff -u /etc/ansible/ansible.cfg /path/to/backup/directory/ansible.cfg.$(date +%Y%m%d)
# 差分がないことでバックアップを確認します。
  • 設定ファイル修正

以下のファイルを、教義・信仰に沿ったエディタで編集します。

/etc/ansible/ansible.cfg
  • 編集内容
[defaults]
inventory      = /etc/ansible/hosts
remote_user    = your_username
private_key_file = /home/your_username/.ssh/id_ecdsa
# 上述した鍵ペアの「秘密鍵」の方を指定します。your_usernameはそれを作成したユーザ名です。

Ansibleホストインベントリの編集

  • 設定ファイルのコピー(ホストインベントリ)
sudo cp -pi /etc/ansible/hosts /path/to/backup/directory/ansible_host.$(date +%Y%m%d)
# 任意のバックアップディレクトリを指定します。

diff -u /etc/ansible/hosts /path/to/backup/directory/ansible_host.$(date +%Y%m%d)
# 差分がないことでバックアップを確認します。
  • 設定ファイル修正

以下のファイルを、教義・信仰に沿ったエディタで編集します。

/etc/ansible/hosts
  • 編集内容
[clients]
[クライアントのIPアドレス] ansible_ssh_user=[ホストのユーザ名]

Ansibleの設定確認

以下のコマンドを実行します。

ansible clients -m ping

次の結果が返ってくれば成功です。

(クライアントのIP)  | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

※以下のようなメッセージは今のところ無視して大丈夫です。

discovered Python interpreter at /usr/bin/python3, but future
installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.

これで、Ansibleサーバの簡単な検証が行えました。

クライアント側の設定やplaybookの作成は今後、実施していきます。

秩父サイクリングのデブリーフィング。

久しぶりの秩父にて

足繁く通っていた頃よりも増えた習慣/趣味。それらが今回のサイクリングでどのように作用したかを軽く触れてみます。

手書きの習慣:○

  • ほぼ日手帳
  • ジブン手帳
  • ダイアログノート

など、様々なアナログツールで書く習慣が大いに役立ちました。これによって、細かな気づきや思ったことを即座に書いて、その場は忘れることができました。

その後、こうして思い起こすことができるようになったのです。

特に、情報カードはマスターピースと言うべきもの。

  • 取り出しやすく
  • 書きやすく
  • 紙自体に適度な腰があり
  • 後から見やすい

と、当初は「こんなに大きいのか」と不安だったのですが、そこはやはり先人の知恵でした。

スマートウォッチ:○

予想通りというか、予想以上の活躍でした。

  • 走った距離
  • そのマッピング
  • 体調にどんな変化が起きたか

をつぶさに記録。「この道をどのぐらいの速度で走ることができた」は特に収穫。もう一度その道を走るときの参考になります。

ミラーレスカメラ:×

逆に、足かせとなりました。理由は単純。ある程度の平滑部を走る都内と異なり、アップダウンとあれた道がある所でカメラを持ち運ぶだけでも大変です。

衝撃に備えてカメラバッグに入れていましたが、そうなると水筒や食料のスペースを阻害します。

また、体を使った後、「カメラを構えて集中して撮影する」ための集中力を使い切るパターンがあったので、これは再考の余地ありです。

というよりも、もっと気軽に撮れてある程度の撮影が担保されるコンパクトデジカメでいいのではと本気で検討しました。

おまけ:食べたもの

サイクリングの途上の栄養補給的なものだったので、レストランには立ち寄らず。

道の駅で惣菜パンを戴きました。

これが疲れた体に染み渡る味。折しも秋風が心地よく、絶好のロケーションで食べることができたわけで。

まとめ

  • 途上の記録は何よりも大事
  • ただし、重視すべきは即時性と可搬性
  • 特に、カメラは敢えてコンデジにする

ってところです。

ChatGPTによるシェルスクリプト。(DNSレコード問い合わせ-2-)

続・DNSレコードを問い合わせるシェルスクリプト

このスクリプトを発展させました。

スクリプト内容

  • dns.sh
#!/bin/bash

# ドメイン名の入力を求める
read -p "ドメイン名を入力してください: " query

# 入力が未設定の場合の処理
if [ -z "$query" ]; then
    # デフォルトのDNSで問い合わせを行う
    default_dns=$(dig +short A +short myip.opendns.com @resolver1.opendns.com)
    echo "デフォルトのDNS: $default_dns"
else
    # ユーザーが指定したDNSで問い合わせを行う
    read -p "問い合わせるDNSを指定してください(空白Enterの場合はデフォルトのDNSを使用します): " dns_server

    if [ -z "$dns_server" ]; then
        dns_server="@resolver1.opendns.com"
    else
        dns_server="@$dns_server"
    fi

    # Aレコードの問い合わせ
    a_record=$(dig +short A $query $dns_server)
    if [ -z "$a_record" ]; then
        a_record="未設定です"
    fi

    # TXTレコードの問い合わせ
    txt_record=$(dig +short TXT $query $dns_server)
    if [ -z "$txt_record" ]; then
        txt_record="未設定です"
    fi

    # MXレコードの問い合わせ
    mx_record=$(dig +short MX $query $dns_server)
    if [ -z "$mx_record" ]; then
        mx_record="未設定です"
    fi

    # レコードの問い合わせの種類を選択するプロンプトを表示
    echo "問い合わせるレコードの種類を選んでください:"
    echo "1. Aレコード"
    echo "2. TXTレコード"
    echo "3. MXレコード"
    echo "4. すべてのレコード"

    # レコードの種類をユーザーに選択させる
    read -p "選択してください (1, 2, 3, または 4): " record_type

    # ユーザーの選択に応じて問い合わせ結果を表示
    case $record_type in
        1)
            # Aレコードの問い合わせ結果を表示
            echo "Aレコード: $a_record"
            ;;
        2)
            # TXTレコードの問い合わせ結果を表示
            echo "TXTレコード: $txt_record"
            ;;
        3)
            # MXレコードの問い合わせ結果を表示
            echo "MXレコード: $mx_record"
            ;;
        4)
            # すべてのレコードを表示
            echo "Aレコード: $a_record"
            echo "TXTレコード: $txt_record"
            echo "MXレコード: $mx_record"
            ;;
        *)
            # 無効な選択が入力された場合のエラーメッセージ
            echo "無効な選択です。1, 2, 3, または 4 を入力してください。"
            ;;
    esac
fi

追加した内容

「どこのDNSサーバに問い合わせを行うか」です。

  • ローカルDNSに問い合わせたい場合
  • 冗長化を組んでいるDNSのセカンダリーに反映されているかを確認したい場合
  • 世界的なDNSでもレコードが引けるか

を確認するケースが多々あったので、これを追加です。今回ChatGPTが指定したのはopendnsなので、

DNSサーバ名主なIPアドレス
Google Public DNS8.8.8.8
Cloudflare DNS1.1.1.1
Quad99.9.9.9
Level 3 DNS4.2.2.1

といったDNSサービスを変数に入れればデフォルトを変えてくれます。

手持ちの品と百均グッズによる情報カードの携帯システム-2-。

昨日に続いて、「情報カード(京大式カード)」をどうやって携帯するかの話。

答えは自分の手持ちにありました。

自家製ファスナーケース

こんな布製のケースがすでにありました。

大きさはこの通り。余裕があるのでカードが取り出しにくくなることもありません。

収納

ここに、折れ曲がりを防ぐために硬質ケースと合わせて挟み込みます。

間仕切りもついているので空いたところにペンを入れられると至れり尽くせりです。

これで、準備はほぼ整いました。

実際に持ち歩いてどうなるか、どう運用していくかはこれからです。

百均グッズによる情報カードの携帯システム-1-。

数日運用して「これは継続して使いたい」と思った情報カードによる記録システム。

気軽に携帯できる仕組みはできないかと探していたところ、百均にて見つけました。

収納・携帯システム

見つけたものは

  • B6ファスナーケース(2段ファスナー)
  • B6硬質ケース

の2つ。元々のサイズがB6なのでピッタリ入ることは証明済み。

収納

単にカードだけを入れると鞄の中で曲がってしまう可能性が大きいために、カードケースを下敷きとしています。

もう一つのファスナーはペン入れとして。この紙と合わせて書き味が非常に良かったプレピーをセレクト。

これで、出先でもある程度の携帯性を持たせつつ、それなりの速度でカードを取り出すことができるようになりました。

改善したい機能

  • ケースはマチ付きにしたいです。ちょっと取り出すときに引っかかります。
  • 静電気で張り付くことがあるので、メッシュ地辺りを検討したいです。

ChatGPTによるシェルスクリプト。(DNSレコード問い合わせ)

運用時に多用するdigコマンド。オプション入力が面倒なので、スクリプトをChatGPTに書いてもらいました。

スクリプトの動き

  1. ドメイン名をプロンプトで入力させる。
  2. どのレコードを問い合わせるのかをプロンプトで表示。
  3. 2の結果に従い、結果を返す。

スクリプトの内容

  • dns.sh
#!/bin/bash

# ドメイン名の入力を求める
read -p "ドメイン名を入力してください: " query

# 入力が未設定の場合の処理
if [ -z "$query" ]; then
    echo "エラー: ドメイン名が設定されていません。"
else
    # Aレコードの問い合わせ
    a_record=$(dig +short A $query)
    if [ -z "$a_record" ]; then
        a_record="未設定です"
    fi

    # TXTレコードの問い合わせ
    txt_record=$(dig +short TXT $query)
    if [ -z "$txt_record" ]; then
        txt_record="未設定です"
    fi

    # MXレコードの問い合わせ
    mx_record=$(dig +short MX $query)
    if [ -z "$mx_record" ]; then
        mx_record="未設定です"
    fi

    # レコードの問い合わせの種類を選択するプロンプトを表示
    echo "問い合わせるレコードの種類を選んでください:"
    echo "1. Aレコード"
    echo "2. TXTレコード"
    echo "3. MXレコード"
    echo "4. A / TXT / MXレコード"

    # レコードの種類をユーザーに選択させる
    read -p "選択してください (1, 2, 3, または 4): " record_type

    # ユーザーの選択に応じて問い合わせ結果を表示
    case $record_type in
        1)
            # Aレコードの問い合わせ結果を表示
            echo "Aレコード: $a_record"
            ;;
        2)
            # TXTレコードの問い合わせ結果を表示
            echo "TXTレコード: $txt_record"
            ;;
        3)
            # MXレコードの問い合わせ結果を表示
            echo "MXレコード: $mx_record"
            ;;
        4)
            # A / TXT / MXレコードを表示
            echo "Aレコード: $a_record"
            echo "TXTレコード: $txt_record"
            echo "MXレコード: $mx_record"
            ;;
        *)
            # 無効な選択が入力された場合のエラーメッセージ
            echo "無効な選択です。1, 2, 3, または 4 を入力してください。"
            ;;
    esac
fi

入力後、

chmod +x dns.sh

で実行権を付与。

実行例

./dns.sh 
ドメイン名を入力してください: google.co.jp
問い合わせるレコードの種類を選んでください:
1. Aレコード
2. TXTレコード
3. MXレコード
4. A / TXT / MXレコード
選択してください (1, 2, 3, または 4): 4
Aレコード: 142.250.199.99
TXTレコード: "v=spf1 -all"
MXレコード: 0 smtp.google.com.

今後足したい機能

  1. 問い合わせ先のDNSサーバの変数指定
  2. レコードを増やす
  3. 空エンター時の挙動

など、伸ばす余地はあります。

情報カードの収納。(B6ケース)

こちらの収納については公式を利用しました。

カードボックス

情報カード用のクリアボックスを購入。

B6をそのまま入れるタイプのため、大きさのインパクトは相当なもの。逆に言えば、ここに放り込みさえすれば「なくなる」という心配はないでしょう。

インデックス

インデックスもついでに手に入れました。箱と一緒のために柔軟性は抜群です。

今後の展開

上述したように、予想外の大きさ。そして早速、「これをメインとしたアナログの記録システム」が確立できそうな予感。

専用の保管スペースや携帯方法など、課題は山積みです。

オフライン版チケット。(情報カード)

ペンと紙の速度で、Redmineのチケット管理をやってみたいと思い、導入です。

情報カード(B6版)

試したのはこの情報カード。いわゆる「京大式カード」と同サイズのものです。

こちらにしたのはリング穴が通っているので後々の分類・整理がしやすいという目論見。

大きさの比較はこんな感じです。

最初の印象は「こんなに大きくて持て余すのではないか?」

でしたけど、試し書きしてすぐに問題ないと判断しました。

第一印象

表面が罫線で裏面が方眼紙なので、アイディアをまとめやすく、ちょっとした絵や図面を書くのにも向いています。

万年筆の乗りがとても良かったのは嬉しい誤算でした。

このように、

  • とりとめのないこと
  • 後でデジタルで「チケット」として残すもの

何よりも「アナログとデジタルの橋渡し」として役立ってくれることを期待です。

Future has’nt been written yet. (『Back to the Future』×ほぼ日コラボ)

この段階では、カバーは使い続けたいと言ったものの、「もっと使いたいデザインのものが出て来た」ため、これは撤回です。

Back to the Futureコラボ手帳

https://www.1101.com/store/techo/ja/magazine/contents/loft_bttf/ag8mbxqle.html

このニュースを目にして、購入です。

自分の思考フレームの一部となっている映画だけに、「早く発売日が来ないか」と待ちわびていた逸品でした。

オリジナルカバー

こちらのカバーは作品を象徴するアイテム、デロリアン。真ん中に次元転移装置も記されています。

栞にあしらわれているのは「1.21ジゴワット」の電力を供給するために使われた落雷を表しています。

ウィークリー

ウィークリーにあしらわれているのは、これまた作品の(二つ目の)代名詞と言うべきホバーボード。

カバーオンカバー

専用のカバーオンカバーもありました。次元転移装置の

  • 目的時間
  • 現在時間
  • 前回タイムトラベルした時間

をそれぞれ示しています。

手帳カバーに更に被せることで、更に雰囲気たっぷりです。

曜日を判別するmot_d。(Ubuntuシェルスクリプト)

概要

サーバにターミナル経由でログインした際に表示されるメッセージ、motd(Message of the Day)。

「特定の日時・曜日をを判別して、その条件を満たしたときにメッセージを表示することはできないか?」

ということでシェルスクリプトを書いてみました。

動作を確認した環境

  • Ubuntu 20.04

スクリプト内容

  • /etc/update-motd.d/02-Friday_Check(または既存のupdate-motdに追記します)

※管理者権限で追記する必要があります。

#!/bin/bash

# 現在の言語ロケールを保存します。
original_locale=$(locale | grep "LANG=" | cut -d= -f2)

# ロケールを英語に修正します。
export LANG="en_US.UTF-8"

# ロサンゼルス(カリフォルニア)の曜日を調べます。
day_of_week=$(TZ="America/Los_Angeles" date +"%A")

# 金曜日だった場合のみメッセージを表示します。
if [ "$day_of_week" == "Friday" ]; then
    echo "Today is Friday in California."
fi

# 元の言語ロケールに戻します。
export LANG="$original_locale"

追記後、

sudo chmod +x /etc/update-motd.d/02-Friday_Check

として、実行権限を付与してください。(既存スクリプトに追記する場合はその限りではありません)

スクリプトの動き

サーバにログインした際に

  1. 現在の言語ロケールを保存します。
  2. 言語ロケールを英語に修正します。(曜日の変数をFridayに固定しているため)
  3. タイムゾーンをチェックして、カリフォルニアで金曜日かどうかを判別します。
  4. PST(太平洋標準時)/PDT(太平洋夏時間)で金曜日の時間帯に
  5. Today is Friday in California. を表示します。
  6. 最後に、保存された言語ロケールへと戻します。

まとめ

今回は単に文字列を判別するだけ。ですが、月末時の処理や保守更新などの応用が利きそうです。

Page 43 of 104

Powered by WordPress & Theme by Anders Norén