samba: เรื่องจิปาถะ
samba เป็นแพคเกจที่ใหญ่และยุ่งยากซับซ้อนมากแพคเกจนึง มีการตั้งตัวแปรต่าง ๆ มากมาย ชวนเวียนหัวเป็นอย่างยิ่ง
ขอบันทึกเกร็ดแก้เวียนหัวไว้ดังนี้
การเมาต์ samba (ขณะที่บันทึกนะครับ อนาคตอาจเปลี่ยนแปลงได้) สามารถทำได้สองวิธีคือ smbfs และ cifs
ผมไม่ค่อยมีความรู้เชิงลึกมากนักในความแตกต่างระหว่างการเมาต์ทั้งสองแบบ
เท่าทีทดลอง สังเกตุได้ว่า
cifs ชื่อไฟล์ภาษาไทยถูกต้อง smbfs แสดงชื่อไฟล์เพี้ยน
cifs ล๊อกเรคคอร์ดไม่แม่น smbfs ล๊อกเรคคอร์ดแม่น (แคชถูกต้องกว่า)
cifs จัดสรร uid และ gid ให้อย่างถูกต้อง smbfs ต้องระบุเองในการเมาต์
ซึ่งถ้าเราใช้งานไฟล์ร่วมกันระหว่างวินโดวส์กับลินุกส์ จะทำให้มีปัญหาเรื่องนี้มาก
การแก้ไข
สำหรับเครื่องเซิร์ฟเวอร์
- ควรแยกแชร์ออกเป็นสองระบบ เช่น จะแชร์ /samba/data ควรตั้งแชร์ไว้เป็นสองระบบ เช่น ตั้งแชร์สำหรับ cifs เป็น cifsdata และตั้งแชร์สำหรับ smbfs เป็น smbfsdata
- ถ้าใช้ร่วมกับ dos (ควรใช้กับ smbfs เท่านั้น) แก้ไขเรื่องชื่อไฟล์ตัวใหญ่ตัวเล็ก ด้วยการตั้งค่าปริยายเป็นตัวใหญ่ โดยเติมพารามิเตอร์ default case และ preserve case ให้กับแชร์ smbfsdata
ตัวอย่างไฟล์ /etc/samba/smb.conf จะเป็นดังนี้
... #===== Share Definitions ====== [cifsdata] comment = cifs Data Directory path = /samba/data valid users = @ourgroup public = no create mask = 0770 directory mask = 0770 writable = yes [smbfsdata] comment = cifs Data Directory path = /samba/data valid users = @ourgroup public = no create mask = 0770 directory mask = 0770 writable = yes default case = upper preserve case = no ...
security=share
สำหรับไคลเอนต์
- แก้ไขเรื่องการอนุญาตในระบบ (permission) ด้วยการตั้ง uid และ gid ให้ตรงกันระหว่างเซิร์ฟเวอร์และไคลเอนต์
หรืออาจระบุตอนเมาต์ ให้ uid และ gid ตรงกับของเซิร์ฟเวอร์ (ผมใช้วิธีแรก) - แก้ไขเรื่อง smbfs ตั้ง default uid,gid เป็น root ด้วยการระบุ uid,gid ตอนเมาต์
$ sudo mount -t cifs /server1/cifsdata /mnt/cifsdata -o username=user1,pasword=password1,iocharset=utf8 $ sudo mount -t smbfs /server1/smbfsdata /mnt/smbfsdata -o username=user1,password=password1,uid=$UID,gid=$GID
ถ้าทำเป็นแบตช์ไฟล์ สามารถหาค่า gid ด้วยคำสั่ง
$ GID=`cat /etc/passwd | grep $UID | cut -d : -f 4`
แถมนอกเรื่อง เรื่อง dosemu
ตั้งค่าเครื่องพิมพ์ให้เครือข่ายด้วยคำสั่ง
$ vi .dosemurc หรือ # vi /etc/dosemu/dosemu.conf
สมมุติว่ามีเครื่องพิมพ์ 2 ตัวคือ epson1 กับ epson2
... $_printer_commands = "lpr -l -P epson1, lpr -l -P epson2" ...
โดย epson1 จะกลายเป็น lpt1: และ epson2 จะกลายเป็น lpt2:
อีกเรื่องคือ ตั้งค่าเครื่องพิมพ์ของเครือข่าย
ถ้าเป็นเซิร์ฟเวอร์ลินุกส์ ก็ต้องใช้รูปแบบที่มีชื่อผู้ใช้และรหัสผ่านตามปกติ
$ sudo lpadmin -p epson1 -u allow:all -E -v smb://user1:password1@server1/epson1
ถ้าเป็นวินโดวส์แชร์ที่ไม่มีการตั้งรหัสผ่าน ก็ใช้รูปแบบ
$ sudo lpadmin -p epson2 -u allow:all -E -v smb://window1/epson2
จบแล้ว
Recent comments