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

    จบแล้ว

     

    Syndicate

    Subscribe to Syndicate

    Who's online

    There are currently 0 users online.