ในการใช้ 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