Ubuntu コンピューターの IP アドレスとホスト名を管理するには、いくつかの方法があります。システム管理者は、nmcli、netplan、hostname、および hostnamectl ツールを自由に使用できます。これらのツールは単独でも優れた機能を発揮しますが、これらのツールをどのように組み込んで自動化ゲームを強化できますか?
構成を処理する Bash スクリプトを作成できます。この記事では、入力を受け入れる Bash スクリプトを使用して、新しいホスト名を設定し、IP アドレス情報を構成する方法を学習します。
それぞれの例は、他のものの上に構築されます。この記事の終わりまでに、新規または既存の Ubuntu ホストで使用するために Bash で完全に機能する構成スクリプトを構築するために必要な知識を身につけます。
前提条件
このチュートリアルに従うために Bash シェル スクリプトの専門家である必要はありませんが、次の要件を満たしていることを確認してください。
- Ubuntu で実行されているホスト。このチュートリアルでは、Ubuntu 22.04 LTS を使用します。
- Ubuntu ホストに対する root 権限
vim
などのテキスト エディタ 、nano
、または VSCode .
hostnamectl によるホスト名の設定
すべてのホストには一意の名前が必要です。 hostnamectl コマンドを使用すると、ホスト名を照会または変更できます。この例では、現在のホスト名を任意の名前に変更するための構文を以下に示します。
sudo hostnamectl set-hostname "new-hostname"
新しいホスト名として、set-hostname の共通パラメーターの後に二重引用符 ("") で囲まれた文字列値を指定して、hostnamectl コマンドを実行します。このコマンドを手動で実行していた場合、問題なく動作するはずです。
しかし、これをユーザー入力を受け入れるスクリプトに入れたい場合はどうでしょうか? read コマンドを使用して開始し、その後に prompt、 を表すパラメータ -p を続けます。 このプロンプトに何を入力するかをユーザーに伝える文字列。次に、入力を NEW_HOSTNAME という新しい変数に保存します。
read -p "Please type the desired hostname: " NEW_HOSTNAME
ホスト名が NEW_HOSTNAME 変数に格納されたら、次の例のように変数を hostnamectl コマンドに提供できます。
sudo hostnamectl set-hostname "$NEW_HOSTNAME"
以上です!これら 2 つのワンライナーを組み合わせることで、スクリプト内でコマンドを機能させることができます。ただし、追加のタスクが 1 つあります。それは、ネットワーク オプションの構成です。
netplan
でIPアドレス情報を設定する
netplan コマンドはデファクトです 最新の Ubuntu ホストのネットワーク インターフェイスの IP アドレス情報を管理する方法。 netplan ツールは、YAML 構成ファイルを使用してさまざまなバックエンドからネットワーク構成を抽象化します。
netplan ツールは、システムの起動時にこれらの構成ファイルを読み取り、ターゲット ネットワーク インターフェイスに適用します。なぜそれが重要なのですか?
ネットワーク構成を YAML にすると、Git リポジトリへの構成の保存またはバックアップを開始できるようになります。また、Git は変更追跡機能を提供するため、CI / CD パイプラインを使用して将来の展開のために再作成する必要なく、同じ構成ファイルを使用できます。ご存知、DevOps です!
構成ファイルに行を追加する前に、touch コマンドを使用して構成ファイルを作成する必要があります。
sudo touch ~/99-custom.yaml
上記のコマンドは、新しい構成ファイルをホーム ディレクトリに配置します。ここから、echo コマンドを実行して echo します。 STDOUT> (追加) および>> (追加) の入力リダイレクトを使用して、入力した内容を構成ファイルに 1 行ずつ挿入します。
注:YAML のインデントには、タブではなくダブル スペースを使用してください。
echo "network:" > ~/99-custom.yaml
echo " ethernets:" >> ~/99-custom.yaml
echo " enp0s31f6:" >> ~/99-custom.yaml
echo " dhcp4: false" >> ~/99-custom.yaml
echo " addresses:"
echo " - [$IP_ADDRESS]" >> ~/99-custom.yaml
echo " routes:"
echo " - to: default"
echo " via: $GATEWAY_ADDRESS" >> ~/99-custom.yaml
echo " nameservers:" >> ~/99-custom.yaml
echo " addresses: [$PRIMARY_DNS_ADDRESS, $SECONDARY_DNS_ADDRESS, 208.67.222.222, 208.67.220.220]" >> ~/99-custom.yaml
echo " version: 2" >> ~/99-custom.yaml
それぞれの echo コマンドで、STDOUT を使用して入力をリダイレクトすることにより、適切なスペースを使用して YAML 構成を構築します。または、テキスト エディタを使用してこのファイルを手動で作成することもできます。ただし、手動でファイルを作成する必要はありません。
代わりに、同じ read
を使用して、必要な IP アドレス情報を入力するようユーザーに促します。 コマンド。
ヒント:Ubuntu のすべてのネットワーク インターフェイス情報を一覧表示する 1 つの方法は、ip address コマンドを実行することです。
read -p "Now type the IP address in CIDR notation, i.e. 192.168.1.1/24: " IP_ADDRESS
read -p "The gateway IP: " GATEWAY_ADDRESS
read -p "The primary DNS IP: " PRIMARY_DNS_ADDRESS
read -p "And finally, the secondary DNS IP: " SECONDARY_DNS_ADDRESS
そのほうがいいです。スクリプトで使用するために、ユーザー入力をいくつかの変数に再度リダイレクトできるようになりました。
このチュートリアルでは詳しく説明しませんが、設定できるプロパティは他にもたくさんあります。その他の一般的なプロパティを確認したい場合は、netplan のマニュアル ページを必ずお読みください。
ネットワーク オプションが完成したら、スクリプトを 1 つ作成します。
すべてを Bash スクリプトにまとめる
ここで、前のセクションで学んだことを使用して、すべてを 1 つの Bash スクリプトに結合します。任意のエディターを開き、以下のコードを貼り付けて、ファイルを ~/host_deploy.sh
として保存します。 .
#! /usr/bin/env bash
# host_deploy.sh
# Description:
# For use with Ubuntu Server ovf template. Assumes Ubuntu Cloud image and default sudo account.
# This script is meant to run with sudo.
# Example:
# sudo bash ~/host_deploy.sh
# Gather input from user
read -p "Please type the desired hostname: " NEW_HOSTNAME
read -p "Now type the IP address in CIDR notation, i.e. 192.168.1.1/24: " IP_ADDRESS
read -p "The gateway IP: " GATEWAY_ADDRESS
read -p "The primary DNS IP: " PRIMARY_DNS_ADDRESS
read -p "And finally, the secondary DNS IP: " SECONDARY_DNS_ADDRESS
# Set a new hostname
sudo hostnamectl set-hostname "$NEW_HOSTNAME"
# Create a new netplan yaml config file
sudo touch ~/99-custom.yaml
# Apply network config to netplan yaml config file
# Making some assumptions here about the adapter name
echo "network:" > ~/99-custom.yaml
echo " ethernets:" >> ~/99-custom.yaml
echo " enp0s31f6:" >> ~/99-custom.yaml
echo " dhcp4: false" >> ~/99-custom.yaml
echo " addresses:"
echo " - [$IP_ADDRESS]" >> ~/99-custom.yaml
echo " routes:"
echo " - to: default"
echo " via: $GATEWAY_ADDRESS" >> ~/99-custom.yaml
echo " nameservers:" >> ~/99-custom.yaml
echo " addresses: [$PRIMARY_DNS_ADDRESS, $SECONDARY_DNS_ADDRESS, 208.67.222.222, 208.67.220.220]" >> ~/99-custom.yaml
echo " version: 2" >> ~/99-custom.yaml
# Copy the custom config to the netplan folder and apply
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml
# Apply the new config
sudo netplan apply
# Reminder to restart to reset state
echo "Please restart to complete host deployment!!"
スクリプトを実行するには、以下のコマンドを実行して bash
でスクリプトを呼び出します
sudo bash ~/host_deploy.sh
スクリプトは、新しいホスト名と IP アドレス情報を入力するように促し、変更を有効にするためにホストを再起動するよう促します。
ユーザー ディレクトリにスクリプトが作成されたので、ゴールデン イメージを作成して再利用したり、技術者や日常的にこのタスクを実行する人々と共有したりできます。
結論
おめでとう!記事の最後にたどり着き、繰り返し使用できる完全に機能する Bash スクリプトを作成しました。
このスクリプトを Ansible で使用して、Ansible play を使用して質問に回答することもできます。このチュートリアルのタスクは、ビルド スクリプトとデプロイ スクリプトで使用を開始できる初期構成項目のごく一部のサンプルにすぎません。
ユーザー入力を受け入れ、Bash スクリプトを使用して基本的なシステム パラメータを設定し、Ubuntu Linux でホスト名と IP アドレスを変更する際にその手法を適用する方法がわかりました。