Home > Computer Science > QNAP TS-409 Pro添加中文UTF8 locale

QNAP TS-409 Pro添加中文UTF8 locale

Oct 24th, 2009 21:34:11 Wei Leave a comment Go to comments

QNAP TS-409 Pro NAS中除了C和POSIX以外,不包含utf8的locale,PHP中也不包含iconv。即使是最新版本的3.0.1 Build 0708T也是如此。最直接的结果就是MLDonkey等软件的下载文件名出现乱码或者“_”符号。但QNAP却提供了手工安装locale的方法。但最新的3.0.1版本中,却没有locale和localedef文件,导致按照官方安装locale的方法,无法操作。经过论坛上的各种讨论,可以采用如下的方法来实现。

首先通过SSH登录NAS,找到locale和localedef命令,并创建对应的符号链接:

ll /mnt/HDA_ROOT/rootfs_2_3_6/usr/bin/locale*
ln –s /mnt/HDA_ROOT/rootfs_2_3_6/usr/bin/locale /usr/sbin/locale
ln –s /mnt/HDA_ROOT/rootfs_2_3_6/usr/bin/localedef /usr/sbin/localedef
ll /usr/sbin/locale*

接下来下载Posix-locale文件(下载地址:http://wiki.qnap.com/w/images/7/77/Posix-locales.rar),解压后,上传到任意目录,并将LOCALES重命名为locales。为了节省系统盘空间,推荐在/share/HDA_DATA(或/share/MD0_DATA)中创建一个目录。

mkdir /share/HDA_DATA/i18n
ln –s /share/HDA_DATA/i18n /usr/share/i18n
cd /usr/share/i18n
wget http://wiki.qnap.com/w/images/7/77/Posix-locales.rar
unrar Posix-locales.rar
mv LOCALES locales

创建/usr/lib/locale目录,该目录用于存储locale-archive文件(也可以使用符号链接)

剩下的步骤就可以创建新的locale了

localedef –i zh_CN –f UTF-8 zh_CN.utf8

如果需要其他的locale,只需要将zh_CN、UTF-8更换为其他的locale即可,具体的参数,可以查看/usr/share/i18n/locales和/usr/share/i18n/charmaps中的文件列表,最后的zh_CN.utf8可以自己指定。

检查新的locale

locale -a

此时即可生成新的zh_CN.utf8的locale,剩下的工作可以为locale-archive创一个符号链接,以便节省/分区的空间。

mv /usr/lib/locale/locale-archive /share/HDA_DATA/locale-archive
ln –s /share/HDA_DATA/locale-archive /usr/lib/locale/locale-archive

特别说明

  1. QNAP NAS会在每次升级之后,重新在硬盘中写入操作系统,所以此过程需要在每次升级版本的时候操作一次。
  2. 为了避免在UTF8编码无效时,某些软件(如MLDonkey)出现乱码的问题,在操作/升级前,请先关闭所有的QPKG。
  3. HDA_DATA为不使用RAID配置的路径,如果启用RAID,则将更换为MD0_DATA。

关于MLDonkey

MLDonkey的启动脚本位于/share/HDA_DATA/.qpkg/MLDonkey/mldonkey.sh。该脚本通过/usr/bin/locale取得当前环境的LANG环境变量。我图省事儿,直接将此修改为:

export LANG=zh_CN.utf8
Categories: Computer Science Tags: , , , , , ,
  1. Galen Dai
    October 25th, 2009 at 20:25 | #1

    这么复杂,等我买了你来给我安装下吧

  2. 鼠标民工
    November 14th, 2009 at 19:26 | #2

    照着折腾了一遍 locale -a 也显示 zh_CN.utf8 加上了,重启后依然乱码
    唉linux 果然不是普通人能用的啊

  3. leslie
    February 3rd, 2010 at 14:11 | #3

    localedef -i zh_CN -f UTF-8 zh_CN.utf8
    cannot read character map directory `/usr/share/i18n/charmaps’: No such file or directory
    这是怎么回事,明明把压缩包里的/charmaps 和/locales 放到了/usr/share/i18n/下 老大 怎么解决

  4. leslie
    February 3rd, 2010 at 14:33 | #4

    现在charmaps问题解决了 可是又个问题
    [/usr/share/il8n/charmaps] # localedef -i zh_CN -f UTF-8 zh_CN.utf8
    cannot open locale definition file `zh_CN’: No such file or directory

    这什么意思

  5. leslie
    February 3rd, 2010 at 15:38 | #5

    接下来
    [/usr/share/charmaps] # localedef -i zh_CN -f UTF-8 zh_CN.utf8
    cannot open locale definition file `i18n’: No such file or directory

  6. February 3rd, 2010 at 15:43 | #6

    @leslie , 提示信息是说文件或文件夹找不到,一个是看这些文件是不是在正确的路径里面,我印象中好像当时我是做了个symbol link

  7. leslie
    February 3rd, 2010 at 20:07 | #7

    mkdir /mnt/HDA_DATA/i18n 这个目录无法创建,到我可以进入到各个子目录里创建 然后 ln –s /mnt/HDA_DATA/i18n /usr/share/i18n 但是cd 不进去 也是提示找不到文件夹或文件 被折腾疯了
    之所以搞这个 是因为我用donkey ftp下载,只要是ftp://路径上有中文名 下载就自动暂定,按照你的这个utf8的转换 能解决这个问题吗?不行的话 我也不弄了 搞了2个通宵 要崩溃了

  8. leslie
    February 3rd, 2010 at 20:08 | #8

    能不能给个详细的操作步骤,我linux实在不熟悉

  9. leslie
    February 3rd, 2010 at 20:23 | #9

    “HDA_DATA为不使用RAID配置的路径,如果启用RAID,则将更换为MD0_DATA。”
    这个是不是对应替换mkdir /mnt/HDA_DATA/i18n这句命令? 我的/mnt 里面只有/HDA_ROOT,/HDB_ROOT ,/etc 3个目录我试着创建/mnt/HDA_DATA 但重新启动这个目录就消失了

  10. February 3rd, 2010 at 21:46 | #10

    NAS在硬盘上存储的数据(/mnt/HDA_DATA)是都不会消失的,但/mnt等目录是在ROM里面的,重启就消失了。HDA_DATA是没有使用RAID的第一块硬盘,而如果启用RAID,则会变成MD0_DATA。这个目录是自动建立的。你必然会有一个HDA_DATA或者MD0_DATA。

  11. leslie
    February 3rd, 2010 at 22:15 | #11

    我是用的Raid /mnt下没有HDA_DATA 我在/share 下有HDA_DATA 和 MD0_DATA 是不是
    mkdir /mnt/HDA_DATA/i18n 改成mkdir /share/HDA_DATA/i18n

  12. February 3rd, 2010 at 23:52 | #12

    @leslie , 如果用RAID,要把所有的HDA换成MD0(参照特别说明的第三条)。至于/mnt/HDA_DATA和/share/HDA_DATA,是一个东西,symbol link。

  13. leslie
    February 6th, 2010 at 17:41 | #13

    [/usr/share/il8n] # cd /usr/share/il8n/charmaps
    [/usr/share/il8n/charmaps] # ls
    ANSI_X3.4-1968.gz* ISO-8859-13.gz* ISO-8859-2.gz* ISO-8859-6.gz* UTF-8*
    ISO-8859-1.gz* ISO-8859-14.gz* ISO-8859-3.gz* ISO-8859-7.gz* UTF-8.gz*
    ISO-8859-10.gz* ISO-8859-15.gz* ISO-8859-4.gz* ISO-8859-8.gz* zh_CN*
    ISO-8859-11.gz* ISO-8859-16.gz* ISO-8859-5.gz* ISO-8859-9.gz*
    [/usr/share/il8n/charmaps] # localedef -i zh_CN -f UTF-8 zh_CN.utf8
    cannot open locale definition file `i18n’: No such file or directory

  14. leslie
    February 6th, 2010 at 17:44 | #14

    [/usr/share] # localedef -i zh_CN -f UTF-8 zh_CN.utf8
    cannot read character map directory `/usr/share/i18n/charmaps’: No such file or directory

  15. leslie
    February 6th, 2010 at 17:46 | #15

    [/usr/share/il8n] # localedef -i zh_CN -f UTF-8 zh_CN.utf8
    cannot read character map directory `/usr/share/i18n/charmaps’: No such file or directory

  1. January 21st, 2010 at 23:08 | #1