איך לעדכן את כתובת ה-IP ושם המארח של Ubuntu דרך Bash

ישנם מספר דרכים לנהל את כתובת ה-IP והשם המארח של מחשב ה-Ubuntu שלך. למנהלי מערכת יש ברשותם את הכלים nmcli, netplan, hostname ו-hostnamectl. בעוד שהכלים הללו עושים עבודה טובה לבדם, כיצד ניתן לכלול אותם כדי לשדרג את המשחק באוטומציה?

ניתן ליצור סקריפט Bash שיטפל בהגדרות עבורך. במאמר זה, תלמד כיצד להגדיר שם מארח חדש ולהגדיר מידע על כתובת ה-IP, הכל בעזרת סקריפט Bash שמקבל קלטים.

כל דוגמה תבנה על הקודמת. עד סוף המאמר, יהיה לך את הידע הנדרש לבניית סקריפט הגדרה מתקני לשימוש על מארח Ubuntu חדש או קיים.

דרישות מוקדמות

אין צורך להיות מומחה בתסריטות בשל מעטפת Bash כדי לעקוב אחרי המדריך הזה, אך ווודא שיש לך את הדרישות הבאות.

  • A host running on Ubuntu. This tutorial uses Ubuntu 22.04 LTS.
  • הרשאות root למארח Ubuntu.
  • A text editor, such as vim, nano, or VSCode.

הגדרת השם המארח בעזרת hostnamectl

כל מארח צריך לקבל שם ייחודי. באמצעות הפקודה hostnamectl ניתן לשאול או לשנות את השם המארח. במקרה זה, התחביר הוא כפי שמוצג למטה כדי לשנות את שם המארח הנוכחי שלך לכל שם שתבחר.

sudo hostnamectl set-hostname "new-hostname"

אני מפעיל את הפקודה hostnamectl עם הפרמטר הנפוץ של set-hostname שמתבצע אחריו ערך מחרוזת בתוך צפיפות (""). אם היית רץ את הפקודה הזו באופן ידני, היא הייתה עובדת ללא בעיה.

אבל מה קורה אם תרצה לכלול את זה בתסריט שמקבל קלט מהמשתמש? התחל עם השימוש בפקודה read, ואז בפרמטר -p, שמציין prompt, ומחרוזת שמסבירה למשתמש מה להזין לקלט הזה. לאחר מכן, שמור את הקלט במשתנה חדש, בשם NEW_HOSTNAME.

read -p "Please type the desired hostname: " NEW_HOSTNAME

לאחר שהשם המארח מאוחסן במשתנה NEW_HOSTNAME, תוכל לספק את המשתנה לפקודת hostnamectl כמו בדוגמה למטה.

sudo hostnamectl set-hostname "$NEW_HOSTNAME"

וזהו! השלבת שני ה-one-liners האלה מאפשרת לפקודות לעבוד בתסריט! אך יש לך משימה נוספת: להגדיר את אפשרויות הרשת.

הגדרת מידע על כתובת ה-IP עם netplan

פקודת netplan היא השיטה de facto לניהול מידע על כתובת ה-IP של ממשק רשת עבור מחשבי Ubuntu המודרניים. כלי ה-netplan מפשט את ההגדרות של רשת ממגוון שורפים באמצעות קבצי הגדרת YAML.

כלי ה-netplan קורא את קבצי ההגדרה הללו במהלך ההפעלה של המערכת ומחיל אותם על ממשק(י) הרשת היעד. למה זה חשוב, אתה יכול לשאול?

יש לך את התצורה של הרשת שלך ב־YAML מעצים אותך להתחיל לשמור או לגבות את התצורה שלך למאגר Git. ומאחר ו־Git מספק יכולות מעקב אחר שינויים, תוכל להשתמש באותו קובץ תצורה ללא צורך ליצור אותו מחדש עבור הפרטות הבאות בפעם הבאה שתרצה להפעיל באמצעות צינורות CI/CD. אתה יודע, DevOps!

לפני שתוסיף שורות לקובץ התצורה, עליך ליצור את קובץ התצורה באמצעות פקודת ה־touch.

sudo touch ~/99-custom.yaml

הפקודה הנ"ל תכניס את קובץ התצורה החדש אל תיקיית הבית שלך. מכאן, תפעיל את פקודת ה־echo כדי להדפיס את מה שאתה מקליד ולהכניס את זה לתוך קובץ התצורה שורה אחר שורה באמצעות הפניית קלט ל־STDOUT באמצעות > (להוסיף) ו־>> (להוספה).

הערה: יש להשתמש ברווחים כפולים ולא בטאבים להזחה ב־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, אתה בונה את קובץ התצורה ב־YAML בעזרת הזנת קלט תואם באמצעות STDOUT. באופן אלטרנטיבי, תוכל לבנות את קובץ זה באופן ידני באמצעות עורך טקסט. אך אין צורך לבנות את הקובץ באופן ידני.

במקום זאת, דרוש לעצור את המשתמש להזין את פרטי כתובת ה־IP שאתה צריך באמצעות פקודת ה־read זהה.

טיפ: אחת הדרכים לרשום את כל מידע ממשקי הרשת ב־Ubuntu היא על ידי הרצת הפקודה 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.

עם האפשרויות של הרשת השולמוות, הגיע הזמן לבנות סקריפט יחיד!

איך לשים הכל יחד בסקריפט Bash

עכשיו, תשלב את כל הדברים לתוך סקריפט Bash יחיד עם מה שלמדת מהסעיפים הקודמים. פתח את העורך שלך, הדבק את הקוד למטה, ושמור את הקובץ כ ~/host_deploy.sh.

#! /usr/bin/env bash
# host_deploy.sh
# תיאור:
# לשימוש עם תבנית OVF של שרת אובונטו. מניח תמונת ענן של אובונטו וחשבון sudo ברירת מחדל.
# סקריפט זה מיועד להפעלה עם sudo.
# דוגמה:
# sudo bash ~/host_deploy.sh

# איסוף קלט מהמשתמש
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

# הגדרת שם מארח חדש
sudo hostnamectl set-hostname "$NEW_HOSTNAME"

# יצירת קובץ תצורה חדש של yaml של netplan
sudo touch ~/99-custom.yaml

# החלת הגדרות רשת לקובץ yaml של netplan
# עשויות הנחות כאן על שם המתאם
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

# העתקת הקונפיגורציה המותאמת אישית לתיקיית netplan ויישום
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml

# החלת הגדרות חדשות
sudo netplan apply

# תזכורת לאתחול מחדש כדי לאפס את המצב
echo "Please restart to complete host deployment!!"

כדי להריץ את הסקריפט, הריצו את הפקודה הבאה כדי לקרוא את הסקריפט עם bash בטרמינל שלכם.

sudo bash ~/host_deploy.sh

הסקריפט מעז לך להזין שם מארח חדש ומידע על כתובת IP ומזכיר לך לאתחל את המארח כדי שהשינויים ייכנסו לתוקף.

עכשיו שיש לך סקריפט פועל בתיקיית המשתמש שלך, ניתן ליצור תמונה זהב לשימוש חוזר או לשיתוף עם טכנאים ואלה שמבצעים את המשימה הזו באופן קבוע.

סיכום

מזל טוב! הצלחת! הגעת לסוף המאמר ובנית סקריפט Bash מאוד פועלי שתוכל להשתמש בו מספר פעמים.

אתה יכול גם לנסות להשתמש בסקריפט הזה עם Ansible ולענות על השאלות באמצעות משחק Ansible. המשימות במדריך זה הן רק דוגמה קטנה של פריטי הגדרה ראשוניים שתוכל להתחיל להשתמש בהם בסקריפטים שלך לבנייה והפצת התוכנה שלך.

עכשיו אתה יודע לקבל קלט מהמשתמש, להגדיר פרמטרים בסיסיים של מערכת באמצעות סקריפט Bash, ולהחיל את הטכניקה הזו בשינוי שמות מארחים וכתובות IP ב-Ubuntu Linux.

Source:
https://adamtheautomator.com/change-linux-ip-hostname-bash-script/