Debian/Ubuntu でロケールを整理

localepurgeというパッケージを入れる方法もあるようなのだけど,手で設定した方が早いので.

$ locale -a # 今のロケールを確認
$ sudo vi /var/lib/locales/supported.d/en # enのトコは適宜かえて.不要な行を削除
$ sudo locale-gen --purge # 作成済のロケールを消しつつ,再生成

ほら,簡単でしょ?

追記
ちなみに使用可能なロケールリストは /usr/share/i18n/SUPPORTED

Mac OS X で GNU のコマンド

# port install coreutils,findutils,binutils

このままだと,lsがglsとかfindがgfindとなっているので,対策.

coreutils 関連:
/path/to/libexec/gnubin を $PATH の前の方に追加
bin/findutils関連:
$ port contents binutils | perl -nle 'print "alias $1=g$1" if m{/opt/local/bin/g(\w+)}' >> .alias

で alias を張る.
コマンド長いから,適当にコピって見てちょ.

参考:
Mint's log: Macportsのcoreutilsコマンド群はなんでも「g」から始まる
MacでGNUのコマンド群を使う - katz's adversaria

MacPorts + proxy

追記:
自分がまたハマったから,ちゃんと書こう.

  1. macportsをThe MacPorts Project –– Download & Installation(公式)から落としてインストールする.
  2. macportsのproxy設定
    112a113
    > rsync_server            sea.us.rsync.macports.org
    164c165
    < #proxy_override_env  	no
    ---
    > proxy_override_env  	yes
    169,172c170,173
    < #proxy_http          	proxy1:12345
    < #proxy_https         	proxy2:67890
    < #proxy_ftp           	proxy3:02139
    < #proxy_rsync         	proxy4:11377
    ---
    > proxy_http          	hoge:123
    > proxy_https         	hoge:123
    > proxy_ftp           	hoge:123
    > proxy_rsync         	hoge:123
    
  3. macportsのサーバの変更(ports.tar)

    32c32
    < rsync://rsync.macports.org/release/tarballs/ports.tar [default]
    ---
    > rsync://sea.us.rsync.macports.org/release/tarballs/ports.tar [default]
    

追記おわり

もう,Proxy越しのMacPorts update - そこはかとなく書くよ。の記事が必要十分なので,追加することなんてほとんどない.
一応,RSYNC_PROXY を知らなかった私のメモとして,こいつに指定するのは socks_proxy ではなくて,http_proxy だよってことくらいか.

簡単だね!

proxy越しでmacportsを使うにはいろいろな方式が色々なBlogに記載されていてわけわからないんだけれども、今これを試したらできました。
/opt/local/etc/macports/macports.conf
の最後に書かれている、proxy部分のコメントをはずし、書き換えます。

from Proxy越しのMacPorts update - そこはかとなく書くよ。

あと,デフォで設定されてる rsync.macports.org は日本からは鬼遅いので,ミラーを指定した方がいいよ.
バックボーン考えると,US あたりがいいんじゃないかな,かな.

Windows で,フォルダを仮想ドライブとして永続的にマウントする方法

Web で検索すると,subst を使うという,ログオフするだけでマウントが解除されてしまうイケてない方法ばかり出てきて,なかなか正解に辿りつけないので,自分用にメモっておく.
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices
へ,マウントさせたいドライブ名の文字列キーを作成して,マウントしたいパスを次の表記に従って入力するだけ.

\??\C:\Path

subst を起動スクリプトで回すより遥かに楽だと思うので,できる人はやってみるといいよ.

nginx+fastcgi+pukiwiki

nginx で pukiwiki を起動する時、web 上のレシピによっては fastcgi_param の設定が適切にできず、アンカーの張るパスがファイルシステム上のフルパスになってしまう場合がある。
正:

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

誤:

fastcgi_param  SCRIPT_NAME        $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

要は、phpinfo() の環境変数などが正しくセットされればいいわけで、正常な例とにらめっこしながら設定してみると良いのでは。

設定は、fastcgi_param で正しくやっておけば、nginx.conf だったり各サイトの server ディレクティブ内でだったりで設定しなくていいはず。

Nginx + Unicorn + Redmine

環境移設中にうまく動かなくなったので,追記.
ユーザの環境変数を引き継いでbundle exec ... は動くのに,crontab で @reboot から起こそうとすると,unicorn が上がらない場合,私の環境では次の2つが原因であった.

  • bundleコマンドを––user–localオプションつけてインストールしたから,rootからは見えなかった.
    ⇒フルパスで対応
  • bundlerを––user–localオプションつけてインストールしたから,bundle exec unicorn_railsの中でエラー吐いて動かなかった.
    sudo su - で完全にrootとしてログインして,gem install bundlerする.

これで解決したので,これ以上は調べてないよん.

途中.nginx から unicorn の呼び出しは設定完了済,設定ファイルは現行環境を見て,適宜,パースする(予定).

$cd tmp
$ wget http://www.redmine.org/releases/redmine-2.6.0.tar.gz
$ tar xzf redmine-2.6.0.tar.gz
$ mv redmine-2.6.0 ..
$ cd ~/redmine-2.6.0
$ sudo gem install bundler
$ vi database.yml
$ vi Gemfile.local
+ gem "unicorn"
$ bundle install --without development test rmagick postgresql sqlite
$ cp /oldfile/databasefile.sqlite3 ./db/
$ cp /oldfile/unicorn.rb ./config/
$ sudo bundle exec unicorn_rails -D -E production -c config/unicorn.rb # テスト
$ sudo kill (pid) # 停止

追記 2015/4/6
unicornまわりのコマンド系

起動
# bundle exec unicorn_rails -D -E production -c config/unicorn.rb

–D でデーモン化
–E hogehoge で hogehoge 環境を起動
–c hogehoge で hogehoge というファイルをコンフィグファイルに指定

停止
# kill -QUIT PID

unicorn.rb とかで pid ファイルを指定していると思うので,そいつを cat するか,ps aux | grep unicorn とかで探す.

再起動
# kill -HUP PID

完全にコンフィグとか読み直して欲しいんだけど,なんか反映されないことがあるので,その場合はQUIT→bundle execとする

新規に起動
# kill -USR2 PID

前のプロセスを残して起動.この後,QUIT すれば,サービスを止めずにプロセスを再起動できるという理屈だが,QUIT するのをよく忘れるので,あんま使ってない.

サブディレクトリで運用

アプリに依るんだろうけど,けっこう手間がかかるから,VirtualHost で運用できるなら,そっちのが楽.
redmineについては,そのうちまとめる.

SKK 導入 to ubuntu 14.04

for CLI
uim-fep を使う.
uim-fep と uim-skk をインストールして,uim-fep を起動すればいい.
for GUI
uim を使う.
上記に加えて uim を導入し,uim-pref-gtk で設定をした上で,再起動する.
for emacs
ddskk を使う.
上記とは無関係に,ddskk を導入し,emacs 上で C-x C-j として起動する.

追記
VM上のxmonadでCtrl+Spaceがそもそも登録できない時に,手で設定する場合.
~/.uim.d/custom/custom-global.scmの中で,

(define toggle-im-key '(" "))

英語ロケールの emacs -nw で tex の編集

追記
uim-fep と uim-skk を emacs -nw と共に使うと、漢字変換中の挙動により、インサートモードで編集している時に元の文書の一部を空白で置換してしまうという動作が見られたため、ddskk を使うことにした。
そうすると、emacs -nw にする必要はない。
追記ここまで

英語ロケールで emacs -nw を起動すると,yatex が args-out-of-range などと音を上げるので,それをなんとかする.

alias emacs-nox 'LC_ALL=ja_JP.UTF-8 emacs -nw'

とかなんとかやってみるといい.

なんで emacs -nw かといえば,emacs-nox ではなく emacs を入れているけど,uim-fep で skk を運用しているから,結局コンソールで emacs を起動したいという矛盾を抱えているから.

回線の死活監視

自宅の回線がよく切れるので,いい加減にムカついてきた.
とはいえ,どの程度切れているのかデータがないので計測することにする.

参考にしたのは,Perlでフラッシュする方法: 小粋空間

ただし,このままだと最後のperlの出力をファイルリダイレクトした時に,バッファリングされてしまう.
きっちりCtrl-dなんかで落とせばいいんだろうけど,うっかりCtrl-cで落とすと,バッファリングされている出力が電子の藻屑と化してしまう.
そこで,以下のように$|への代入でバッファリングを無効化するようコマンドを改造した.
あと細かいとこでいえば,24時間監視を1週間くらいしたく,200msでpingを打つと怒られそうなので,ちょっとパラメータもいじった.

$ ping hogehoge.destination.address -i 60 | perl -MPOSIX -ne "local $|=1;print strftime('%Y-%m-%d %H:%M:%S ',localtime), $_" > output.filename

ちなみに,多段のパイプやリダイレクトについては【bash】リダイレクトとパイプを理解する(3) - 私は素人サーバ管理者が参考になったものの,今回はそんな複雑なことにはならなかった.

Indexes の代わりをする php スクリプト

またつまらぬものを作ってしまった…

自分で管理しているサーバでは不要だが,会社のサーバなど管理者権限がなく,でもディレクトリ内のファイル一覧を見たいパスで,Indexes オプションの代わりをしてくれる php スクリプトを作ってみた.
自分のブラウザ環境で,ある httpd サーバのファイル一覧画面を参考に作ったものなので,多少のフォーマット変更は各人でヨロ.

<html>
<head>Index of <?php
if($_SERVER['SCRIPT_NAME']==$_SERVER['REQUEST_URI']) {
    if(dirname($_SERVER['REQUEST_URI'])=='/')  print '/';
    else print dirname($_SERVER['REQUEST_URI']).'/';
} else {
    print $_SERVER['REQUEST_URI'];
}
?>

Index of /


<?php
foreach (scandir('.') as $val) {
    if ($val=='.') continue;
    elseif ($val=='..') print "<a href=\"../\">../\n";
    else {
        print "<a href=\"$val\">$val";
        for ($i=51-strlen($val);$i>0;--$i) print ' ';
        $st=stat($val);
        print date('d-M-Y H:i',$st[9]);
        for ($i=20-strlen("$st[7]");$i>0;--$i) print ' ';
        print $st[7]."\n";
    }
}
?>

</body> </html>