Temat: [HOWTO] Dysk USB na FAT32 i polskie znaki w Sambie
Jako że sam nie mogłem za chiny znaleźć pakietu ani instrukcji jak to zrobić, postanowiłem sam rozkminić co mi się szczęśliwie udało więc wiedzą tą chciał bym się podzielić ze światem ![]()
OpenWRT, dysk USB na FAT32 i polskie znaki w Sambie
Problem:
- Dysk podpięty do portu USB routera ASUS WL-500G Premium z partycjami FAT32
- Stabilna paczka Samba 2.0.10 nie obsługuje kodowania UTF8, co najwyżej ISO8859-2
- Brak oficjalnej paczki NLS dla ISO8859-2
Rozwiązanie:
Zakładam, że Samba 2.0.x jest zainstalowana na routerze oraz dysk USB jest podpięty i podmontowany.
W skrócie:
1. Zainstalować paczkę z kodowaniem ISO8859-2
2. Podmontować dyski z parametrem -o iocharset=iso8859-2
3. Ustawić w Sambie: character set = ISO8859-2 i client code page = 852
ad.1
Ponieważ Samba 2.x nie posiada wsparcia dla UTF8 w celu uzyskania polskich znaków konieczne jest podmontowanie partycji z kodowaniem ISO8859-2. Tu pojawia się kolejny problem, ponieważ w oficjalnym repozytorium pakietów niema paczki z tym kodowaniem. Skompilowałem odpowiednią paczkę pod Whiterussian 0.9. O tym jak to zrobiłem w osobnym FAQ pt. Kompilacja polskich NLS (kodowanie ogonków w systemach plików).
Instalacja paczki z kodowaniem ISO8859-2:
# ipkg install http://spawarka.kni.pk.edu.pl/~dzwiedziu/openwrt/packages/kmod-nls-iso8859-2_2.4.30-brcm-5_mipsel.ipkPo zainstalowaniu paczki, należy zrestartować router:
# rebootad.2
O podłączaniu i montowaniu dysku USB jest tu: http://openwrt.livenet.pl/doku.php/hardware:usbhdd więc nie będę wklejał treści tam zawartych. Napiszę tylko, że dla przykładu jeżeli montujemy dysk poleceniem:
# mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/disc0_1Należy je zmienić na:
# mount -o iocharset=iso8859-2 /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/disc0_1Parametr -t jest bardzo rzadko wymagany. Zwykle mount sam rozpoznaje system plików. Co do artykułu zamieszczonego pod http://openwrt.livenet.pl/doku.php/hardware:usbhdd mam tylko jedną uwagę:
Przedstawiony tam skrypt montowania partycji przy starcie i umieszczony pod /etc/init.d/S11mount u mnie nie działał.
Po pierwsze, wykonywał się przed załadowaniem zmiennej środowiskowej PATH więc trzeba było zmienić mount na /bin/mount.
Po drugie, S11... to trochę za wcześnie, efekt był taki że potem coś odmontowywało dyski i podmontowywało je znów po swojemu. Skrypty startowe są wykonywane w kolejności alfabetycznej. Dlatego dla przykładu S11xxx wykona się przed S12xxx. Pomogła zmiana nazwy na S89mount, Samba ma u mnie S98samba.
A oto cały mój skrypt: /etc/init.d/S89mount
#!/bin/sh
#
# mount script
#
/bin/umount /mnt/disc0_1
/bin/umount /mnt/disc0_5
/bin/mount -o iocharset=iso8859-2 /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/disc0_1
/bin/mount -o iocharset=iso8859-2 /dev/scsi/host0/bus0/target0/lun0/part5 /mnt/disc0_5Uwaga! Jeżeli ktoś używał pakietów instalowanych na dysku USB i używają one skryptów startowych, niech się one wykonują po montowaniu dysków!
ad.3
O konfiguracji Samby jest cały artykuł tu: http://openwrt.livenet.pl/doku.php/software:nas#samba
Napiszę tylko by do sekcji [Global] dopisać linijki:
character set = ISO8859-2
client code page = 852A oto cały plik /etc/samba/smb.conf który u mnie działa wyśmienicie:
[global]
syslog = 0
syslog only = yes
workgroup = DOM
server string = ASUS WL-500G Premium
security = share
encrypt passwords = yes
guest account = nobody
local master = yes
name resolve order = lmhosts hosts bcast
wins support = yes
os level = 65
character set = ISO8859-2
client code page = 852
[C]
comment = C na dysku USB
path = /mnt/disc0_1
browseable = yes
public = yes
writeable = no
[D]
comment = D na dysku USB
path = /mnt/disc0_5
browseable = yes
public = yes
writeable = noMoże po poprawieniu i uściśleniu co niejasne wrzucić to na http://openwrt.pl/ ?