สคริปต์ entrypoint.sh นี้ทำหน้าที่เป็นตัวจัดการระบบก่อนเริ่มต้นทำงาน เพื่อใช้ตั้งค่าและรัน อย่าง Samba Active Directory Domain Controller (AD DC) แบบอัตโนมัติครับ
การทำงานของสคริปต์แบ่งออกเป็น 5 ขั้นตอนหลัก
- ตั้งค่าตัวแปรเบื้องต้น
สคริปต์จะดึงค่า Environment Variables มาใช้งาน หากไม่ได้มีการส่งค่าเข้ามา จะใช้ค่าเริ่มต้น (Default) ที่กำหนดไว้แทน- DOMAIN:
SAMDOM - REALM:
SAMDOM.EXAMPLE.COM - ADMIN_PASSWORD:
Password123! - DNS_FORWARDER:
8.8.8.8
- DOMAIN:
- ตรวจสอบสถานะการติดตั้ง
สคริปต์จะตรวจสอบว่ามีไฟล์smb.confและsam.ldbอยู่ในระบบหรือไม่ เพื่อดูว่าเซิร์ฟเวอร์นี้เคยผ่านการตั้งค่า Samba มาแล้วหรือยัง ขั้นตอนนี้ช่วยป้องกันไม่ให้ระบบสร้างการตั้งค่าใหม่ทับของเดิม ซึ่งจะทำให้ข้อมูลและ Config ต่าง ๆ สูญหายหากมีการรีสตาร์ทระบบใหม่ - กรณีที่ยังไม่เคยติดตั้ง
หากตรวจสอบแล้วไม่พบไฟล์ระบบ สคริปต์จะเริ่มตั้งค่า AD DC ใหม่ทั้งหมด- ล้างค่าเดิม: ลบไฟล์
/etc/samba/smb.confที่อาจตกค้างทิ้งไป - สร้าง Domain Controller: รันคำสั่ง
samba-tool domain provisionเพื่อสร้าง AD DC ขึ้นมาตามตัวแปรที่ตั้งไว้ด้านบน - ตั้งค่า Kerberos: คัดลอกไฟล์ตั้งค่าระบบยืนยันตัวตน
/var/lib/samba/private/krb5.confไปไว้ที่/etc/krb5.confเพื่อให้ระบบใช้งานได้สมบูรณ์ - สร้างผู้ใช้งานตัวอย่าง: มีการเขียนฟังก์ชันเพื่อสร้าง User เข้าสู่ระบบทันที 3 บัญชี ได้แก่
phunsait,pitt.p, และplusmagiโดยกำหนดรหัสผ่านของทุกคนเป็นPassword123!
- ล้างค่าเดิม: ลบไฟล์
- กรณีที่เคยติดตั้งแล้ว
หากตรวจสอบแล้วพบว่ามีไฟล์ Config อยู่ สคริปต์จะข้ามขั้นตอนที่ 3 ไปทั้งหมด และแสดงข้อความว่าSamba AD DC already provisioned.เพื่อใช้การตั้งค่าและฐานข้อมูลเดิมที่มีอยู่ต่อไป - เริ่มการทำงานของเซอร์วิส
บรรทัดสุดท้ายexec samba -i -M standardจะเป็นการสั่งรันเซอร์วิส Samba ให้อยู่ในโหมดทำงานเบื้องหน้า ซึ่งเป็นรูปแบบที่จำเป็นเพื่อให้ Container ยังคงทำงานต่อไปได้ไม่ปิดตัวเองลง
entrypoint.sh
#!/bin/bash
set -e # Define variables
DOMAIN=${SAMBA_DOMAIN:-SAMDOM}
REALM=${SAMBA_REALM:-SAMDOM.EXAMPLE.COM}
ADMIN_PASSWORD=${SAMBA_ADMIN_PASSWORD:-Password123!}
DNS_FORWARDER=${SAMBA_DNS_FORWARDER:-8.8.8.8} # Check if Samba is already provisioned
# Check if Samba is already provisioned
if [[ ! -f /etc/samba/smb.conf ]] || [[ ! -f /var/lib/samba/private/sam.ldb ]]; then echo "Provisioning Samba AD DC..." # Remove default smb.conf if it exists rm -f /etc/samba/smb.conf # Provision the domain samba-tool domain provision \ --server-role=dc \ --use-rfc2307 \ --dns-backend=SAMBA_INTERNAL \ --realm="$REALM" \ --domain="$DOMAIN" \ --adminpass="$ADMIN_PASSWORD" \ --option="dns forwarder = $DNS_FORWARDER" # Copy kerberos config if [ -f /var/lib/samba/private/krb5.conf ]; then cp /var/lib/samba/private/krb5.conf /etc/krb5.conf fi # --- Add Sample Users --- echo "Creating sample users..." # Function to create user if not exists create_user () { local username="$1" local password="$2" samba-tool user create "$username" "$password" || true # Ignore error if exists echo "Created user: $username" } # Add users (Username Password) create_user "phunsait" "Password123!" create_user "pitt.p" "Password123!" create_user "plusmagi" "Password123!" echo "Samba AD DC provisioned successfully with sample users."
else echo "Samba AD DC already provisioned."
fi # Start Samba
exec samba -i -M standard
อ่านเพิ่มเติม