การเปลี่ยนชื่อ group mail ใน mailman

ในการใช้ mailman เพื่อการให้บริการ Mailing List หรือ Group Mail นั้น การเปลี่ยนชื่อกลุ่มนั้น ค่อนข้างยุ่งยาก แต่สามารถทำได้ง่ายกว่า โดยการสร้าง List ใหม่แล้ว เอา Config และ Member เดิมมาใส่

ขอยกตัวอย่าง กรณี จะเปลี่ยน group name ของกลุ่มคณะ วจก. ซึ่งเดิมจะขึ้นต้นด้วย mgt-* ให้ไปเป็น fms-*
ก็จะใช้ Shell Script ตามนี้

oldname="mgt"
newname="fms"
owner="admin.name@psx.ac.th"
password="xxxxxx"

for line in $( /usr/lib/mailman/bin/list_lists | grep -i "$oldname-"|awk '{print $1}') ; do
   /usr/lib/mailman/bin/config_list -o $line.txt $line
   /usr/lib/mailman/bin/list_members $line > $line-member.txt
   newgroupname=$newname-$(echo $line | sed -e "s/$oldname-\(.*\)*/\1/i")
   sed -e "s/$oldname-/$newname-/i" $line.txt > $newgroupname.txt
   /usr/lib/mailman/bin/newlist $newgroupname $owner $password
   /usr/lib/mailman/bin/config_list -i $newgroupname.txt $newgroupname
   /usr/lib/mailman/bin/add_members -w n -a n -r $line-member.txt $newgroupname
done

1. เมื่อต้องการทราบว่า ในระบบของ mailman มี List ใดบ้างที่ชื่อขึ้นต้นด้วย “mgt-” บ้าง
ใช้คำสั่ง

/usr/lib/mailman/bin/list_lists | grep -i "mgt-"

2. ซึ่งจะพบว่ามีหลายกลุ่ม ที่มีชื่อขึ้นต้นด้วย “mgt-“, ก็สามารถใช้ Shell Script เพื่อ เอาผลลัพธ์ จากคำสั่งดังกล่าว มาทำงานร่วมกับคำสั่ง ต่อไปนี้ เพื่อเก็บ Config ของกลุ่มนั้นๆ ออกมาเป็นไฟล์ (สมมุติว่า ชื่อกลุ่มคือ mgt-xxx ก็นำออกมาเป็นไฟล์ชื่อ mtg-xxx.txt)

/usr/lib/mailman/bin/config_list -o mgt-xxxx.txt mgt-xxx

3.ต่อไป วิธีการดูว่า แต่ละกลุ่ม มีใครเป็นสมาชิกบ้าง แล้วนำออกมาเป็นไฟล์ (สมมุติว่า ชื่อกลุ่มคือ mgt-xxx ก็นำออกมาเป็นไฟล์ชื่อ mtg-xxx-member.txt)

/usr/lib/mailman/bin/list_members mgt-xxx > mgt-xxx-member.txt

จะได้ไฟล์ชื่อเดียวกับชื่อกลุ่ม แต่จะลงท้ายด้วยคำว่า -member.txt

4, ในการเปลี่ยนชื่อกลุ่ม จะเปลี่ยนจาก mgt-xxxx มาเป็น fms-xxxx วิธีการที่จะได้คำว่า xxxx ที่ต่อท้าย mgt-xxxx นั้น ใช้คำสั่งต่อไปนี้

echo "mgt-xxxx" | sed -e "s/mgt-\(.*\)*/\1/i"

คำสั่ง sed นั้นมี option “-e” คือการสั่งให้ execute คำสั่งที่ตามมา
ส่วน  “s/mgt-\(.*\)*/\1/i” นั้น จะมีโครงสร้างคือ

s/pattern/replace/i

s : หมายถึง substitute คือ แทนที
pattern: ที่เขียนว่า mgt-\(.*\)* หมายความว่า เมื่อเจอรูปแบบ mgt-xxxx ก็จะเอา xxxx มาเก็บไว้ในตัวแปร
replace: ที่เขียนว่า \1 ก็คือเอาค่าจากตัวแปรใน pattern \(.*\) นั่นก็คือ xxxx
i: ตัวสุดท้ายหมายถึง Case-Insensitive หรือ ไม่สนใจตัวเลขตัวใหญ่

5. ต่อไป เป็นสร้าง List ใหม่ ใช่คำสั่งว่า

/usr/lib/mailman/bin/newlist fms-xxxx admin.name@psx.ac.th xxxxxx

คือ สร้างกลุ่มใหม่ชื่อ fms-xxxx โดยให้ owner เป็น admin.name@psx.ac.th และใช้พาสเวิร์ดเป็น xxxxxx

6. ปรับ config ของกลุ่มใหม่นี้ ให้เป็นตามกลุ่มเดิม

 /usr/lib/mailman/bin/config_list -i fms-xxxx.txt fms-xxxx

โดยนำ config จากไฟล์ fms-xxxx.txt มาปรับใช้กับกลุ่มชื่อ fms-xxxx

7. สุดท้าย นำสมาชิกจากกลุ่มเดิม เข้าสู่กลุ่มใหม่

/usr/lib/mailman/bin/add_members -w n -a n -r mgt-xxxx-member.txt fms-xxxx

โดย option แต่ละตัวหมายถึง
-w n : ไม่ต้องแจ้งผู้ใช้ว่าถูกเพิ่มเข้ากลุ่ม
-a n : ไม่ต้องแจ้ง owner

และนำข้อมูลสมาชิกจากไฟล์ mgt-xxxx-member.txt เข้ากลุ่ม fms-xxxx