2014年11月6日木曜日

glibc のビルドでハマったポイント&手順

諸事情でglibc をビルドした時にハマったことのメモ.
記事中のコマンドはコピペで書いたのではなく,記憶を頼りに手打ちしているので,コピペして動かしたりすると危険.参考程度に見てください.


ハマったポイント

- gawk ないとmake でこける
- make install の前に/target_dir/ld.so.conf を作らないとこける

ビルド準備

- glibc をダウンロード(Git でクローンしたりアーカイブをダウンロード&解凍したり)
- gawk をインストールする.
これがないとmake でこける(こけてハマったのでこの記事書いてる).
# apt-get install gawk

あとはいろんなところで解説があるのと同じようにビルド作業

ビルド手順

- 以下では~/glibc_ver にダウンロードしてきたglibc があることにする
- 諸事情(ユーザーアカウントを作るのが面倒というとても深刻な事情)のため,すべてroot で作業しているが,ユーザーアカウントがある場合はユーザーアカウントでやったほうが安全.--prefix=${HOME}/install_target_dir とかにすればsudo なしでインストールまでできるはず(参考URLを見るとそう書いてあるからきっとそう)
- インストール先は/root/my_glibc

# cd ~/glibc_ver
# mkdir build
# cd build
# ../configure --prefix=/root/my_glibc
# make
# touch /root/my_glibc/etc/ld.so.conf
# make install

参考URL

Linux From Scratch:gcc、glibcインストール « 仙人の心得
http://blog.mktime.com/archive/340.html

chroot 環境に glibc を突っ込むメモ — togakushi.bitbucket.org 0.1 documentation
http://togakushi.bitbucket.org/build/html/glic2.5_install.html

2014年9月13日土曜日

Ubuntu でKVM のブリッジ接続の設定をする


/etc/network/interfaces の設定.

編集前にはバックアップをとっておくべき.




/etc/network/interfaces の設定例(固定IP)




# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto p6p1
iface p6p1 inet manual

auto br0
iface br0 inet static
  address xx.xx.xx.xx
  netmask 255.255.255.0
  network xx.xx.xx.0 #最後は大抵0
  gateway xx.xx.xx.1 #最後は大抵1?
  broadcast xx.xx.xx.255 #最後は大抵255 
  bridge_ports p6p1
  bridge_fd 9
  bridge_hello 2
  bridge_maxage 12
  bridge_stp off
  dns-nameservers xx.xx.xx.xx #わからなかったらとりあえずgateway と同じで



libvirt が勝手に作るNAT 用のブリッジインターフェイスを削除.(大抵はvirbr0 という名前かな)




$ sudo virsh net-autostart default --disable
$ sudo virsh net-destroy default


brctl show で確認するとvirbr0 が消えてる.




network-manager がいると設定を上書きされるらしい(未検証)なので,とりあえず network-manager を消しとく.




$ sudo apt-get remove network-manager



ネットワークを再起動




$ sudo service networking restart


これで br0 にIP がふられてたらOK.

以上.





--
My Emacs Files At GitHub

2014年5月19日月曜日

Mac OS X+ Virtual Box + CapstanでOSvを動かす


OSvもくもく会#1 〜OSvで遊んでみよう〜 - connpass に行って,OSv を動かしてきたので,それのまとめ.




この記事では,OSv のイメージのダウンロード,実行を勝手にやってくれるCapstan というアプリケーションを使って,OSv を動かす方法を書く.

以下では,OSv のデフォルトイメージをVirtualboxで動作させ,ホストマシンからSSH で接続する.



動作環境





  • マシン: Mac Book Air 2011


  • OS: Mac OS X 10.9.2


  • Virtual Box: version 4.2.18









前提




Virtual Box は既にインストールされているものとします.






Go のインストール




Capstan はGo で書かれている.

このため,Capstan を実行するために,まずGo をインストールする.




以下のURL から,Mac 用のパッケージである go1.2.2.darwin-amd64-osx10.8.pkg ダウンロードして,インストールする.

https://code.google.com/p/go/wiki/Downloads?tm=2




Go はパッケージをインストールしただけでは動作せず,以下のように環境変数を設定しないといけない.




$ export GOROOT=/usr/local/go 
$ export PATH=$PATH:$GOROOT/bin


GOROOT はGo がインストールされた先を設定する.

上記のパッケージからインストールした場合だと /usr/local/go になる.

また,2行目では,Go の実行ファイルにパスを通している.






Capstan のインストール




Capstan のインストールには,go のパッケージマネージャ的なものを使う.

使う前に,パッケージマネージャがインストールする先を GOPATH という環境変数で設定する必要がある.

今回は, $HOME/go にインストールするようにした.




その後, go get で,Capstan のGit リポジトリを指定し,インストールする.




$ mkdir $HOME/go
$ export GOPATH=$HOME/go
$ go get github.com/cloudius-systems/capstan








Capstan によるOSv の実行




Capstan の実行ファイルは $HOME/go/bin 以下にある.

下記のようにCapstan を実行すれば,OSv のデフォルトイメージをダウンロードして,起動する.




cd $HOME/go/bin
./capstan run cloudius/osv


初回は,イメージをダウンロードするため,時間がかかる.

2度目移行は,既にダウンロードされたイメージを実行するので,あまり時間はかからない.




上記コマンドによってOSv が動作すれば,ターミナルに [/] % と表示される.

これは,OSv のデフォルトイメージに入っているシェルである.

ls とか ifconfig が使える.

使えるコマンド一覧は help コマンドで表示できる.




上記の起動コマンドでは指定していないが, -p オプションを付けることで,VMMを指定することができる.

Virtual Box であれば, -p vbox といった感じ.

Virtual Box しか入ってない環境ならば,上記のように,何も指定しなくても勝手にVirtual Box 用のイメージをダウンロードして実行する.




ちなみに,Virtual Box のGUI管理ツールを起動してみると, cloudius/osv というインスタンスが実行中になっていることが確認できる.






ホストマシンからSSHを繋ぐ




OSv のデフォルトイメージでは,sshd が動作しているため,ホストマシンからSSHで入ることができる.

Virtual Box 上のOSv にSSHでログインするには,起動時のコマンドでにポートフォワーディングの指定をする必要がある.

OSv は一度止めて(shell で exit コマンドを叩くと止まる) 以下のコマンドで再度OSv を起動する.




./capstan run -f 2222:22 cloudius/osv


その後,別のターミナルで以下のようにすれば,OSv にSSHで入れる.

ユーザ名は admin, パスワードも admin である.




$ ssh admin@localhost -p 2222


僕の環境では,SSHログインの際にパスワードを聞かれるまでに5分か10分くらいかかった.

(原因はよくわかっていない.)

なかなかパスワードを聞かれなくても気長に待つように.






余談





  • ssh で入ってifconfig と叩くと,出力がssh 側ではなく,シリアル側に出てしまう.

    ls はちゃんとssh 側に出力される.





  • 自分のマシンでOSv をビルドしたい場合は,Mac OS X では無理なのでLinux を使いましょうとのこと.









--
My Emacs Files At GitHub

2014年4月10日木曜日

git diff で色をつける


git diff で色をつける設定は以下のコマンドで



$ git config --global color.ui true




diff を表示するために使う pager プログラムが lv になっていると文字化けしてうまくdiffが表示されないらしい.
(僕の環境では,何も設定してなかったが,どうもlvが使われているようだった.)
そこで,pager を設定する.
ここでは "lv -c" とオプション付きでlv を実行するようにしているが,"less" にしても大丈夫.



$ git config --global core.pager "less"





Table of Contents







--
My Emacs Files At GitHub

2014年3月30日日曜日

Raspberry Pi で Radikorec を使ってみる.


家で目的もなく動いてるRaspberry Pi さんにラジオを録音してもらいたくなった.
そこで, Raspberry Pi に radikorec をインストールしてみた.
Raspberry Pi に限らず,たいていのUnix 系OSならほぼ同じ手順でインストールできそうだった.




環境




<マシン>
Raspberry Pi

<OS>
Raspbian 7.1

<カーネル>
Linux raspberrypi 3.6.11+ #538 PREEMPT Fri Aug 30 20:42:08 BST 2013 armv6l GNU/Linux







radikorec のソースコードをダウンロード




radikorec のリポジトリは akiradeveloper/radikorec · GitHub にある.
ここから,クローンする.




git clone https://github.com/akiradeveloper/radikorec.git








setuptools distribute をインストール

(2015/08/22 更新: setuptools を使うように内容を変更)

radikorec のインストールのために、python のパッケージ管理ツールであるsetuptools を使うため、これをインストールする.

(この記事ではもともとdistribute を使うように書いていたが、distribute は2013年にsetuptools に取り込まれているらしいので、setuptools を使うほうがよいらしい
また、元々この記事で紹介していた distribute インストール用のスクリプトへのリンクが切れてしまっている.
このため、setuptools を使うように内容を変更した.)


distributete というpython のライブラリ? をインストール.
因みに,何のためのライブラリかはよくわかってない.

昔は distributete でなはく setuptools というライブラリが主流だったらしい.
現在は, setuptools の開発は止まっており,それを引き継いで開発されているのが distribute ということらしい.
というわけで,今回は distribute をインストールする.
(このことに関連して,あとでradikorecのインストールスクリプトを修正する必要がある.)

参考URL: Pythonパッケージ管理ツールまとめ | サイト運営の私的メモ




$ curl -O http://python-distribute.org/distribute_setup.py
$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
$ sudo python distribute_setup.py








その他必要なものをインストール




以下のコマンド(Debian 系)



sudo apt-get update
sudo apt-get install libssl-dev 
sudo apt-get install ffmpeg







インストールスクリプトの編集

(2015/08/22 更新: setuptools を使うように内容を変更)



compilesetup.py ファイルを編集.
compile の方は rtmpdump のソースコードをgitリポジトリからクローンしてくるのだが,このリポジトリの指定先が参照できないので,変更.
setup.pysetuptools ではなく distributete をインストールしたための変更.


編集内容は以下の通り.



$ git --no-pager diff
diff --git a/compile b/compile
index ef82607..8cf921e 100755
--- a/compile
+++ b/compile
@@ -6,7 +6,8 @@ pwd
 make
 cd -

-git clone https://github.com/svnpenn/rtmpdump.git
+git clone git://git.ffmpeg.org/rtmpdump
+# git clone https://github.com/svnpenn/rtmpdump.git
 cd rtmpdump
 pwd
 make SYS=posix      
diff --git a/setup.py b/setup.py
index ecba8a4..5b2df88 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,5 @@
-#from distutils.core import setup
-from setuptools import setup
+from distutils.core import setup
+#from setuptools import setup

 setup(
     name = 'radikorec',








インストールスクリプトの実行




以下のコマンドを実行する.



sudo make install
./compile 
sudo ./setup 








試験的に動かしてみる.




以下のコマンドでradikorecを試してみることができる.



./runtest


これを実行すると. /tmp/ 以下にログや録音した音声ファイルができるはず.
ffmpeg のインストールを忘れてると,録音したのにエンコードできなくて音声ファイルが出力されない.
僕は,毎度この段階で ffmpeg がないことに気づくので,実際に ./runtest で音声ファイルを出力したことはなかったりする.








放送局コードについて




radikorec を使うときに,録音したい放送局を放送局コードで指定する.
これを知るためには,http://radiko.jp/v2/api/program/today?area_id=JP14 へアクセスして返ってきたxml を見ればいいっぽい.
<station io=hoge>hoge の部分が放送局コード
その放送局が何かはすぐしたの <name> に書いている.

参考URL: FreeBSD で radiko を録音する。






おまけ: mp3に変換して,コマンドラインから再生する.




raspberry pi イヤホン端子もあるので,再生して聞くこともできる.
m4a 形式を直接コマンドラインから再生する方法がよくわからなかったのでmp3に変換してから再生してみた.
以下のようにやればできた.

m4a → mp3 は以下のようにやればできる.



ffmpeg -i NHR-2014-03-30-04-20.m4a  hoge.mp3




再生は, mpg321 をインストールして使えばOKっぽい.
デバイスファイルへのアクセス権限の関係で,何も設定しないとユーザ権限では動作しない.
今回は面倒だったのでsudo を付けないと動かした.
sudo を付けたくない人は,ブログログ mpg321を一般ユーザーで再生できるようにする。 などを見て,デバイスファイルにアクセスできるように権限を設定しよう.
mpg321 のインストールおよび再生コマンドは以下の通り.



sudo apt-get install mpg321 
sudo mpg321 hoge.mp3 



ここに書いた方法で,Raspberry Pi から直接再生することができる.
しかし,上記のエンコード処理はRaspberry Pi でやると非常に遅い.
また,録音した音声ファイルのサイズは大きくなりがちなので,SDカードの容量も心配である.
なので,音声ファイルは聞くときに別のマシンに移してしまって,そのマシンでエンコードなり再生なりしたほうがいいと思ったのがやってみた感想である.

参考URL: ブログログ mpg321を一般ユーザーで再生できるようにする。






コマンドリスト







git clone https://github.com/akiradeveloper/radikorec.git
cd radikorec/
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py 
vi ./compile 
vi ./setup.py 
sudo make install
./compile  #失敗
sudo apt-get update
sudo apt-get install libssl-dev 
./compile 
sudo ./setup 
sudo apt-get install ffmpeg
./runtest 
vi my_script.sh
chmod +x my_script.sh 
mkdir ../radiko_data
./my_script.sh 
ffmpeg -i NHR-2014-03-30-04-20.m4a  hoge.mp3
sudo apt-get install mpg321 
sudo mpg321 hoge.mp3 








my_script.sh の中身







#!/bin/sh
radikorec \
 --channel=LFR \
 --duration=1 \
 --prefix=NHR \
 --directory=/home/deep/radiko_data





--
My Emacs Files At GitHub

2014年3月11日火曜日

Mac Port のselfupdate ができなかった時のメモ


長らく放置していたMac port.
Mac OS X も Mervericks にアップデートしたし,いい加減アップデートしないとなぁ,とselfupdate しようとすると…



$ sudo port selfupdate
---> Updating MacPorts base sources using rsync
MacPorts base version 2.1.2 installed,
MacPorts base version 2.2.1 downloaded.
---> Updating the ports tree
---> MacPorts base is outdated, installing new version 2.2.1
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl

Error: /opt/local/bin/port: port selfupdate failed: Error installing new MacPorts base: command execution failed


などと,エラーがでてしまった.

これの解決は,以下のページを参考(というかそのまま)にしたらできた.
macportをアップデートしようとしたらエラーになった。 - @thorikiriのてょりっき

要は,xcode のコマンドラインツールが入ってなかったらしい.
Mac OS X をMervericks にアップデートするとインストールし直さないといけないんだったっけ?
以下の通りコマンドを叩くと,ポップアップが出てきて,コマンドラインツールをインストールするか否かを聞いてくる.
OKを押せばインストールしてくれる.



$ sudo xcode-select --install


で,再度selfupdate を実行してみると…



$ sudo port selfupdate
Password:
---> Updating MacPorts base sources using rsync
MacPorts base version 2.1.2 installed,
MacPorts base version 2.2.1 downloaded.
---> Updating the ports tree
---> MacPorts base is outdated, installing new version 2.2.1
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl


The ports tree has been updated. To upgrade your installed ports, you should run
port upgrade outdated
$ port version
Version: 2.2.1



とちゃんとMac port が2.2.1へアップデートされたっぽい.

余談だが,バージョンを確認するときは port --version ではないので注意.
port --version と叩くと,以下の様に怒られる.




$ port --version
Error: global does not accept --version
Usage: port
[-bcdfknopqRstuvy] [-D portdir] [-F cmdfile] action [privopts] [actionflags]
[[portname|pseudo-portname|port-url] [@version] [+-variant]... [option=value]...]...

"port help" or "man 1 port" for more information.





--
My Emacs Files At GitHub