ในบทความนี้ เราจะครอบคลุมขั้นตอนพื้นฐานที่จำเป็นในการติดตั้ง Linux CentOS 8 แบบสะอาดจากศูนย์ และการตั้งค่าเซิร์ฟเวอร์เบื้องต้น
มีอะไรใหม่ใน CentOS 8?
เวอร์ชันที่ 8 ของ CentOS เปิดตัวเมื่อวันที่ 24 กันยายน 2019 CentOS เป็นการกระจาย Linux ที่พัฒนาจาก Red Hat Enterprise Linux (RHEL) โดย Red Hat และเข้ากันได้อย่างสมบูรณ์
มาดูการเปลี่ยนแปลงหลักในการเปิดตัว CentOS 8:
- ใช้ Linux kernel 4.18;
- เปลี่ยนจากตัวจัดการแพ็กเกจ yum เป็น dnf ปัจจุบัน yum ยังคงมีอยู่ในรูปแบบ symlink ไปยัง dnf;
- คลังหลัก (repository) ถูกแบ่งออกเป็น 2 ส่วนคือ BaseOS และ AppStream เพื่อให้ผู้ใช้ติดตั้งเวอร์ชันแพ็กเกจที่แตกต่างกันได้ BaseOS ทำงานเหมือนเดิม;
- ซอฟต์แวร์ทุกอย่างได้รับการอัปเดต รวมถึงเคอร์เนล ตอนนี้สามารถติดตั้ง PHP 7.2 จากคลังพื้นฐานได้แล้ว (สุดท้ายก็มี!);
- Iptables ถูกแทนที่ด้วย nftables;
- Network-scripts ไม่ได้ถูกใช้เป็นค่าเริ่มต้นในการกำหนดค่าเครือข่าย ควรใช้ Network Manager ในการจัดการเครือข่าย;
- ติดตั้งเว็บอินเตอร์เฟซจัดการเซิร์ฟเวอร์ cockpit โดยค่าเริ่มต้น (สะดวกสำหรับมือใหม่);
- ใช้ Podman (แทน Docker หรือ Moby) ในการจัดการคอนเทนเนอร์;
- มี TCP/IP stack เวอร์ชันใหม่ 4.16 เพื่อประสิทธิภาพสูงกว่าและรองรับอัลกอริทึมควบคุม BBR และ NV;
- เวอร์ชันการกระจายใหม่ๆ
วิธีติดตั้ง CentOS 8 จากไฟล์ ISO Image
เนื่องจากผมติดตั้ง CentOS บนเครื่องเสมือน KVM ผมจึงดาวน์โหลดไฟล์ ISO ติดตั้งจาก mirror ทางการ (https://www.centos.org/download/mirrors/) ล่วงหน้า และมาวน์ท์เพื่อติดตั้ง OS บนเซิร์ฟเวอร์เสมือน (หากต้องการติดตั้งบนเซิร์ฟเวอร์จริง ให้เขียนไฟล์ ISO ลง USB) กระบวนการติดตั้ง CentOS 8 ไม่แตกต่างจากเวอร์ชันก่อนหน้า และบทความนี้เป็นคู่มือสำหรับผู้ที่ทำครั้งแรก
ข้อกำหนดขั้นต่ำที่แนะนำสำหรับการติดตั้ง CentOS 8 คือ พื้นที่ดิสก์อย่างน้อย 10GB และ 712MB RAM ต่อ CPU core
บูทคอมพิวเตอร์หรือเครื่องเสมือนจากไฟล์ติดตั้ง CentOS ในขั้นตอนแรก จะมีเมนูให้เลือกการดำเนินการต่อ เนื่องจากเราต้องการติดตั้ง ให้เลือกเมนูแรก:
Install CentOS Linux 8.0.1905

หลังจากเลือกแล้ว กระบวนการติดตั้งจะเริ่มขึ้น:

ระหว่างที่โหลดซอฟต์แวร์ที่จำเป็น คุณสามารถดูได้เลย ไม่ต้องทำอะไร
เมื่อหน้าจอสีดำเปลี่ยนเป็นโหมดโต้ตอบพร้อมโลโก้ CentOS ให้เตรียมคีย์บอร์ดและเมาส์ไว้

ที่หน้าจอต้อนรับ จะให้เลือกภาษาที่ใช้ในการติดตั้ง จากนั้นคลิก Continue ในเมนูถัดไปจะเลือกการตั้งค่าติดตั้ง CentOS พื้นฐาน

เพื่อเริ่มติดตั้ง จำเป็นต้องกำหนดค่าเพียงรายการเดียวคือ Installation Destination ที่นี่เลือกเลย์เอาต์พาร์ติชันดิสก์ แต่ผมชอบกำหนดค่าเครือข่าย เวลา และวันที่ในขั้นตอนนี้

เลือกการตั้งค่าตามโซนเวลาของคุณ
เพื่อกำหนดค่าเครือข่าย ให้คลิก Network & Host Name

ระบุชื่อเซิร์ฟเวอร์ในช่อง Host Name และคลิก Configure เพื่อกำหนดค่าอินเตอร์เฟซเครือข่าย

ในแท็บ General ให้ติ๊ก Automatically connect to this network when it is available เพื่อเริ่มอินเตอร์เฟซเครือข่ายนี้โดยอัตโนมัติ
ไปที่แท็บ IPv4 Settings (หรือ IPv6 หากใช้โปรโตคอลนี้) เพื่อตั้งค่า IP address, netmask, gateway และ DNS servers:

เพื่อระบุ IP address เฉพาะ ให้เลือก method เป็น Manual และคลิก Add หลังจากบันทึกการเปลี่ยนแปลง ให้กลับไปหน้าจอตั้งค่าเครือข่ายหลัก

ตามภาพหน้าจอ IP address ถูกเพิ่มแล้ว และอินเตอร์เฟซเครือข่ายทำงานอยู่ (status: Connected)
ขั้นตอนต่อไปคือการแบ่งพาร์ติชันดิสก์:

เพื่อแสดงกระบวนการติดตั้ง ผมใช้การกำหนดค่าพื้นที่จัดเก็บอัตโนมัติของนักพัฒนา CentOS หากต้องการแบ่งพาร์ติชันดิสก์ด้วยวิธีอื่น ให้เลือก Custom
หากคอนโทรลเลอร์จัดเก็บของเซิร์ฟเวอร์ไม่รองรับ hardware RAID สามารถกำหนดค่า software RAID บนดิสก์เซิร์ฟเวอร์โดยใช้ mdadm
เนื่องจากเครื่องเสมือนของผมเคยติดตั้ง Guest OS มาก่อน ตัวติดตั้งจึงตรวจพบมัน ผมลบพาร์ติชันของ OS เดิมในเมนูถัดไปที่ปรากฏขึ้น:


สามารถลบพาร์ติชันได้โดยคลิก Delete all จากนั้นคลิก Reclaim space เพื่ออัปเดตขนาดพื้นที่ดิสก์ที่ว่าง
รายการแพ็กเกจสำหรับการติดตั้งเลือกได้ใน Software Selection หากจะใช้ CentOS 8 เป็นเซิร์ฟเวอร์ เลือก Minimal Install พร้อมกับ Standard และ Guest Agents (หากติดตั้ง Guest OS บน VM) ก็เพียงพอ
หลังจากนั้นคลิก Begin Installation เพื่อเริ่มติดตั้ง

ระหว่างการแตกแพ็กและติดตั้งองค์ประกอบ จะถูกขอให้ตั้งรหัสผ่านสำหรับผู้ใช้ root สามารถสร้างผู้ใช้อื่นเพิ่มเติมได้แต่เป็นทางเลือก

คลิก Root Password ป้อนรหัสผ่านและยืนยัน แล้วคลิก Done เพื่อกลับสู่การติดตั้ง:

การติดตั้ง CentOS 8 ใช้เวลาประมาณ 5-7 นาที เมื่อเห็นปุ่ม Reboot บนหน้าจอติดตั้ง แสดงว่าติดตั้งเสร็จแล้ว ต้องรีสตาร์ทเซิร์ฟเวอร์

ดังนั้น การติดตั้ง CentOS 8 จบสิ้นสุด
การกำหนดค่าพื้นฐาน CentOS 8 หลังการติดตั้ง
การกำหนดค่าพื้นฐาน CentOS 8 หลังติดตั้ง คล้าย CentOS 7 มาก ผมตั้งค่าพื้นฐานเดียวกันบนเซิร์ฟเวอร์ทุกเครื่อง
ติดตั้งอัปเดตและเครื่องมือผู้ดูแลระบบบน CentOS
ตามที่กล่าวไว้ dnf แทนที่ yum ใน CentOS 8
Dnf คือรุ่นต่อไปของ YUM แอปพลิเคชัน ตัวจัดการแพ็กเกจ RPM สำหรับการกระจาย Linux ก่อนหน้านี้ dnf ใช้ใน Fedora และตอนนี้มาสู่ CentOS 8
สิ่งแรกที่ทำบนเซิร์ฟเวอร์ที่เพิ่งติดตั้งคืออัปเดตระบบ:
# dnf update -y
หาก image เป็นเวอร์ชันล่าสุด อาจไม่มีแพ็กเกจให้อัปเดต เช่นในกรณีของผม:
Dependencies resolved. Nothing to do. Complete!
หากมีอัปเดต ให้ติดตั้ง
ขั้นตอนต่อไป เปิดใช้งานคลัง EPEL และติดตั้งเครื่องมือสำหรับการจัดการเซิร์ฟเวอร์อย่างสะดวก:
# dnf install epel-release -y
# dnf install mc wget screen nano net-tools bind-utils curl lsof vim -y
เครื่องมือเหล่านี้เพียงพอสำหรับผม แต่คุณสามารถติดตั้งที่คุ้นเคยได้
ผมไม่ใช้การอัปเดตระบบอัตโนมัติ เนื่องจากติดตั้งอัปเดตที่จำเป็นเอง หากต้องการกำหนดค่าอัปเดตอัตโนมัติ ให้ติดตั้งแพ็กเกจ dnf-automatic:
# dnf install -y dnf-automatic
เพื่อตรวจสอบงานอัปเดตระบบที่ทำงานอยู่ ให้พิมพ์คำสั่ง:
# systemctl list-timers *dnf-*
วิธีปิดใช้งาน SELinux บน CentOS?
ในขั้นตอนตั้งค่าเซิร์ฟเวอร์เบื้องต้น ผมปิด SELinux เสมอ (เพื่อให้การเปลี่ยนแปลงมีผล ต้องรีบูทเซิร์ฟเวอร์):
# nano /etc/sysconfig/selinux
# reboot
สามารถปิด SELinux แบบ on-the-fly ได้ด้วยคำสั่ง:
setenforce 0
การกำหนดค่าการตั้งค่าเครือข่ายบน CentOS 8
เนื่องจากผมตั้งค่าเครือข่ายระหว่างติดตั้ง OS จึงไม่ต้องทำในตอนนี้ (ดูบทความรายละเอียดการตั้งค่าเครือข่ายใน CentOS ได้ที่นี่) ผมเพียงต้องการบอกว่าใน CentOS 8 สามารถจัดการเครือข่ายได้ด้วย Network Manager และ nmcli เท่านั้น Network-scripts ไม่ได้รับการรองรับโดยค่าเริ่มต้น ต้องรับว่าก่อนหน้านี้ผมปิด NM และไม่ใช้ เพราะไม่สะดวก แต่ตอนนี้ต้องเรียนรู้ใช้ให้ได้
วิธีตรวจสอบสถานะเครือข่าย:
# systemctl status NetworkManager
● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-06-29 08:23:11 NY; 3h 37min ago Docs: man:NetworkManager(8) Main PID: 870 (NetworkManager) Tasks: 3 (limit: 5060) Memory: 4.7M CGroup: /system.slice/NetworkManager.service └─870 /usr/sbin/NetworkManager --no-daemon
วิธีเปลี่ยน Hostname บน CentOS 8?
หากไม่ได้ตั้งชื่อโฮสต์เซิร์ฟเวอร์ให้ถูกต้องระหว่างติดตั้ง CentOS หรือต้องการเปลี่ยน สามารถทำได้หลายวิธี แก้ไขในไฟล์ /etc/hostname หรือเปลี่ยนด้วยคำสั่ง:
# hostnamectl set-hostname mycentos8server
กำหนดค่า Firewalld บน CentOS 8
เพิ่มบริการที่ต้องการ (SSH และ HTTP/HTTPS) เข้าไปในโซนที่เชื่อถือได้ใน firewalld:
firewall-cmd –-add-service=ssh
firewall-cmd --permanent –-add-service=http
firewall-cmd --permanent –-add-service=https
การเปลี่ยนเวลาและ TimeZone บน CentOS
เพื่อดูเวลาและ timezone ปัจจุบันบน CentOS ให้พิมพ์คำสั่ง date:
# date
เราตั้ง time-zone ระหว่างติดตั้งระบบ จึงได้เวลา NY หากต้องการเปลี่ยน time-zone ใช้คำสั่ง:
# timedatectl set-timezone America/Toronto
เพื่อแสดงรายการ time zone ทั้งหมด ให้รัน:
# timedatectl list-timezones
เพื่อซิงโครไนซ์เวลา ใช้ chronyd ให้เปิดใช้งานและเพิ่มใน autostart ด้วย systemctl:
# systemctl start chronyd
# systemctl enable chronyd
# systemctl status chronyd
● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-06-29 16:13:48 +06; 9s ago Docs: man:chronyd(8) man:chrony.conf(5) Main PID: 31700 (chronyd) Tasks: 1 (limit: 5060) Memory: 1.1M CGroup: /system.slice/chronyd.service └─31700 /usr/sbin/chronyd
กำหนดค่า Bash History
เพื่อดูประวัติคำสั่ง bash แบบสะดวกขึ้น ผมเพิ่มบรรทัดใน .bashrc เพื่อให้ได้ข้อมูลเวลาของคำสั่ง
ด้วยการตั้งค่าเริ่มต้น ผลลัพธ์ของ history แสดงแบบนี้:
# history
1 dnf repolist 2 dnf install epel-release
เห็นได้ว่าทำคำสั่งอะไรบ้าง แต่ไม่เห็นเวลาและวันที่ ซึ่งสำคัญมากสำหรับผม มาทำให้ history สะดวกขึ้น เปิด /root/.bashrc และเพิ่มบรรทัด:
# nano /root/.bashrc
export HISTSIZE=10000
export HISTTIMEFORMAT="%d/%d/%y - %H:%M:%S "
ตอนดู history จะเห็นเวลาและวันที่แน่นอนที่รันคำสั่ง:
# history
1 Jun/06/29 - 16:16:29 dnf repolist 2 Jun/06/29 - 16:16:29 dnf install epel-release
Cockpit: เว็บอินเตอร์เฟซจัดการเซิร์ฟเวอร์บน CentOS 8
ตามที่กล่าวไว้ CentOS 8 มี cockpit เว็บอินเตอร์เฟซจัดการเซิร์ฟเวอร์ติดตั้งมาพร้อมแล้ว สามารถจัดการผ่าน systemctl ได้ ให้รันและเพิ่มใน startup:
# systemctl enable cockpit.socket
# systemctl start cockpit.socket
โดยค่าเริ่มต้น Cockpit web server ฟังที่ Port TCP/9090 ให้เพิ่มพอร์ตใน firewalld:
# firewall-cmd --get-active-zones
# firewall-cmd --add-port=9090/tcp --zone=MY_ACTIVE_ZONE --permanent
# firewall-cmd --reload
เพื่อเข้าถึง Cockpit web interface ให้เปิด URL: https://Your-CentOS8-IP:9090 ในเบราว์เซอร์และล็อกอิน

ผ่าน Cockpit สามารถดูโหลดเซิร์ฟเวอร์ จัดการเครือข่าย สตอเรจ และคอนเทนเนอร์ หรือดู log ได้
การตั้งค่าเซิร์ฟเวอร์ CentOS แบบปกติเสร็จสิ้น แล้วผมมักตั้งค่าเพิ่มเติมตามข้อกำหนดโครงการ ซึ่งอาจแตกต่างกันไป