كيفية تحديث عنوان IP واسم الاستضافة في Ubuntu عبر Bash

هناك عدة طرق لإدارة عنوان IP واسم الاستضافة لجهاز الحاسوب الخاص بك الذي يعمل بنظام Ubuntu. يتاح لمسؤولي النظام استخدام أدوات nmcli و netplan و hostname و hostnamectl. بينما تقوم هذه الأدوات بالعمل بشكل جيد بمفردها، كيف يمكنك إدراج هذه الأدوات لتعزيز أدائها في الأتمتة؟

يمكنك إنشاء نص برمجي Bash سيدير التكوين بالنيابة عنك. في هذا المقال، ستتعلم كيفية تعيين اسم مضيف جديد وتكوين معلومات عنوان IP، كل ذلك باستخدام نص برمجي Bash يقبل الإدخالات.

سيقوم كل مثال بالبناء على الآخر. بحلول نهاية المقال، ستكون لديك المعرفة اللازمة لإنشاء نص برمجي للتكوين يعمل بشكل كامل بلغة Bash للاستخدام على مضيف Ubuntu جديد أو قائم بالفعل.

المتطلبات

لا يتعين عليك أن تكون خبيرًا في برمجة Bash لمتابعة هذا البرنامج التعليمي، ولكن تأكد من وجود الشروط التالية.

  • A host running on Ubuntu. This tutorial uses Ubuntu 22.04 LTS.
  • امتيازات الجذر إلى مضيف 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"

وهذا كل شيء! يتيح لك دمج هاتين الأمرين في سطر واحد إجراء الأوامر في نص! ولكن لديك مهمة إضافية: تكوين خيارات الشبكة.

ضبط معلومات عنوان IP باستخدام netplan

أمر netplan هو الطريقة المعتمدة لإدارة معلومات عنوان IP لواجهة الشبكة لأجهزة Ubuntu الحديثة. يقوم أداة netplan بتجريد تكوينات الشبكة من مختلف الخدمات الخلفية باستخدام ملفات تكوين YAML.

تقوم أداة netplan بقراءة هذه الملفات التكوين خلال تشغيل النظام وتطبيقها على واجهة الشبكة المستهدفة. لماذا هذا مهم، قد تتسائل؟

عندما يكون تكوين الشبكة لديك في تنسيق YAML، يمكنك البدء في حفظ أو نسخ تكوينك إلى مستودع Git. ونظرًا لأن Git يوفر إمكانيات تتبع التغييرات، يمكنك استخدام نفس ملف التكوين دون الحاجة إلى إعادة إنشائه لنشر المستقبل باستخدام أنابيب CI / CD. تعلم، DevOps!

قبل إضافة سطور إلى ملف التكوين، يجب عليك إنشاء ملف التكوين باستخدام الأمر touch.

sudo touch ~/99-custom.yaml

سيضع الأمر أعلاه ملف التكوين الجديد في دليل الصفحة الرئيسية. من هنا، ستقوم بتشغيل الأمر echo لاستخدام 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.

باكتمال خيارات الشبكة، حان الوقت لبناء برنامج نصي واحد!

وضع كل شيء معًا في برنامج نصي باش

الآن، ستقوم بدمج كل شيء في برنامج نصي باش واحد باستخدام ما تعلمته من الأقسام السابقة. افتح محرر النص الخاص بك المفضل، وألصق الكود أدناه، واحفظ الملف كـ ~/host_deploy.sh.

#! /usr/bin/env bash
# host_deploy.sh
# الوصف:
# للاستخدام مع قالب Ubuntu Server ovf. يفترض صورة Ubuntu Cloud وحساب 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"

# إنشاء ملف تكوين netplan yaml جديد
sudo touch ~/99-custom.yaml

# تطبيق تكوين الشبكة على ملف تكوين netplan 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

# نسخ التكوين المخصص إلى مجلد 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 play. المهام في هذا البرنامج التعليمي ليست سوى عينة صغيرة من العناصر الأولية للتكوين التي يمكنك البدء في استخدامها في سكريبتات البناء والنشر الخاصة بك.

أنت الآن تعرف كيفية قبول إدخال المستخدم، وضبط المعلمات الأساسية للنظام باستخدام سكريبت Bash، وتطبيق تلك التقنية في تغيير أسماء المضيفين وعناوين IP في Ubuntu Linux.

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