Dokonałem kilka zmian na openwrt.pl. Przy podpinaniu dysku USB dopisałem instrukcje instalacji pakietu zawierającego ISO 8859-2 oraz instrukcję montowania dysku FAT32. Na stronie o instalacji Samby poprawiłem przykładowy plik smb.conf dopisując:
character set = ISO8859-2
client code page = 852

A ja całe to HOWTO wrzuciłem na wiki: http://openwrt.livenet.pl/doku.php/software:nls

Pakiety i wersja txt howto są pod adresem:
http://spawarka.kni.pk.edu.pl/~dzwiedziu/openwrt/

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 smile

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.ipk

Po zainstalowaniu paczki, należy zrestartować router:

# reboot

ad.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_1

Należy je zmienić na:

# mount -o iocharset=iso8859-2 /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/disc0_1

Parametr -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_5

Uwaga! 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 = 852

A 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 = no

Może po poprawieniu i uściśleniu co niejasne wrzucić to na http://openwrt.pl/ ?

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 smile

Kompilacja polskich pakietów NLS dla OpenWRT

0. Czym jest NLS?
1. Pobranie stabilnych źródeł Whiterussian 0.9
2. Dokonanie odpowiednich zmian w skryptach konfiguracji i kompilacji
3. Konfiguracja
4. Kompilacja

ad.0

NLS czyli Native Language Support to strony kodowania dla systemów plików w jądrze linuksa. W USA używa się kodowania ASCII, jednak ono obsługuje tylko alfabet używany w USA. By polskie ogonki prawidłowo się wyświetlały należy zastosować rozszerzonego zestawu znaków. Żeby nie było to zbyt proste istnieją 3, a nawet 4 strony kodowe zawierające polskie znaki:

IBM 852 (Latin II) - zestaw znaków używany w systemie DOS

Windows CP1250 - zestaw znaków używany w systemie MS Windows, jest całkowicie niekompatybilny z 852 (IMHO tylko 'ó' o 'Ó' pozostawało zgodne)

ISO 8859-2 - zestaw znaków najczęściej używany w Internecie oraz na alternatywnych do MS Windows systemach operacyjnych. Jest w 66,(6)% zgodny z CP1250, tj. inaczej kodowane są litery: 'ą', 'ś' i 'ź' oraz 'Ą', 'Ś' i 'Ź'.

UTF8 - najbardziej zalecany, zawierający kodowanie wszystkich znaków alfabetów używanych na Ziemi. Jednak jest on znacznie bardziej skomplikowany od ww. Tu znaki z zestawu ASCII są kodowane za pomocą jednego znaku, tak samo jak w ASCII. Natomiast znaki nie występujące w ASCII są kodowane za pomocą od dwóch do czterech znaków. Stąd dokument zajmuje trochę więcej miejsca na dysku, ale będzie prawidłowo wyświetlany w każdym systemie obsługującym UTF8. Niestety nie wszystkie systemy obsługują UTF8. Zalicza się do nich Samba 2.x, stąd potrzeba napisania tego artykułu.

W oficjalnych repozytoriach znajdują się jedynie pakiety z kodowaniem UTF8 i kodowaniem dla Europy Zachodniej: 850 i ISO 8859-1.

ad.1

Stabilne źródła Whiterussian 0.9 najlepiej pobrać z repozytorium SVN:

$ svn co https://svn.openwrt.org/openwrt/branches/whiterussian/

Po wykonaniu tej operacji w katalogu ./whiterussian/openwrt mamy ściągnięte źródła.


ad.2

Obiektem naszych zainteresowań będą pliki:

openwrt/target/linux/linux-2.4/config/brcm
openwrt/target/linux/linux-2.4/Makefile
openwrt/target/linux/Config.in

Oraz pliki:

openwrt/target/linux/control/kmod-nls-cp852.control
openwrt/target/linux/control/kmod-nls-iso8859-2.control
openwrt/target/linux/control/kmod-nls-cp1250.control

Których jeszcze nie ma więc zaczniemy od ich stworzenia, ale najpierw co one oznaczają?
Są to pliki które zawierają tylko nazwę pakietu z modułem kernela, jego opis, sekcję w której się znajduje i priorytet (tzn. czy ma być domyślnie zaznaczony).
Zawartość plików:

kmod-nls-iso8859-2.control

Package: kmod-nls-iso8859-2
Priority: optional
Section: sys
Description: Kernel module for ISO 8859-2 (Latin 2)

kmod-nls-cp852.control

Package: kmod-nls-cp852
Priority: optional
Section: sys
Description: Kernel module for NLS Codepage 852 (Central Europe)

kmod-nls-cp1250.control

Package: kmod-nls-cp1250
Priority: optional
Section: sys
Description: Kernel module for Windows Codepage 1250 (Central Europe)

Konfiguracja pliku openwrt/target/linux/linux-2.4/config/brcm. Jest to po prostu plik .config jądra z OpenWRT. Należy w nim dopisać lub odhashować te linijki:

CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_ISO8859_2=m

Ważną rzeczą jest zmodyfikowanie pliku: openwrt/target/linux/linux-2.4/Makefile
Zawiera ona skrypty budowania pakietów ipkg. W pliku Makefile należy odszukać miejsce, w którym jest skrypt np. do CODEPAGE_850 (linijka 221) i wkleić po nim (za linijką 223):

$(eval $(call KMOD_template,NLS_CP852,nls-cp852,\
    $(MODULES_DIR)/kernel/fs/nls/nls_cp852.o \
,CONFIG_NLS_CODEPAGE_852,,40,nls_cp852.o))
$(eval $(call KMOD_template,NLS_CP1250,nls-cp1250,\
    $(MODULES_DIR)/kernel/fs/nls/nls_cp1250.o \
,CONFIG_NLS_CODEPAGE_1250,,40,nls_cp1250.o))
$(eval $(call KMOD_template,NLS_ISO8859_2,nls-iso8859-2,\
    $(MODULES_DIR)/kernel/fs/nls/nls_iso8859-2.o \
,CONFIG_NLS_ISO8859_2,,40,nls_iso8859-2.o))

Plik openwrt/target/linux/Config.in jest dla konfiguratora OpenWRT. Należy w nim dopisać informacje o modułach:

config BR2_PACKAGE_KMOD_NLS_CP852
    tristate "Codepage 852 (Central Europe)"
    default m
    help
      Kernel module for NLS Codepage 852 (Central Europe)

config BR2_PACKAGE_KMOD_NLS_CP1250
    tristate "Codepage 1250 (Central Europe)"
    default m
    help
      Kernel module for Windows Codepage 1250 (Central Europe)

config BR2_PACKAGE_KMOD_NLS_ISO8859_2
    tristate "ISO 8859-2 (Latin 2; Central European Languages)"
    default m
    help
      Kernel module for ISO 8859-2 (Latin 2)

Te linijki najlepiej wkleić gdzieś pod 340 linijką, gdzie jest o kodowaniach 850 i ISO 8859-1.


ad. 3

Wchodzimy do katalogu ./whiterussian/openwrt (por. ad 1.) i uruchamiamy:

$ make menuconfig

Możemy tam dokonać różnych zmian, które właściwie są zbędne ponieważ w pliku openwrt/target/linux/Config.in daliśmy wszędzie "default m". Wychodzimy z zapisaniem zmian w konfiguracji.


ad. 4

Pozostaje nam tylko skompilować źródła. Będąc w katalogu ./whiterussian/openwrt (por. ad 1.) wydajemy polecenie:

$ make

Potrwa to kilka godzin w zależności od szybkości komputera i łącza internetowego. Skrypt sam ściągnie potrzebne źródła jądra linuksa i toolchain. Po udanej kompilacji w katalogu ./whiterussian/openwrt/bin/packages znajdują się wszystkie skompilowane pakiety, w tym gotowe do instalacji nasze:

kmod-nls-cp1250_2.4.30-brcm-5_mipsel.ipk
kmod-nls-cp852_2.4.30-brcm-5_mipsel.ipk
kmod-nls-iso8859-2_2.4.30-brcm-5_mipsel.ipk

Może po poprawieniu i uściśleniu co niejasne wrzucić to na http://openwrt.pl/ ?

* zgodna z normą USB 2.0 oraz wstecz z USB 1.1,
    * przepustowość magistrali do 480Mbps,
    * Hot Plug&Play – obudowę podłącza się do uruchomionego komputera,
    * działą z MS Windows 98/Me/2000/XP oraz MacOS 8.6/9/X (tryb USB 2.0 tylko pod MacOS X),
    * rozmiary: 220 x 120 x 35 mm

      Zawartość zestawu:
    * kabel USB A-B
    * zewnętrzny zasilacz sieciowy
    * sterowniki na CD
    * podstawka na obudowe

Co do tego czy obsługuje usb-storage, szukam...

Witam

Mam pytanie, czy przy wyborze dysku USB 2.0, który ma działać zarówno na laptopie pod systemem Linux oraz na routerze ASUS WL-500G Premium z OpenWRT trzeba się upewniać, czy jest on obsługiwany?

Póki co mam na oku ten dysk:
http://sklep.tadu.pl/info/EDHD300LD (Samsung 300GB USB 2.0)

Pisze przy nim:
- działą z MS Windows 98/Me/2000/XP oraz MacOS 8.6/9/X (tryb USB 2.0 tylko pod MacOS X)

A co z Linuksem?