読者です 読者をやめる 読者になる 読者になる

pacman (yaourt) ができなくなった

ftp.yz.yamagata-u.ac.jpからパッケージを落とせないといったエラーメッセージが出ているので、リポジトリの設定が誤っているのかなと思ったところ、
http://d.hatena.ne.jp/ArchLinux/20110225/1298629013
ftp.yz.yamagata-u.ac.jpはもうArch Linuxのパッケージを置いてくれていない様子…。
というわけで

$ sudo vim /etc/pacman.d/mirrolist

として、ftp.yz.yamagata-u.ac.jpをftp.jaist.ac.jpに改めてみました。

でもまだダメ。またパッケージが取得できないとのエラーが。
そこでhttp://ftp.jaist.ac.jp/pub/ をつらつらと眺めていたところ、パスが誤っていることに気づきました。
linux/archlinux ではなく Linux/ArchLinux と、jaistの場合はキャピタルだったんですね。

そうして

$ sudo yaourt -Syu

ところが

error: failed to prepare transaction (could not satisfy dependencies) 
package-query: requires pacman<3.5

なんでしょうか、このエラーは。
どうやら http://c.2ch.net/test/-.YYY000/linux/1294620299/ によると、pacmanまわりでバージョンのコンフリクトが発生している様子です。
上記スレの216様にしたがい

$ sudo pacman -R package-query pacman-color yaourt
$ sudo pacman -S pacman
$ sudo pacman -Syu

さて、どうでしょう?

error: could not open file /var/lib/pacman/sync/core.db: Failed to open '/var/lib/pacman/sync/core.db'
error: could not open file /var/lib/pacman/sync/extra.db: Failed to open '/var/lib/pacman/sync/extra.db'
error: could not open file /var/lib/pacman/sync/community.db: Failed to open '/var/lib/pacman/sync/community.db'
error: could not open file /var/lib/pacman/sync/archlinuxfr.db: Failed to open '/var/lib/pacman/sync/archlinuxfr.db'
error: local database version is too old
error: failed to init transaction (database is incorrect version)
  try running pacman-db-upgrade

と、また怒られたのでエラーメッセージ中の指示にしたがって

$ sudo pacman-db-upgrade
$ sudo pacman -Syu

…今度はopen office系のパッケージを更新する段階でエラーがでたので、それらをの更新はダイアログで「n」を選び、除外しました。

すると、今度はpacman -Syuが成功。
大量のパッケージが更新されました。…ここのところ長らく更新をサボってたんです、ごめんなさい。

あ、yaourt入ってない。というわけで締めに

$ sudo pacman -S yaourt

これにて終了!

複数サーバのログを一気に表示

職場で、アプリケーションサーバなりWEBサーバなりの定期的なログ監視をしましょうという話が出ているのですが、これがまあ面倒なこと、面倒なこと。
いや、必要だってことは分かってますよ。
ただ、何が面倒って、一回踏み台のサーバにsshして、そこからさらにアプリケーションサーバかWEBサーバにsshして、でもってログをtailしたり、lessしてShift + fしり、grepしたりするわけです。おまけに、どいつもこいつも複数台構成なので、こんなの毎回やってられないなと思ったわけです。
で、
コマンド一発でこれが全部見られたらいいなあと思いまして、screenのウィンドウ分割機能を使い、複数サーバのログをまとめて出力するシェルスクリプトを書いてみました。
時代は最早tmuxと思いますが、ウチのサーバの場合新しくインストールする必要があったので、まあこれでいいか、と。
以下は、2台構成のJBossクラスタのログを出力する例です。
ただしssh-keygen済みで、パスワード入力なしにsshできることが前提となっています。

#!/bin/bash

JBOSS_PATH=/usr/local/jboss/server

JBOSS_CLUSTER=cluster-A
SERVERS=(server-1 server-2)

LOG_CMD="tail -f ${JBOSS_PATH}/${JBOSS_CLUSTER}/log/server.log"

SERVER_NUM=${#SERVERS[@]}
i=0
while [ $i -lt ${SERVER_NUM} ];                                                                                                                       
do
        server=${SERVERS[$i]}
        next=$(($i + 1))
        if [ $i$ -eq 0 ];                                                                                                                             
        then
                screen -t ${server} ssh ${server} "${LOG_CMD}"; screen -X eval focus;                                                                 
        else
                screen -t ${server} ssh ${server} "${LOG_CMD}"; screen -X eval split focus "select ${next}";                                          
        fi
        i=${next}
done

とりあえずsweep_logs.shなどとテキトウな名前をつけておきます。
クラスタの名前やサーバ名(の配列)は、外から与えられるようにしておくとよいでしょう。これを格好良くしていくのは難しい話ではないと思いますし。
さて、実行!

$ ./sweep_logs.sh

あ、あれ?
screenが立ち上がってログも表示されましたが、ウィンドウは分割されないし何かが変です。
そこで試しに

$ screen ./sween_logs.sh

と、screen起動後に実行してみたところ大成功。
うーん、何かカッコ悪いですね。。。
まあとりあえず実用レベルまでは来たのでよしとしましょう。

JavaScriptコンソールを作ってみた

新年一発目のエントリがこれかよ、っていう感じが非常にしますが。
とある事情で書いてみたので、もしかしたらどこかの誰かが使うかもしれないと思いつつ上げてみます。
少々適当なものですが、以下のコードをコピペしてHTMLとして保存して、ブラウザで開いてみて下さいまし。でもって、テキストエリアにJavaScriptのコードを入力してexecuteボタンをポチっとするのみです。
特徴としては、print関数を定義していまして、引数(可変個与えられます)で渡した値をテキストエリアの上部に表示できます。
それから、シンタックスエラーの場合にはエラー行とエラー内容がalertで出るようになってます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <title>Matsushita JavaScript Console</title>
    <script type="text/javascript">
    function execute() {
      var src = document.getElementById('inputarea').value; 
      var outputarea =document.getElementById('outputarea'); 
      var print = function() {
        var i;
        var out = []; 
        for (i = 0; i < arguments.length; i++) { 
          out.push(arguments[i]);
        } 
        if (outputarea.innerHTML) {
          outputarea.innerHTML += '<br />' + out.join('<br />');
        } else {
          outputarea.innerHTML = out.join('<br />'); 
        }
      }; 
      var srcArray;
      var j;
      if (!src) {
        return;
      }
      outputarea.innerHTML = '';
      srcArray = src.split('\n');
      try {
        for (j = 0; j < srcArray.length; j++) {
          eval(srcArray[j]);
        }
      } catch(e) {
        alert('An error has occurred in line ' + String(j + 1) + '\n' + e);
      }
    };
    </script>
  </head>
  <body>
    <div id="outputarea"></div>
    <div>
      <input type="button" value="execute" onclick="execute();" />
    </div>
    <textarea id="inputarea" style="width:600px;height:400px;"></textarea/>
  </body>
</html>

追記。
とっくの昔にどこかで誰かが作ってそうですよね。
ですがまあ、書いた方が早いんじゃ?っていうレベルだったので。

追記の追記。
エラー行検知のために行単位でevalしてますが、for文、if文、関数が記述しにくすぎるのでダメだなーと思った今日この頃。
両立は面倒だなー。

時計修正

時計がズレすぎていて、ニコニコ動画のログイン時に警告が出てきたので修正してみたり。

# pacman -S ntp
# ntpdate {HOST}
# hwclock --systohc

{HOST}は
http://wiki.nothing.sh/page/NTP/%BF%E4%BE%A9%B8%F8%B3%AB%A5%B5%A1%BC%A5%D0#iacddb03
にて適当に拾いました。
今回は2ch
以上、と、言いたいところですが、自動でntpサーバを参照して時計を修正する設定でも書いておきます。
/etc/ntp.conf
にて、

server {HOST}

と記述してntpサーバを指定し、
/etc/rc.conf
のDAEMONSにntpのデーモンを加えます。

DAEMONS=(dbus hal alsa ntpd)  # この中に追加する

これでお終い。
…と、思います。
実はデーモンの設定の部分は、実際にはまったく試してません。

うーん

サーバ機でもないし、時計の調整ごときにデーモンを立ち上げる必要があるんでしょうか?

そこで

adjustclock.shとして

#!/bin/sh
ntp {HOST}
hwclock --systohc

って書いて、rootユーザにて

# crontab -e
 * * * * 0 {PATH}/adjustclock.sh

ってした方がまだいいんじゃ?

Erlang開発環境準備on Arch Linux

# yaort -S erlang

これでelispも一緒に入ってくるらしい。
emacsの設定は、Erlang本家のドキュメント
http://www.erlang.org/doc/apps/tools/erlang_mode_chapter.html
を参考にしましょ…

3.4  Setup on UNIX

To set up the Erlang Emacs mode on a UNIX systems, edit/create the file .emacs in the your home directory.
Below is a complete example of what should be added to a user's .emacs provided that OTP is installed in the directory /usr/local/otp :

 (setq load-path (cons  "/usr/local/otp/lib/tools-/emacs"
      load-path))
      (setq erlang-root-dir "/usr/local/otp")
      (setq exec-path (cons "/usr/local/otp/bin" exec-path))
      (require 'erlang-start)

うーん、パスの直書きってのがなあ。バージョン番号変わったときにどうするのかとか…
というわけで、こうしてみました。
~/.zshrc

export ERLANG_HOME=/usr/lib/erlang

~/.emacs.d/init.el

(setq load-path
        (cons (let *1
        load-path))
(setq erlang-root-dir (getenv "ERLANG_HOME"))
(setq exec-path (cons (concat (getenv "ERLANG_HOME") "/bin") exec-path))
(require 'erlang-start)

で、emacs起動。



え、何かエラー出てる。
バグでerlang-skels.elが入ってないとか、もうね…。
https://bugs.archlinux.org/task/18706
githubにて目標捕捉。
http://github.com/erlang/otp/raw/dev/lib/tools/emacs/erlang-skels.el
これを
/usr/lib/erlang/lib/tools-2.6.5.1/emacs
に設置して完了。

…あー、バイトコンパイルするのや、~/.emacs.d/elispの下に置いたりするのはどうするかな。

*1:erllib (concat (getenv "ERLANG_HOME") "/lib/"))) (concat erllib (file-name-completion "tools-" erllib) "emacs"

emacsの基本的な設定整備

長らくサボっていた、emacsの設定整備。
やっと基本的なところを済ませました。
WEB+DB PRESS vol.58を見ながらやったので、内容にかぶるところが多いです。

.emacsお引越し

これまで、~/.emacsに基本的な設定を詰め込んでいましたが、ちょっと変更しました。

~/.emacs.d
|
+─init.el <- 今まで.emacsに記述していたものを記述する
|
+─/elisp <- DLしたり自分で書いたelやらelcやらが入る、site-lispに相当するディレクトリ
|
+─/config <- 設定ファイルが入るディレクトリ

これにより、.emacs.dだけでユーザ設定が完結するのでポータビリティが上がるという話。
Dropboxでsyncしちゃいましょう。
…ってことは、yaourtやapt-getで無闇にelファイルを導入しない方がいいってことですね。

auto-install

elispの導入を簡単にします。
http://www.emacswiki.org/emacs/download/auto-install.el
をDLし、~/.emacs/elisp/に設置。
init.elに

(when (require 'auto-install nil t)
        (setq auto-install-directory "~/.emacs.d/elisp/")
        (auto-install-update-emacswiki-package-name t)
        ;; proxy setting
        ;(set url-proxy-services '*1

を記述すれば準備完了。
使用方法は

M-x install-elisp RET
elispのURLを入力 RET で、elispがDLされ、
C-c C-c でインストールディレクトリに設置&バイトコンパイル

です。

auto-install.elのバイトコンパイルもしておきましょう。

M-x byte-compile-file RET
~/emacs.d/elisp/auto-install.el RET
auto-complete

必需品なので導入します。
http://cx4a.org/software/auto-complete/index.ja.html
から圧縮ファイルを落としてきて展開。

M-x load-file RET
後はミニバッファに従って進めるだけ

でもって、init.el中に

(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)

うーん…。
解答して中身をauto-installに渡す関数を書いてみてもいいんじゃなイカ?

redo+

undoはC-x uでできるけど、redoってないのでとりあえず導入。

M-x install-elisp RET
http://www.emacswiki.org/emacs/download/redo+.el RET
C-c C-c

http://www.emacswiki.org/emacs/download/ を省略する関数を作ってもいいんじゃなイカ?
そしてinit.elに

(require 'redo+ nil t)
anything

また次回にまわします。

*1:"http" . "localhost:8339"))) ;; enable install-elisp functions (auto-install-compatibility-setup

urxvtの背景画像設定

コンパイル時に頑張る必要があると勝手に思ってたけど、簡単にできるらしい。
http://blog.asial.co.jp/404

というわけで、.Xdefaultsに

URxvt*shading: 80
URxvt*inheritPixmap: True

を書き足して

$ xrdb .Xdefaults