読んじゃダメ、あるいは真似しないでね

「ロリポップ! レンタルサーバ」の…

皆が真似し出したらエラいことになるのでタイトルからは伏せる。

スタンダードプラン以上で ssh ログインして「ちゃんとした emacs を使いたい」話。

まず起動するとこうなる:

 1 lolip@user: ~$ emacs
 2 Warning: arch-dependent data dir (/usr/libexec/emacs/23.1/x86_64-redhat-linux-gnu/) does not exist.
 3 Warning: arch-independent data dir (/usr/share/emacs/23.1/etc/) does not exist.
 4 Warning: Lisp directory `/usr/share/emacs/23.1/site-lisp' does not exist.
 5 Warning: Lisp directory `/usr/share/emacs/23.1/lisp' does not exist.
 6 Warning: Lisp directory `/usr/share/emacs/23.1/leim' does not exist.
 7 Error: charsets directory (/usr/share/emacs/23.1/etc/charsets) does not exist.
 8 Emacs will not function correctly without the character map files.
 9 Please check your installation!
10 lolip@user: ~$ 

ほんとにないの?

1 lolip@user: ~$ locate site-lisp
2 -bash: locate: command not found
3 lolip@user: ~$ 

げ。locate 入ってないんか。しょうがないなぁ。

1 lolip@user: ~$ find /usr -type d -name site-lisp
2 /usr/share/emacs/site-lisp
3 ^C
4 lolip@user: ~$ 

なんだ、いるじゃん。コマンドラインオプションから load-path 制御、やったことないなぁ:

 1 lolip@user: ~$ emacs --help
 2 Usage: emacs [OPTION-OR-FILENAME]...
 3 
 4 Run Emacs, the extensible, customizable, self-documenting real-time
 5 display editor.  The recommended way to start Emacs for normal editing
 6 is with no options at all.
 7 
 8 Run M-x info RET m emacs RET m emacs invocation RET inside Emacs to
 9 read the main documentation for these command-line arguments.
10 
11 Initialization options:
12 
13 --batch                     do not do interactive display; implies -q
14 --daemon                    start a server in the background
15 --debug-init                enable Emacs Lisp debugger for init file
16 --display, -d DISPLAY       use X server DISPLAY
17 --multibyte, --no-unibyte   inhibit the effect of EMACS_UNIBYTE
18 --no-desktop                do not load a saved desktop
19 --no-init-file, -q          load neither ~/.emacs nor default.el
20 --no-shared-memory, -nl     do not use shared memory
21 --no-site-file              do not load site-start.el
22 --no-splash                 do not display a splash screen on startup
23 --no-window-system, -nw     do not communicate with X, ignoring $DISPLAY
24 --quick, -Q                 equivalent to -q --no-site-file --no-splash
25 --script FILE               run FILE as an Emacs Lisp script
26 --terminal, -t DEVICE       use DEVICE for terminal I/O
27 --unibyte, --no-multibyte   run Emacs in unibyte mode
28 --user, -u USER             load ~USER/.emacs instead of your own
29 
30 Action options:
31 
32 FILE                    visit FILE using find-file
33 +LINE                   go to line LINE in next FILE
34 +LINE:COLUMN            go to line LINE, column COLUMN, in next FILE
35 --directory, -L DIR     add DIR to variable load-path
36 --eval EXPR             evaluate Emacs Lisp expression EXPR
37 --execute EXPR          evaluate Emacs Lisp expression EXPR
38 --file FILE             visit FILE using find-file
39 --find-file FILE        visit FILE using find-file
40 --funcall, -f FUNC      call Emacs Lisp function FUNC with no arguments
41 --insert FILE           insert contents of FILE into current buffer
42 --kill                  exit without asking for confirmation
43 --load, -l FILE         load Emacs Lisp FILE using the load function
44 --visit FILE            visit FILE using find-file
45 
46 Display options:
47 ^C
48 lolip@user: ~$ 

–L で行けそうね:

 1 lolip@user: ~$ emacs -L /usr/share/emacs/site-lisp/
 2 Warning: arch-dependent data dir (/usr/libexec/emacs/23.1/x86_64-redhat-linux-gnu/) does not exist.
 3 Warning: arch-independent data dir (/usr/share/emacs/23.1/etc/) does not exist.
 4 Warning: Lisp directory `/usr/share/emacs/23.1/site-lisp' does not exist.
 5 Warning: Lisp directory `/usr/share/emacs/23.1/lisp' does not exist.
 6 Warning: Lisp directory `/usr/share/emacs/23.1/leim' does not exist.
 7 Error: charsets directory (/usr/share/emacs/23.1/etc/charsets) does not exist.
 8 Emacs will not function correctly without the character map files.
 9 Please check your installation!
10 lolip@user: ~$ 

ん? 全く状況変わらん…。てか /usr/share/emacs/site-lisp/ はガラだけか?

1 lolip@user: ~$ find /usr/share/emacs/site-lisp/
2 /usr/share/emacs/site-lisp/
3 /usr/share/emacs/site-lisp/site-start.d
4 lolip@user: ~$ 

うわぁ、なんにも入っとらん。

しょうがない。持ってくるか。23.1 ね…。

 1 lolip@user: ~$ wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-23.1.tar.bz2
 2 --2015-10-23 03:52:39--  http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-23.1.tar.bz2
 3 Resolving ftp.jaist.ac.jp... 150.65.7.130, 2001:df0:2ed:feed::feed
 4 Connecting to ftp.jaist.ac.jp|150.65.7.130|:80... connected.
 5 HTTP request sent, awaiting response... 200 OK
 6 Length: 34382732 (33M) [application/x-bzip2]
 7 Saving to: `emacs-23.1.tar.bz2'
 8 
 9 100%[======================================================================================================================>> 34,382,732  21.2M/s   in 1.6s
10 
11 2015-10-23 03:52:41 (21.2 MB/s) - `emacs-23.1.tar.bz2' saved [34382732/34382732]
12 
13 lolip@user: ~$ tar jxvf emacs-23.1.tar.bz2
14 tar (child): bzip2: Cannot exec: No such file or directory
15 tar (child): Error is not recoverable: exiting now
16 tar: Child returned status 2
17 tar: Error is not recoverable: exiting now
18 lolip@user: ~$ 

あらやだ、bzip2 入ってない。うげぇ。仕方ない、gz のほう:

 1 lolip@user: ~$ wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-23.1.tar.gz
 2 --2015-10-23 03:55:15--  http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-23.1.tar.gz
 3 Resolving ftp.jaist.ac.jp... 150.65.7.130, 2001:df0:2ed:feed::feed
 4 Connecting to ftp.jaist.ac.jp|150.65.7.130|:80... connected.
 5 HTTP request sent, awaiting response... 200 OK
 6 Length: 42904117 (41M) [application/x-gzip]
 7 Saving to: `emacs-23.1.tar.gz'
 8 
 9 100%[======================================================================================================================>] 42,904,117  3.28M/s   in 6.3s
10 
11 2015-10-23 03:55:21 (6.47 MB/s) - `emacs-23.1.tar.gz' saved [42904117/42904117]
12 
13 lolip@user: ~$ tar zxvf emacs-23.1.tar.gz
14 ...
15 lolip@user: ~$ 

さてどーすっか。ビルドしてしまってインストール先をホーム配下にするか、必要な site-lisp と etc だけホーム配下にコピーするかのどっちかだけれど、前者はきっと失敗するだろう。こんだけ色んなものが入ってないんだから。

site-lisp と etc だけで良かったかね?

それと環境変数変えずに .emacs にも書かずに読んでくれるホーム以下ってないかね? 結構プラットフォームによって違うからな、これ。

まず…環境変数はこれか。環境変数で措置するなら EMACSLOADPATH と EMACSDATA の2つをセットすりゃ良さそうね。デフォルトの load-path、どっかに書かれてないかなぁ? ~/.lib とかを読み込みに行ってた環境が記憶にあるんだけど? そういやここんとこの emacs は皆 ~/.emacs.d 以下に置かれるな。.emacs.d/lisp/ は、デフォルト、なのか、ユーザ設定の慣例なのかどっちだったか?

うん、そいじゃ、まずは ~/.emacs.d に「置くだけ」をやってみるか。なんか info とか leim とか全部いたほうがいい気がしてきた。てことは、「いらないもの」をピックアップ、か、まずは。いらないのは nextstep, src, lib-src, m4, nt だろうね。これらはプラットフォーム依存と「ソース」だ。ランタイムには不要。

うー、tar の exclude の使い方忘れた…:

1 lolip@user: ~$ cd emacs-23.1
2 lolip@user: emacs-23.1$ tar cf - . --exclude=nextstep --exclude=src --exclude=lib-src --exclude=m4 --exclude=nt | tar tvf - | less

コマンドラインだけでやるなら並べるしかなかったか? なんかカンマ区切りかなんかでイケた記憶があんだけど。記憶違いかしら。まぁこれでいけるからいいか。

1 lolip@user: emacs-23.1$ tar cf - . --exclude=nextstep --exclude=src --exclude=lib-src --exclude=m4 --exclude=nt | tar xvf - -C ~/.emacs.d

ん。そいでわ:

 1 lolip@user: emacs-23.1$ emacs
 2 Warning: arch-dependent data dir (/usr/libexec/emacs/23.1/x86_64-redhat-linux-gnu/) does not exist.
 3 Warning: arch-independent data dir (/usr/share/emacs/23.1/etc/) does not exist.
 4 Warning: Lisp directory `/usr/share/emacs/23.1/site-lisp' does not exist.
 5 Warning: Lisp directory `/usr/share/emacs/23.1/lisp' does not exist.
 6 Warning: Lisp directory `/usr/share/emacs/23.1/leim' does not exist.
 7 Error: charsets directory (/usr/share/emacs/23.1/etc/charsets) does not exist.
 8 Emacs will not function correctly without the character map files.
 9 Please check your installation!
10 lolip@user: emacs-23.1$ 

変わらず。.emacs.d はただの慣習だったか。仕方ない。とりあえずコマンドラインオプションでイケるかどうか?

 1 lolip@user: emacs-23.1$ emacs -L ~/.emacs.d/lisp
 2 Warning: arch-dependent data dir (/usr/libexec/emacs/23.1/x86_64-redhat-linux-gnu/) does not exist.
 3 Warning: arch-independent data dir (/usr/share/emacs/23.1/etc/) does not exist.
 4 Warning: Lisp directory `/usr/share/emacs/23.1/site-lisp' does not exist.
 5 Warning: Lisp directory `/usr/share/emacs/23.1/lisp' does not exist.
 6 Warning: Lisp directory `/usr/share/emacs/23.1/leim' does not exist.
 7 Error: charsets directory (/usr/share/emacs/23.1/etc/charsets) does not exist.
 8 Emacs will not function correctly without the character map files.
 9 Please check your installation!
10 lolip@user: emacs-23.1$ 

あら? 違うの? うーん。

1 lolip@user: emacs-23.1$ export EMACSLOADPATH=~/.emacs.d/lisp
2 lolip@user: emacs-23.1$ emacs

あ、警告は変わらないけど状況は変わった。lisp は見えてるな。驚いたな、dired って、df 呼び出すのか。つーか df も入ってないのか、「ロリポップ!」。うー、これは手詰まってる。dired は今は諦めとくか。

ほかは大丈夫かな? M-x shell は △。あ、job control が使えないと言ってるな。「穏便に」使うぶんにはなんとか使えるか。M-x calendar とかもちゃんと色付きで大丈夫だし、メジャーモード(pythonモード)とかもちゃんと動いてる。

おっしゃ。快適さは3割増くらいにはなったかな。

dired が悔しいぞ。df も持って来ちゃおうかとも思うが、あ、そういやコンパイラなんか入ってるわきゃねーわ。ソースからビルドするつもりだったけどそりゃ無理だ。これ、OS なんだろう? uname なんかも入ってないし。もうほとんど「勝手なことすんなよ」構成ね。あ、emacs の警告でおよそわかるじゃないか。「x86_64-redhat-linux-gnu」ね。CentOS とかの redhat 系の rpm から引っこ抜けるね。情報なしだと何個も試さないと動かないだろうけど。

うーん。今日はここまでにしとこう。最初の状態よりはずっと良くなったし。なお、「–L ~/.emacs.d/lisp/」なんだけど、後から「効いてる」ことには気付いた。ただしこれだけだと多分サブディレクトリが追加されてなくて、regexp-opt がない、と言われる。これは環境変数での制御より明らかに楽じゃないので、ひとまず EMACSLOADPATH で行っとく。(.bash_profile か .bashrc か .login かそこいらに追加しとこう。)












あー。「嘘つきdf」も試しといた方がいいな。「常に固定値を返す df」(つまりウソしかつかない df):

1 #! /bin/sh
2 echo "Filesystem           1K-blocks      Used Available Use% Mounted on"
3 echo "/usr                 488282108 272704284 215577824  56% /usr"

こいつに実行権限付けて…

あ、いけちゃった。これでいいや、「total used in directory 44 available 215577824」なんて情報、ワタシは一度として活用したことなんかないし。

まぁ emacs 以外で df 使いたいって思うことも…、ないか。共用サーバのユーザにそんなニーズ。「自分のクオータ」の使用量見ないと意味ないもんな。よしよし、これでいい。

この「大嘘つき野郎!」を ~/.bin に置いて、.bash_profile はこうしとく:

1 export PATH=$PATH:~/.bin/
2 export EMACSLOADPATH=~/.emacs.d/lisp/

言うことなし。

あとは ssh ログインでの「不愉快」は、大物では、セッションが切れるのが早過ぎるのをどうにかしたい、てのと、あとパスワードログインをやめたい、てのの2つか。この2つをクリアしちゃえば、ほぼ満足だな。どっちも忘れちゃったわ。特に前者。確か措置方法あった気がすんだけどなぁ。












ところで。

emacs は、「公式には入ってないことになってる」ものであって、入っちゃってるのはきっと、保守担当者の趣味か「事故」でしょう。なので、ある日突然なくなってても文句言えないんよねぇ。そんときゃそんとき、か、もしくは、ユーザとして正式に要望出すかどっちかね。なんつーか、こういう不完全な状態でインストールされちゃってること自体、「改善してみれば?」くらいは言える様な気がするし。