morenet
自宅用Linuxファンレスサーバ構築時のメモです。MediaTombをBRAVIAのDLNA機能に対応させるパッチは→こちらの記事から。
CPUはAtom N270、マザーボードはIntel D945GSEJT。ディストリビューションはUbuntu 9.04 Server → 10.04 Serverです。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[Ubuntu] proftpdのインストールと文字化け対策
proftpdが好きなので、インストール。

$ sudo aptitude install proftpd



インストール中、standalone(デーモン)かinetd経由起動のどちらを選択するか訊かれる。
今回はinetdを選択した。

これで使えるが、サーバの文字エンコードがUTF-8なのでSJISのFTPクライアントでアップロードしたファイルは文字化けしてしまう。

甘き死よ、来たれ(英語歌詞+公式訳)熱唱したい人専用.flv

?A?????A??????i?p????\{???j?M?????????l??p.flv



こちらのURLにも意見があるが、UTF-8に対応したFTPクライアントを使うのがらくちん。
https://forums.ubuntulinux.jp/viewtopic.php?id=1737


でも、何を思ったか、proftpdにUTF-8 → SJIS変換をさせることにした。

方針としては、上のURLの#5の発言の手順7~にあるとおり、こちらのProFTPD 1.3.0 用 iconv() パッチ をもらってきて、proftpd-1.3.2aに手作業で適用させた。
最終的にソースはこんな感じになった。(diff オリジナル vs 変更後)

$ diff -r proftpd-1.3.2a_org/ ../proftpd-1.3.2a
../proftpd-1.3.2a/modulesだけに発見: mod_codeconv.c
../proftpd-1.3.2a/modulesだけに発見: mod_df.c

diff -r proftpd-1.3.2a_org/modules/mod_ls.c ../proftpd-1.3.2a/modules/mod_ls.c
246a247,248
> extern char* local2remote(char*);
>
252a255
> char* buf2;
276a280,286
> if (buf[0]) {
> buf2 = local2remote(buf);
> if (buf2) {
> strcpy(buf, buf2); free(buf2);
> }
> }
>
diff -r proftpd-1.3.2a_org/src/netio.c ../proftpd-1.3.2a/src/netio.c
623a624,625
> extern char* local2remote(char* local);
>
626a629
> char* p;
637a641,647
> if (buf[0]) {
> p = local2remote(buf);
> if (p) {
> strcpy(buf, p); free(p);
> }
> }
>



そしたら、"--with-modules=mod_codeconv:mod_df"をつけてconfigure。

$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-modules=mod_codeconv:mod_df



AtomなのでgccのCore2向け最適化を試してみる。config.hを編集。

17 /* Define to be the build CFLAGS. */
18 #define PR_BUILD_CFLAGS "-O2 -Wall -march=core2 -pipe -Q"


make&インストール。

$ make
$ sudo make install


設定ファイル /etc/proftpd.confは以下の部分を変更した。

6,7c6,7
< ServerName "ProFTPD Default Installation"
< ServerType standalone

---
> ServerName "horip ftp server"
> ServerType inetd

34c34
< #DefaultRoot ~
---
> DefaultRoot /var/ftp_root

37c37,45
< AllowOverwrite on
---
> AllowOverwrite on
>
> # Resume function
> AllowStoreRestart on
> AllowRetrieveRestart on
>
> #iconv setting
> CharsetLocal UTF-8
> CharsetRemote CP932


あと、anonymousがdefaultオンになっていたのでコメントアウト。

xinetdの設定(/etc/xinetd.d/proftpd)は以下のとおりにした。

service ftp
{
disable = no
flags = REUSE
socket_type = stream
instances = 10
protocol = tcp
wait = no
user = root
server = /usr/sbin/proftpd
no_access =
}

起動。

$ sudo /etc/xinetd.d/proftpd


転送テストをしていると、転送が途中で止まってしまう現象に遭遇。NICのドライバのバグらしい。

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/378907
http://www.monarch.de/wordpress/?p=101

回避するにはカーネルの再構築が必要だったので実施した。
詳細は次の記事
スポンサーサイト

テーマ:Linux - ジャンル:コンピュータ

コメント
コメント
コメントの投稿
URL:
本文:
パスワード:
非公開コメント: 管理者にだけ表示を許可する
 
トラックバック
トラックバック URL
トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。