kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

Markdownに変更

はてな記法を使っていましたが、Markdownで書いてみることにしました。

見出しをどこからはじめるかで、ちょっと悩んだのですが、はてな記法だと記事内はh3から始まるようなのであわせることに。ブログタイトルがh1、記事タイトルがh2と考えれば、妥当なのかなぁと思っています。

他のブログツールを触る機会があって、記法をどうしようか?と思ったのが発端です。

新しい記法を覚えるのを面倒に思っていたのですが、調べてみるとかなりシンプルで、比較的汎用性が高く(Markdownに対応するプラグインが結構見つかる)、テキストそのものも読みやすく整うのがツボにきました(若干、拡張構文の取り扱いが悩ましいですが)。

expressコマンドが見つからない

Node.jsのexpressを使おうと思ったら、expressパッケージからコマンドがなくなっていた。環境は以下。

  • Node v0.10.26
  • express 4.0.0

expressの公式を確認したところ、どうもコマンドはパッケージが変わったらしい。

以下で手に入る。

$ npm install -g express-generator

Ⅰ、2年前の記事でダメか〜と思ってたけど、結構最近だった

About

Google Analyticsの利用について

本ブログはGoogle Analyticsを利用してアクセスログの収集及び解析を行っています。収集にはcookieを使用します。データは匿名で収集され、個人を特定できるデータは含みません。収集したデータは本ブログの利用状況の把握のために使用します。

収集したデータは、Google及びその100%子会社が、Googleのプライバシー・ポリシーにしたがって、保持し解析します。詳細に関しては下記を参照してください。

apt-cygの調整 その2

Cygwinのバージョンは以下。

  • 1.7.25 (32-bit)

Cygwinでgitをビルドしようとしたけど、なんかうまくいかんなぁ...と思ったら、m4のインストールで失敗してました。

$ apt-cyg install m4
...
... `m4-1.4.17-1.tar.xz' へ保存完了 [273968/273968]

Unpacking...

bunzip2: (stdin) is not a bzip2 file.
tar: これは tar アーカイブではないようです
tar: 前のエラーにより失敗ステータスで終了します
...
Package m4 installed

当初、原因が分からずsetup.exeからのインストールで解決したんですが、よくみると、xzファイルの取り扱いで失敗しています。

最後に「installed」とでたり、再度インストールしようとすると「already installed」になっていたりと、紛らわしいですが、インストールはされていません。

これも、apt-cygの対応不足みたいで、以下のページにいろいろとまとまっています。

それと、公式もgithubに移ったようですが対応はされて無いみたいです...

派生品が(いろいろと)出ているようなので、適宜拾ってくればよさそうです。

といいつつ、手直ししてみる

上記のWikiを見る限り、完全な状態にするのは手に余るのですが、解凍部分の修正だけでもできないかなぁと試したのが以下。

360行目(GitHub版とGoogle Code版は該当行数が異なる)からファイルの解凍が始まっているので、xzファイルの対応を追加します。

細かく理解せずに書いているので使用はお勧めしませんが、まあ、動いているようです。

echo "Unpacking..."
case "$file" in
  *\.xz)
    cat $file | xz -dv | tar > "/etc/setup/$pkg.lst" xvf - -C /
    ;;
  *)
    cat $file | bunzip2 | tar > "/etc/setup/$pkg.lst" xvf - -C /
    ;;
esac

書いといてなんですが、以後のメンテの問題もあるので、GitHubからメンテされてそうなForkを選んだほうがよいです。

apt-cygの調整

Cygwinのバージョンは以下。

久々にapt-cyg触ったらエラーになってました。

$ apt-cyg update
...
...  http://ftp.yz.yamagata-u.ac.jp/pub/cygwin/setup.bz2
...
HTTP による接続要求を送信しました、応答を待っています... 404 Not Found
...
Error updating setup.ini, reverting

で、実際ミラーサイトに行ってみると、.../cygwin/x86と.../cygwin/x86_64という構成になっており、URLが変わったご様子。なので、URLを調整して再度トライ。

$ apt-cyg -m http://ftp.yz.yamagata-u.ac.jp/pub/cygwin/x86 update
...
Updated setup.ini

で、updateは成功するんだけど、今度はinstallがうまくいかない。

$ apt-cyg install git
...
...  http://ftp.yz.yamagata-u.ac.jp/pub/cygwin/x86/x86/release/git/git-1.7.9-1.tar.bz2
...
md5sum: git-1.7.9-1.tar.bz2: No such file or directory
...

URLを見ると、.../x86/x86となっており、あっちをたれてば..という状態に。cygwinの構成が変更されて、それにapt-cygが対応できてない感じ。

apt-cygは特に更新されて無いので、自前で。98行目にsetup.bz2、105行目にsetup.iniをwgetする部分があるので、使用しているcygwinにあわせて、適宜書き換え。

$ vi /bin/apt-cyg
...
wget -N $mirror/x86/setup.bz2 # 98行目
...
wget -N $mirror/x86/setup.ini # 105行目
...

x86などはスクリプト内で追加するようにしたので、ミラーのURLを調整して、再度トライ。

$ apt-cyg -m http://ftp.yz.yamagata-u.ac.jp/pub/cygwin update
...
Updated setup.ini

アップデートに成功して、

$ apt-cyg install git
...
Package git installed

インストールにも成功します*1

*1:2013-11-16追記:xzファイルへの対応も必要なようです(apt-cygの調整 その2)

BoostをRaspberry Pi向けにクロスビルドする

BoostをRaspberry Pi向けにクロスビルドします。

  • Boost 1.54.0
  • Raspbian (Hard Float)

ロスコンパイラの準備

ロスコンパイルの環境を整えます。

参考

ARM用なら引数次第で何とでもなるやろ~と軽い気持ちでapt-getでGCCを入れたところ、どうあがいてもARM v6(Raspberry PiのCPU)向けビルドができず、さらに、よくわからずに入れたらSoft Float版で使えず(中途半端に動いたけど)といろいろあったので、おとなしく推奨されているツールを入れます。

$ cd ~/local/opt
$ git clone git://github.com/raspberrypi/tools.git

Soft Float版、Hard Float版のほかに、LinaroのHard Float版も入ってる感じです。

$ ls tools/arm-bcm2708/
arm-bcm2708hardfp-linux-gnueabi
arm-bcm2708-linux-gnueabi
gcc-linaro-arm-linux-gnueabihf-raspbian

使うツールセットのbinに対して、パスを通しておきます。

$ export PATH=$PATH:/home/ayataka/local/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/

クロスビルド

ソースコードをDL & 解凍して、booststrapを実行。

$ cd boost_1_54_0/
$ ./bootstrap.sh

このままだと単にビルドするだけなので、user-config.jamを書き換えます。適当に開いてコンパイラの設定を追記します。g++の名前は使うもので異なるので、PATHを通したものを記述します。

$ vi ./tools/build/v2/user-config.jam
using gcc : arm : arm-linux-gnueabihf-g++ ;

あとはb2を用いてビルドします。インストールパスはお好みで。

$ ./b2 install -j2 --prefix=$HOME/raspi/local

おまけ

readelfでバイナリを確認できます。覚えておくと何かと便利です。

$ readelf -A libboost_atomic.so.1.54.0

Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "6"
  Tag_CPU_arch: v6
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_FP_arch: VFPv2
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP
  Tag_ABI_VFP_args: VFP registers
  Tag_ABI_optimization_goals: Aggressive Speed
  Tag_CPU_unaligned_access: v6
  Tag_DIV_use: Not allowed

Qt CreatorからRemote Device上で実行するときにrootで動かす

作成中のプログラムを、Qt CreatorからRaspberry Pi上のrootユーザーで実行する方法がすぐに思いつかなかったのですが、何のことはなく、Deviceの設定でログインするユーザーをrootにすればできることでした。

rootパスワードの設定

とりあえずRaspberry Piでrootのパスワードを設定します。

$ sudo passwd root
Enter new UNIX password: 
Retype new UNIX password: 

rootアカウント用Deviceの作成

常にrootというのもアレなので、root用にDeviceを作成。

f:id:kkAyataka:20130907182748p:plain

使い分けるのに、root用のKitも用意しておきます。

f:id:kkAyataka:20130907183106p:plain

このKitを使うことで、プログラムの転送と実行がrootで行われます。