2025年10月4日土曜日

AQUOS zero2(docomo SH-01M)の電源が入らなくなった。

2025/10/04 充電したまま寝て起きたら電源が落ちていた。電源ボタンを長押ししても電源が入らない。
  • 最初は電源ボタン長押しでもうんともすんとも言わない。
  • しばらく、充電せずに放置して、再度いろいろトライしたところ。。。。
    • 電源長押しで振動して、「docomo」のロゴ(※)はでるが、そのあと電源が落ちてしまう。
    • 「docomo」のロゴが出る画面が何度か繰り返す場合もある。
(※)この機能の名前は「Full Screen LOGO機能」でよいのかな。

いろいろググってみたところ、似たような症状の筐体はある。もうギブアップですなぁ。
もう古いので、新しいスマホを買うしかないのだが、一応修理にだすかどうするか考え中。

参考:

2022年5月14日土曜日

gitのリポジトリからファイルを削除

% git clone [リポジトリ]
% git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch -r [対象ディレクトリ]' -- --all
% git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

ディレクトリを削除したいので、「-r [対象ディレクトリ]」で実行した。うまく言った様子。ただ、「git push --all --force origin」でリポジトリに反映させようとしたが、remote(origin)がnon-bareリポジトリだったので、うまくいかず。「.git」ディレクトリ事置き換えてしまいました。(non-bareは関係ないかもしれないけど。。。。。)

(参考)
  • https://hatsune.hatenablog.jp/entry/2013/04/20/112606
  • https://qiita.com/Spring_MT/items/f60c391b5dbf569a1d12
  • https://zenn.dev/flyingbarbarian/articles/aaf59c07b71a34
あと、このコマンドも便利であった
git log --all --name-status --pretty=short --graph

2022年5月8日日曜日

dockerのmailman3でメールのアーカイブができない

GWを使って、mailman3を構築している。下記のサイト(※)を見つつ進めたところ、メールのアーカイブができない事象に遭遇。

※ mailman-coreコンテナのmailman.logがこんな感じ。
tail -f core/var/logs/mailman.log
May 07 16:17:59 2022 (27) Exception in the HyperKitty archiver: <html><title>Auth required</title><body>
                    <h1>Authorization Required</h1><p>The archiver key is now
                     required to be sent over the Authorization HTTP header.
                     You need to upgrade the mailman-hyperkitty package to
                     1.2.0 or newer.
                    </p></body></html>
May 07 16:17:59 2022 (27) Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/mailman_hyperkitty/__init__.py", line 154, in _archive_message
    return url
  File "/usr/lib/python3.8/site-packages/mailman_hyperkitty/__init__.py", line 210, in _send_message
    except ValueError as e:

メッセージのとおり、mailman-hyperkittyモジュールを1.2.0以上にする必要があるようす。githubで、maxking/docker-mailman/Dockerfileを見たら所、4/14にmailman_hyperkittyが1.2.0に変更されているが、コンテナイメージが更新されていない。

対処として、コンテナに入ってmailman-hyperkittyをアップデート(pip install -U mailman-hyperkitty)して、コンテナを再起動(docker container restart mailman-core)したら、無事にアーカイブできるようになった。さらに、過去の投稿も登録された。

  • コンテナイメージをアップデートしてくれないかなぁ…
  • pipを使ったら、pipのバージョンがふるいって言われるなぁ…
  • コンテナイメージとしてrollingを使うのが正しいのかぁ…
(※)サイト

https://github.com/maxking/docker-mailman

https://rohhie.net/ubuntu20-04-building-a-multi-domain-mailing-list-with-mailman3-first-half/

2022年5月5日木曜日

tcpdump で syn/fin/rst をキャプチャする

tcpdump -n \(tcp[tcpflags] \& \( tcp-syn\|tcp-fin\|tcp-rst \) != 0 \)

※ (と&と|はシェルに解釈されないようにエスケープ

tcp-syn|tcp-fin|tcp-rst の論理和(であってる?)と、tcp[tcpflags]で論理積をとって、0でなければどれかのフラグが立っているといる。

(参考)

https://eijiyoshida.hatenablog.jp/entry/20100805/1280995787

2022年4月2日土曜日

暗号化の考え方

公開鍵では、Lock「錠(じょう)」とKey「鍵(かぎ)」が作成される。
  • Lockを公開錠として、Keyを秘密鍵とすることで、データを秘密裏に受け取ることができる。
    • 受信者が送信者にLock(公開錠)を渡す
    • 送信者がデータをLockして、送付
    • 受信者が暗号化されたデータをKye(秘密鍵)で開錠してデータを確認する。
  • Keyを公開鍵として、Lockを秘密錠とすると、自分を証明することができる。
    • 送信者の証明書をLock(秘密錠)して相手に送付
    • 受信者はデータをKey(公開鍵)で開封して証明書を取り出す。
    • 証明書は、認証局でLock(秘密錠)されており、認証局のKey(公開鍵)で開封できれば、証明書が認証局でLockされたものと確定できる。(認証局のKeyで開封できるのは、認証局のLockで暗号化されているものだけだから) ※ この辺りは少しあやふや。
      • 送付内容をLockしたものと、原文のまま(暗号化されてないまま)送る
      • 受信者が開封して出てきた内容と、原文のまま届いた内容が同じであれば、Keyの所有者からもらった内容であると証明される
  • PFS(Perfect Forward Secrecy:前方秘匿性)
    • DHEを使う。詳細はここ。https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%83%95%E3%82%A3%E3%83%BC%E3%83%BB%E3%83%98%E3%83%AB%E3%83%9E%E3%83%B3%E9%8D%B5%E5%85%B1%E6%9C%89
    • ざっくりいうと、通信するそれぞれが、「相手の公開鍵と自分の秘密鍵」で共通鍵を作ることができる。

2022年2月11日金曜日

LANG=C xdg-user-dirs-gtk-update

 探せば簡単に出てくるのですが、どうしても忘れるのでメモっておきます。

Ubuntuなどでホームディレクトリの名前が日本語でつけられるのを変更する方法です。

LANG=C xdg-user-dirs-gtk-update

以上です。


ちなみに「LANG=C」を外して再度実行すれば、自分のLANGで設定しなおしてくれるようです。 

2021年4月25日日曜日

FreeBSD13 を Windows10上のVirtualbox6.1.18に導入。

FreeBSD13 を Windows10上のVirtualbox6.1.18に導入中。

  • X設定に困る。解像度が出ない。
  • virtualbox-ose-additionを入るが、vboxvideoはうまく動かない。
  • xf86-video-vmwareを入れるとうまくいった。。。

VirtualBoxのビデオ(設定→ディスプレイ→グラフィックコントローラのところのやつ)で対応がちがうのだな。よく考えれば、そういうものかも。ビデオカードによってドライバ変更するんだもんな。。。

VMSVGA(デフォルト)になっている。
vmwareのvideoで認識してくれる。
VBoxVGA
vboxvideoで認識してくれる
VBoxSVGA
FreeBSD自体が起動しない。起動シーケンスの途中でpanicで落ちる

2020年3月22日日曜日

ubuntu18.04 on virtulbox のディスク拡張

virtualboxで利用しているubuntuのDISKが足りなくなったので、拡張する。

こちらのサイトの内容とほぼ同じ。
http://ism67ch.net/?p=283

  1. ■ざっくり方針
    1. DISKイメージ(.vdi)を大きくする。
    2. fdisk/parted/resize2fsで領域拡張。
  2. ■事前準備
    1. 電源OFF
    2. 念のためディスクのファイルをコピー(意味あるかは不明)
  3. ■DISKイメージのサイズ拡張
    1. virtualboxの「ファイル」→「仮想メディアマネージャ」でDISKのサイズを増やす対象のVMのDISKサイズを大きくすればよい。
  4. ■ubuntuをメンテナンスモードで起動
    1. 起動時に「ESC」を押し続ける
    2. ブートメニューが表示されたら最後に「(recovery mode)」とついているやつを選択
    3. リカバリーメニューが表示されるので、「root」を選択
  5. ■DISK処理(状態確認)
    1. 「fdisk -l」と「lsblk」コマンド
    2. /dev/sda2と/dev/sda5のStartとEndがかぶっていてよくわからないなと思っていたら、どうも拡張領域(Extended)から論理ボリュームを切り出している様子。約1G。※ sda2/sda5はswap領域で消えてもよいデータなので、削除してsda1を拡張して、最後にswap用に再生成することにした。
      最初の状態
  6. ■sda1を拡張するためにsda2(とsda5)を削除する。※ 先にswapoffをしたほうよい
    1. 「fdisk /dev/sda」コマンドでfdiskの起動。
    2. 「d」で削除。sda2のパーティションを削除する(sda5はsda2上に作られた論理パーティションなので一緒に消える)
    3. sda1の拡張は「parted」コマンドで実施するので、「w」で書き込みして「q」で「fdisk」を抜ける。特定のデバイスつかっているよとエラーが出て、swapを外してなかったことを思い出す。
    4. 「swapon -s」で状態確認、「swapoff /dev/sda5」でswap外し
      sda2パーティション削除

      fdiskの終了

      swap外し(ちょっとグダグダ)
  7. ■sda1を拡張する
    1. 最初のサイトにあった「(prated) resize」はもう使えないと。「(parted) resizepart」で拡張。なにが違うんだろう。
    2. 終わったら「resize2fs /dev/sda1」でFSの拡張も対応。
      partedで領域拡張

      拡張完了

      一応fdiskでも確認
      resize2fsを実行
  8. ■消したsda2/5を作っておく
    1. 「fdisk」コマンドで作成した。
    2. 「swapon」
  9. ■再起動
    1. sda1の拡張はうまくいった様子。
    2. swapは認識していなかった。fstabがUUIDで設定されており、それが変更(というか無い?)ためかと思う。
    3. mkswap /dev/sda5を実施して、表示されるUUIDを/etc/fstabに設定する。
    4. 「swapon -a」でマウント

2018年10月14日日曜日

ubuntu16.04LTSから18.04LTSへのアップグレード失敗

とりあえずubuntu16.04LTS→18.04LTSに失敗して、なんとか復旧できたのでメモを公開。あとで清書しよう。。。。
  • do-release-upgradeでubuntuを16.04LTSから18.04LTSにアップグレード
  • 色々エラーが出ているが気にせず再起動
  • OSは起動してXでのログイン画面が出てくるが、パスワード打ってログインしたら、固まる。
    • このあたり「alt-ctl-F2」とかF1,F3,F4を押すとコンソールになったりする機能があるので、それをつかえればもっと作業しやすかったかも。これに気が付いたのが最後のほうだったので、あまり有効に使えなかった。
  • ALT-CTRL-DELETEで再起動はできる。
  • 起動時にshiftキーを押しておくと「リカバリモード」で起動可能。
    • https://kledgeb.blogspot.com/2012/08/ubuntu-1204_28.html
  • pkg fixでも治らない
  • (何度か再起動)
  • networkを有効にしてroot promptに入る
  • なぜかresolve.confが更新されないので、手動で作る。echo 'nameserver 8.8.8.8' > /etc/resolv.conf
  • ググるとでてくる、「https://bugs.launchpad.net/ubuntu/+source/systemd-shim/+bug/1773859」これっぽい。
    • 「/usr/share/dbus-1/system-services/org.freedesktop.systemd1.service 」を「/usr/share/dbus-1/system-services/org.freedesktop.systemd1.service.systemd」にmvしようとするが、失敗して止まる。多分「「/usr/share/dbus-1/system-services/org.freedesktop.systemd1.service.systemd」がすでにあるの場合に失敗するのかと思われる。(少なくとも私の環境ではすでにあった。)
    • 別の名前にmvする。
  • apt-get -f install でインストール失敗しているpkgをインストール
    • これって、apt-get updateでローカルのパッケージ一覧を更新している前提があって、「-y install」で、失敗しているpkgをインストールできることになるという理解であってますかね。。。
  • やはり途中で止まる。。。「リカバリモード」のrootでログインして、「apt update」「apt upgrade」を実行したら「dpkg --configure -a」を実行しろとのこと。いわれるまま進める。
  • サービス起動(?)の「Started Braille Device Support.」で刺さる。「ctrl-z」でとめて、「killall systemctl」を打ってから、「fg」。もう意味わからないけど、とりあえず進む。
    • https://askubuntu.com/questions/731671/botched-upgrade-dpkg-hangs-on-started-braille-device-support
  • これも出た。「python3-aptdaemon.pkcompat : Conflicts: packagekit
                                          Conflicts: packagekit:i386」
    「apt remove」でpython3-aptdaemon.pkcompatを消してから、「apt upgrade」する。
  • https://askubuntu.com/questions/837927/trying-to-upgrade-packages
  • systemdあたりでひっかかったらひたすら「killall systemctl」でしのぐ

2017年5月27日土曜日

Let's Encript

無料のSSL証明書が、メジャーなアプリのルート証明書に登録された認証局から発行されるとのこと。SSL証明書を入手するにはお金がかかるし、手間もかかるので見送っていたが、やってみることにした。

下記当たりの記事がとても参考になりました。

  • http://knowledge.sakura.ad.jp/knowledge/5573/
  • https://hyper-text.org/archives/2016/10/lets_encrypt_ssl_quick_start.shtml
  • https://letsencrypt.jp/usage/install-certbot.html
  • https://hyper-text.org/archives/2015/01/full_time_ssl_website_quick_start.shtml

自分で確認した感じ。。。。
  • 証明書系
    • DV証明書がでる。まあSSL暗号化で利用する分程度に問題ない証明書と思えばよいのかな。
    • 証明書のレベルってこんな感じ?
      • DV証明書:ドメインとサイトが同じ管理者を確認。フィッシングなどでユーザ側のタイポとかのちょっとしたミスで別のサイトに行っても正しい証明書が出る。
      • OV証明書:申請者企業があることを証明。フィッシングサイトを作ることもできるが、企業情報を認証局に送るので逃げることができない。(実際には、逃げるやり方はいっぱいあるだろけど。)
      • EV証明書:信頼できる!(ようわからんが)
  • 仕組み系
    • certbotというツールが標準
    • ACMEというプロトコルで実施する
    • 取得できる証明書はドメインとサイトが「正しい」こと。
    • 「正しい」のは1(certbotが稼働するなかで)認証局からWebサーバにアクセスして、想定されるコンテンツがあることを確認する。
    • Webサーバは、以下のどちらの方法も可能。
      • certbotが起動してくれる方法(デフォルト?)
      • 既存で起動しているWebサーバにコンテンツを置く(オプションで-wしてdocumentrootパスを指定)する方法。
とりあえず、無料証明書うれしいっす!!

2017年4月30日日曜日

ubuntuでnokogiriをgemでインストール

「Ubuntu 16.04.2 LTS」にはlibzがシステムインストール(※1)されている。 なのに、gemでnokogiriをinstallしようとしたら、libzがないといわれてしまう。
システムのlibzを使いたいとおもい色々ググった結果(※2)、以下でOKみたい。 「--」で「extconf.rb」にオプションを渡せるようだ。

% gem update nokogiri -- --use-system-libraries

しかし、これだけではpkg-configで「libxml-2」、「libxslt」、「libexslt」が見つからないといったエラーが出てしまっているので、libxml2-dev、libxslt1-devをパッケージでインストール。pkg-config用の「.pc」ファイルが作成された(※3)。これでinstalを進めたらうまくインストールできた。

bundle対応

bundleでインストールする際にオプションをつけたい場合には、bundle configコマンド(※4)で対応。
% bundle config build.nokogiri --use-system-libraries
このコマンドを実行すると「~/.bundle/config」に設定が書き込まれるようだ。
(※1) /lib/x86_64-linux-gnu/libz.so.1
(※2) http://www.nokogiri.org/tutorials/installing_nokogiri.html
(※3) /usr/lib/x86_64-linux-gnu/pkgconfig/{libxml-2.0,libxslt,libexslt}.pc
(※4) http://ruby.studio-kingdom.com/bundler/bundle_config/#build_options

2016年4月16日土曜日

fml

メーリングリストマネージャーは、とりあえずfmlで実施。
。。fmlはあまり活発で無いし、他のメーリングリストマネージャはめぼしい物が無い。流行ってないのかな。

ユーザ/グループ fml/fmlで実施。

java parser

jay: javaのソースを出力するパーサ。jruby等で使われていると思われる。
ANTLR: これもjava用のパーサ

(参考)
http://www.infoq.com/jp/news/2007/09/xruby-another-ruby-on-jvm

jailに向けてnullfs/unionfs

unionfs/nullfsの両方とも既存のファイルシステムを対象のディレクトリにマウントする。

unionfsは透過的にマウントするので、マウント先にファイルがあったら、それも見える。
nullfsは透過的では無いのでマウント先にファイルがあっても見えなくなる。

でjailにむけてやりたいこととして、ホストの/usrをjailの/usrで見えるようにしたい。だけど、jailの中で/usrのファイルを変更してもホスト側の/usrに影響が出ないようにする。

出てくるディレクトリは以下
・ /usr :ホストの/usr
・ /jail/root/jail1/ :jail1のrootディレクトリ。このディレクトリをrootとしてjailを起動する。
・ /jail/base/jail1/ :jail1の中で作成されたファイルが置かれる場所

mount -t nullfs -r /usr /jail/root/jail1/usr
mount -t unionfs /jail/base/jail1/usr /jail/root/jail1/usr

1行目で、/usrはリードオンリーで/jail/root/jail1/usrにマウントされるので、/usrが変更されることは無い。
2行目で、jailの中で/usrディレクトリに変更が入ると、変更内容は/jail/base/jail1/usrの反映される。

(ちょっとすごい)
・ unionfsでマウントした先(ここではjail/root/jail1/)でファイルを消したら、マウントの元ファイルも消える。ここまでは想像とおりですが、いったんunmountして、mountしなおしをしたら、/jail/root/jail1のファイルが見えるかと思ったら、消えたままだった。
→ umountして、/jail/base/jail1でファイルの作成・削除をした後、再度mountしたらファイルが復活していました。(その前に一度root/jail1にmountしたかも)

.....
てなことをしていたら、/jail配下でrm -rf * とかしてしまい、マウントしていたファイルもすべて消してしまった。。。。
・再インストール。
・freebsd-update fetch
・freebsd-update install
・pkg install virtualbox-ose-additions
・Xorg -configure
  →できたxorg.conf.newのmouseの記載を変更。
・以下のpkgをインストール
 - 基本ツール → zsh,sudo,
 - xの起動で必要 → fvwm2,xterm
 - xでkeyboardが使えない → x86-input-keyboard
  - xでmouseが使えない
  → 特になしもしなくもmouseは動く(moused?)のだが、クリックができない。
    理由はわからないが、handbookにしたがって、xorg.confの設定や、haldの設定をして、
    vboxmouseを利用するように記載しても変わらず。
    https://www.freebsd.org/doc/en/books/handbook/virtualization-guest.html
    結局 xf86-input-mouse をインストールして使っている。たぶんvboxmouseではなく、通常のとおりの利用と思われる。
  - xクライアントが飛ばせない。単なる認証系の問題。 → xauthをインストール

パッケージアップデート系メモ

ubuntu(apt系)

  • 通常運用
    • apt-get update パッケージ情報の更新
    • apt-get upgrade パッケージのアップデート(新しいバージョンのインストール)
    • apt-get dist-upgrade kernelの更新
  • ubuntuのアップグレード
    • do-release-upgrade


CentOS(yum系)

  • 通常運用
    • yum check-update 更新すべきファイルのチェック
    • yum update パッケージのアップデート(新しいバージョンのインストール)
    • yum upgrade

sysbench fileio

お名前VPSとさくらインターネットVPSとローカルにインストールしたVPSについて、それぞれをsysbenchによりIOのテストを実施 実施したコマンドは以下の3つ。prepareしてテスト用ファイルを作成、runでテスト実施、cleanupで作成したテスト用ファイルを削除。
 
% sysbench --test=fileio --file-total-size=1G prepare
% sysbench --test=fileio --file-total-size=1G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
% sysbench --test=fileio --file-total-size=1G cleanup
結果:</ br>

onamae

Operations performed:  431040 Read, 287360 Write, 919496 Other = 1637896 Total
Read 6.5771Gb  Written 4.3848Gb  Total transferred 10.962Gb  (37.417Mb/sec)
 2394.66 Requests/sec executed

Test execution summary:
    total time:                          300.0003s
    total number of events:              718400
    total time taken by event execution: 11.2638
    per-request statistics:
         min:                                  0.00ms
         avg:                                  0.02ms
         max:                                  1.54ms
         approx.  95 percentile:               0.03ms

Threads fairness:
    events (avg/stddev):           718400.0000/0.00
    execution time (avg/stddev):   11.2638/0.00

sakura

Operations performed:  339780 Read, 226520 Write, 724750 Other = 1291050 Total
Read 5.1846Gb  Written 3.4564Gb  Total transferred 8.6411Gb  (29.495Mb/sec)
 1887.66 Requests/sec executed

Test execution summary:
    total time:                          300.0003s
    total number of events:              566300
    total time taken by event execution: 7.1058
    per-request statistics:
         min:                                  0.00ms
         avg:                                  0.01ms
         max:                                  2.96ms
         approx.  95 percentile:               0.02ms

Threads fairness:
    events (avg/stddev):           566300.0000/0.00
    execution time (avg/stddev):   7.1058/0.00

local vps

Operations performed:  2580 Read, 1720 Write, 5430 Other = 9730 Total
Read 40.312Mb  Written 26.875Mb  Total transferred 67.188Mb  (229.32Kb/sec)
   14.33 Requests/sec executed

Test execution summary:
    total time:                          300.0145s
    total number of events:              4300
    total time taken by event execution: 0.1086
    per-request statistics:
         min:                                  0.02ms
         avg:                                  0.03ms
         max:                                  3.96ms
         approx.  95 percentile:               0.02ms

Threads fairness:
    events (avg/stddev):           4300.0000/0.00
    execution time (avg/stddev):   0.1086/0.00

ruby on rails をユーザ権限で動かしたい

ruby on rails をユーザ権限で動かしたい

ruby や gemそのものはシステムパッケージでインストール
ユーザ権限でrailsをインストール
「.gemrc」に以下を記載。
----------------------------
install --user-install
----------------------------
これで~/.gem配下にインストールされる。 railsコマンドなどは~/.gem/ruby/[ver]/bin 配下にインストールされる。
railsアプリの準備
bundleでのインストールをrailsで作成したディレクトリに行う。 これで、インストール先のgemを利用してくれる。 bundle install --path=vendor/bundle --binstubs
--binstubsはbinディレクトリを作成して、コマンドを配置してくれる。

2015年5月3日日曜日

VirtualBOXにFreeBSD10.0をインストール

Xまわり
VirtualBOXのウィンドウサイズの変更に追随して、FreeBSDonVirtualBOXのXのrootウィンドウサイズも自動的に変更されるようにしたい。でも、まだできていない。。。。
下記のページを参考にすすめました。
http://qiita.com/in_silico_/items/2ab6c37c14e777e6f48f
https://wiki.freebsd.org/VirtualBox

  • ベースとして、「pkg install virtualbox-ose-additions」で大まかにX周りのパッケージがインストールされるので、お任せ
  • 別途追加したのは以下
    • mousedの起動
    • pkg install xinit
    • pkg install xf86-input-keyboard
    • pkg install xf86-input-mouse
    • pkg install dbus
    • pkg install hal

(参考:試行錯誤メモ)
  • xorg.confのInputDeviceセクションが有効になるように、ServerLayout もしくは、 ServerFlags セクションに「Option "AutoAddDevices" "false"」を追加。(引用 https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/x-config.html)。でもこれをするとXを起動したときにマウスが使えなくなってしまう。
  • HandBookのコメントにあわせて、「/usr/local/etc/hal/fdi/policy/90-vboxguest.fdi」を作成してみたが、関係なさそう。
  • Xの起動ログを見ると/dev/dri/display0が無いとエラーになっているので、/dev/driの作り方をかなり検索しまわった。結果としてvirtualbox-ose-additionsについてくるvboxvideo.koというカーネルモジュールを組み込めばOK。ただし、標準のvirtualbox-ose-additionsではvboxvideo.koが作られない。virtualbox-ose-additionsの構築オプションでOPENGLを有効にしてportsをmakeすればいける。エラーは出なくなるが、特に何かがよくなるわけでは無かった。。。。

2013年12月7日土曜日

ubuntu13へのアップデートがうまくいかず。。。

ubuntu13へのアップデートの途中でストールした。そのせいかOSが起動せず。kernelがうまくインストールされていなかったと思われる。 シングルユーザモード(?)で起動するので、困っていた。
結局以下で復活
% mount -o rw,remount /
% dpkg --configure -a % apt-get -f install

 このあたりが参考になる。 https://forums.ubuntulinux.jp/viewtopic.php?id=8874

2011年9月19日月曜日

rails3.1 on FreeBSD

rails3.1をインストールしてみるが、「Could not find a JavaScript runtime.」と出てしまう。 解決さくとして、Gemfileに「gem 'execjs'; gem 'therubyracer'」を入れて、bundle installすれば良いとあるが、 FreeBSDの場合 TheRubyRacerのインストールに失敗する。
原因は3つ
  • libv8のインストールに失敗している
    gem install therubyracerでlibv8が一緒にインストールされる。libv8は特にエラー無くインストールが終了するので、正常かと思ってしまうのだが、どうもインストールに失敗しているようす。以下のエラーが出る。
    c++ -shared -o v8.so v8_v8.o v8_callbacks.o v8_weakref.o v8_date.o v8_context.o v8_handle.o v8_external.o rr.o v8_function.o v8_exception.o v8_try_catch.o v8_string.o v8.o v8_value.o v8_message.o v8_array.o v8_debug.o v8_locker.o v8_template.o v8_script.o v8_object.o -L/usr/home/seike/rails/r3.1.test/vendor/bundle/gems/libv8-3.3.10.2/lib/libv8/build/v8 -Wl,-R/usr/home/seike/rails/r3.1.test/vendor/bundle/gems/libv8-3.3.10.2/lib/libv8/build/v8 -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L.  -rpath=/usr/lib:/usr/local/lib -pthread -rdynamic -Wl,-soname,v8.so   -Wl,-R -Wl,/usr/local/lib -L/usr/local/lib -lruby18 -lpthread  -lcrypt -lm -L/usr/lib  -rpath=/usr/lib:/usr/local/lib -pthread  -lv8
    /usr/bin/ld: cannot find -lv8
    *** Error code 1
    
    makeとgmakeの使い分けが出来ていないので、発生していると思われる。 libv8のディレクトリに移動して、gmakeと打ちましょう。
    % cd  vendor/bundle/gems/libv8-3.3.10.2/lib/libv8
    % gmake
    
    libv8のコンパイルが始まります。
  • execinfo.hが無いというエラーがでて、FreeBSDでは「libexecinfo」をインストールしろというtipsもある。
    しかしながら、単純にインストールしても結局エラーになる。なので、bundle installを実行するときに「--with-opt-dir=/usr/local」が付与されるように、 以下の設定をしましょう。
    % vi ~/.bundle/config
    BUNDLE_BUILD__THERUBYRACER: --with-opt-include=/usr/local/include
    
  • 実は上の「--with-opt-dir」をしても、作成されるv8.soが不十分。それはlibexecinfoがリンクされていないから。 そのためrake等を実行した場合エラーになる。libexecinfoをリンクされるように、無理矢理Makefileを修正して、v8.soを再作成する。
    % cd vendor/bundle/ruby/1.8/gems/therubyracer-0.9.4/ext/v8 
    % vi Makefile
        LIBSの最後に「-lexeinfo」を追加。
        LIBS = $(LIBRUBYARG_SHARED) -lpthread  -lcrypt -lm -L/usr/lib  -rpath=/usr/lib:/usr/local/lib -pthread  -lv8 -lexecinfo
    %  rm v8.so
    % make <- v8.soが再作成される。
    % cp v8.so ../../lib/
    
とっても疲れましたー。libv8はエラーも何も出ないんだから、原因わからんつーの。 そもそもextconf.rbの書き方が十分じゃないんだと思うんだよね。どう直せば良いのか分らないんだけど。
bundlerにて、gemインストール時に設定するオプションの付けかた。

mysqlのビルド時に--with-mysql-configを自動的に設定するやりかたです。
% bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config


マニュアル(http://gembundler.com/rationale.html)に書いてありました。