raspberry piのarchlinuxarmでpkgfileが出来ない
症状
# sudo pkgfile --update :: Updating 5 repos... warning: download failed: http://mirror.archlinuxarm.org/armv6l/core/core.files [HTTP 404] error: failed to update repo: core warning: download failed: http://mirror.archlinuxarm.org/armv6l/extra/extra.files [HTTP 404] error: failed to update repo: extra warning: download failed: http://mirror.archlinuxarm.org/armv6l/community/community.files [HTTP 404] error: failed to update repo: community
取得しにいってるURLの中にあるアーキテクチャが
armv6l
になっているが
armv6hでなければならない
/etc/pacman.confのArchitectureにもarmv6hとなっている
解決方法
https://github.com/archlinuxarm/PKGBUILDs/issues/704
ここでも報告されてるけどこの通りにする
このurlは/etc/pacman.d/mirrorlistの中で定義されていて
$archの文字列が置換されているがpacmanだと
先ほど書いた/etc/pacman.confで定義されている文字列が入るが
pkgfileはuname -mで返ってくる値が入る、これがarmv6lになってる
これはもうどうしようもないのでカーネルのコンパイル時のバージョンをいじるか
pkgfileの仕様を変えてしまうか
変数を止めて定数に変えるしかないので手軽な最後のやつをする
/etc/pacman.d/mirrorlistを開いて
Server = http://mirror.archlinuxarm.org/$arch/$repo
を
Server = http://mirror.archlinuxarm.org/armv6h/$repo
にする
パソコンが死んだからraspberry piを買った
前書き
archlinuxを使い慣れてるし、過去に用意してるPKGBUILDを使いたいのでosはarchlinuxarmを選択
とりあえず次のパソコンを買うまでの間、そんなに期待しないデスクトップ用途で使うようにセットアップしていく
設定ファイルは事前に用意済みだとして書いているので完全な俺個人向けのメモ色が強いので注意
用意したもの
raspberry pi type B
32GBのSDカード sandisk extreme pro (一番速そうなの選んだ)
セルフパワーのUSBハブ elecomのU2H-EG4SBK (ACアダプタがついてて見た目がかっこいいの選んだ)
わざわざ買ったのはこの3点、後は既に家にあったもの
HDMI対応モニターとHDMIケーブル
LANケーブル
SDカードライター
MicroUSBのオスの充電器 (スマホの奴でいい)
USBキーボード
USBマウス
SDカードにOSを書き加えるためのパソコン
やったこと
ddなどをしてSDカードに書き込んだら
さっそくraspberry piを起動する
書き込んだimgファイルは2gbほどしかなく割当られてない領域があると思うのでここを参考にしながらパーティションをいじる
http://jan.alphadev.net/post/53594241659/growing-the-rpi-root-partition
それが終えたらアップデートをするためネットワークに繋ぐが
いきなり無線は面倒なので有線を使うため
LANケーブル指すと勝手に繋がって外にpingが打てたので
# pacman -Syu
でアップデート
# pacman -S base-devel
でmakepkgするのに必要なやつの導入
この間、時間がかかるのでalt+f2などを押して端末を切り替えてユーザーの追加や必要ならばswapの設定をしておくのがおすすめ
とりあえず再起動
キーボードがUSで今後に支障をきたすので
# loadkeys jp106
/etc/vconsole.confに
KEYMAP=jp106
base-develを入れたらsudoも入っていると思うがsudoの追加
# pacman -S sudo
次にwheelグループのユーザがsudo使えるようにする
# visudo
エディタが開くので以下の行を探す
#%wheel ALL=(ALL) ALL
これの先頭の#を消して以下のようにアンコメント
%wheel ALL=(ALL) ALL
普段使うユーザーの追加 (noterは使用するユーザー名に置き換えてください)
# useradd -m -G wheel noter
今作ったユーザーにパスワードつける
# passwd noter
パスワードを二回入力
今作ったユーザーでログインするため
# exit
でログアウト
そしてさっき作ったユーザーでログイン
色々するのにほしい最低限の奴をインストール
# pacman -S zsh tmux git vim
こんな設定も何もしてない環境は辛いので自分用のdotfilesの導入
とりあえず保存先作る
% mkdir -p ~/misc/dev/git
移動する
% cd ~/misc/dev/git
事前に用意してたdotfilesを落としてくる
% glt clone https://github.com/silenvx/dotfiles.git
各自のdotfiles用bootstrapの実行
% ./dotfiles/setsym.sh -i
zshの設定を入れたのでログインシェルを変える
% chsh -s /bin/zsh
exitでリログイン
作業しやすいようにtmuxを立ち上げる
% tmux -2 -u
guiの導入、デスクトップ環境にはawesomeを選択、端末はxterm
% pacman -S xorg-xinit xorg-server awesome xterm xf86-video-fbdev xorg-apps
このまま起動しても日本語フォントがないので
yaourtの導入とフォントの導入をするのだがその過程でメモリが足らないと起こられるので先にswapを作る
# dd if=/dev/zero of=/var/swap bs=1M count=1024 # mkswap /var/swap # swapon /var/swap
後は再起動しても使われるように
/etc/fstabに
/var/swap swap swap defaults 0 0
これを追記しておく
aurからttf-rictyを導入したいので楽するためにyaourtをいれる
# pacman -S yaourt
rictyをいれる
% yaourt -S ttf-ricty
ここでかなり時間かかるので可能なら他のパソコンでパッケージ作った方がいい
alsamixserを使いたいので
# pacman -S alsa-utils
imをいれるがその前に/tmpが足らなくなるのでtmpfsを使うのやめる
# systemctl mask tmp.mount
そして再起動
% reboot
imにはmozc-utを選択、ibusでは使わないのでuimのみで使うように
途中でPKGBUILDを編集したがraspberry pi上でコンパイルに1日以上かかったので注意
% yaourt -S mozc-ut
この時、PKGBUILDの編集でarchにarmv6hを足す必要あり
vimで置換するなら
:%s/^ *arch=(/arch=('armv6h' /g
が楽
ほんとにコンパイルに時間がかかったのでクロスコンパイル推奨
できない人はバイナリパッケージ置いとくので使ってください
https://github.com/silenvx/mozc-ut-armv6h
ここに置いてる*.pkg.tar.xzを落としてきて、pacman -U *.pkg.tar.xzで入れたらいいです
ただ、ライセンス的にどうなんだろ?
この時まだlocaleを設定してないと思うので、やらないとmozcが動かないので
/etc/locale.genを開いて
en_US.UTF-8 UTF-8か
ja_JP.UTF-8 UTF-8の好きな方、もしくは両方をアンコメントしておいてから
# locale-gen
後は起動時に勝手に環境変数LANGにこのどっちかが入ってるように
/etc/locale.confを開いて
LANG=en_US.UTF-8か
LANG=ja_JP.UTF-8を書いておいて再起動
後は、なんだか黒い枠が画面にあったので
http://abc001.blog.so-net.ne.jp/2012-08-19
これすればよい
最後にtimezoneを合していなかったので
# timedatectl set-timezone Asia/Tokyo
こうすれば日本時間に合わせられる
とりあえずこの記事で書くのはここまで、終わり
後書き
cpuがarmだからflashが動かないんだよなあ…
なんだか1年ぐらい前の状況に戻ってしまった気がする
1080pの動画はomxplayerっていうraspberry piのgpu向けのソフトを使えば
コマ落ちなしで見れたが、使い慣れてるmplayerを使いたい…どうすればいいんだ
linuxでマイクと静止画をニコ生で流す
前書き
サイレントバイオリンを始めたので知り合いに聞いてもらう時に
ニコ生で配信できたら便利だと思った
別にニコ生じゃなくてもrtmpプロトコルで普通に送るやつならできると思うけどエラー処理を書き換えないとダメ
参考
http://d.hatena.ne.jp/necyda/20120120/1327010215
http://www.ffmpeg.org/ffmpeg-devices.html#alsa-1
やり方
まずはニコニコ生放送を放送開始してから
放送画面の下にある、放送内容を変更するツール画面にて
外部ツール配信のタブを表示したのちに
この画像の緑色で囲っている箇所の
URL: を第1引数に
Stream: を第2引数にして
https://raw.github.com/silenvx/bin/master/nico_live.sh
このシェルスクリプトを実行するだけです
するとffmpeg経由で送信されます
音声の入力デバイスが複数ある場合などによっては
このシェルスクリプト内の -i hw:0を書き換える必要があるかもしれないです
とりあえず実際に放送する前に
-f flv "$1/$2 flashver=FMLE/3.0\20(compatible;\20FMSc/1.0) swfUrl=$2"
これをtest.mp4などに書き換えて、問題なく録画可能か確認してから放送することを勧める
放送される静止画は
video_image="`dirname $0`/logo_soundonly.png"
このようになっているので各自書き換えてください
このまま使うと、この実行ファイルがあるとこと同じ階層にある
logo_soundonly.pngというファイル名が流れます
はてなダイアリーの記事編集画面のリンク元の検索エンジンに書いてあるリンクなしのリンクを表示する
前書き
編集画面にいけばわかると思いますが、なんて検索したかわかる奴があるんですが
(refererのurlのqのパラメータがリンクの文字になっている)
qのパラメータがないとリンクに使われている文字がなくなってしまって
いちいちソースを見ないとリンクがわからなくなってしまっていては困る
ということでリンクの文字をurlに変えて表示させます
javascriptを使えばできる気がするので書いたことなかったですが書いたので
変なところがあったら申し訳ないです
やり方
firefoxの場合はこれをbookmarkに貼り付けて編集画面で実行するだけ
javascript:(function(){ var i,l=document.links.length; for(i=0;i<l;i++){ if(document.links[i].text==''){ document.links[i].text=document.links[i]; } } })();
ただ、画像がリンクになっていてリンクのテキストが設定されてない場合も対象になっちゃうので修正案募集中です
何してるか解説 (javascript書き始めて数時間の人が書いてるのであってるかは知らん、c言語かける人向け)
ソースコードを整形したもの
(function(){ var i,l=document.links.length; for(i=0;i<l;i++){ if(document.links[i].text==''){ document.links[i].text=document.links[i]; } } })();
1 (function(){ 8 })();
まだよくわかってないけど全部ローカル変数として扱えるらしい
詳しくはここ参照
http://d.hatena.ne.jp/sandai/20110824/p1
2 var i,l=document.links.length;
変数の宣言、document.links.lengthにはwebページのリンク総数が入ってる
3 for(i=0;i<l;i++){ 7 }
リンク分総当りで行くのでループさせる
4 if(document.links[i].text==''){ 6 }
document.links[i].textって配列でそれぞれのリンクに使われてるテキストが取得できる
この場合、何も書いてない奴がほしいのでNULLと同じ奴をヒットさせてる
5 document.links[i].text=document.links[i];
document.links[i]って配列でそれぞれのリンクのhrefを取得できる
それをリンクに使われてるテキストに代入して書き換えてるだけ
後書き
javascriptを書ける人から見たら記事を書く必要性があったのか疑問に思われそう
c言語とほとんど変わらないから取得方法を調べる以外は余裕だった
zip内のファイルを片っ端からmplayerに送るシェルスクリプト書いた
前書き
本当はmplayerでzip内のファイルを再生できるようにpatchを書こうと
ソースコードを眺めていたが面倒くさくなってシェルでなら前から再生できてたし
シェルスクリプトで書いたらなんかもう満足した
気が向いたらpatch書く
デメリットはcacheの領域超えたら再生できないこととか再生時間がどれだけあるかわからないとか色々ある
そういうわけなんで名前付きパイプなんて使わずにram disk上にファイル作成した方がいいと思います
本編と解説 (最初の2行以降は読まなくていいです)
https://raw2.github.com/silenvx/bin/master/z2m.sh
ここに置いてある。zipファイルを引数にして使う
短いとアレなんでシェルスクリプト書けない人のために何やってるか書くほどではないが書く
もしかしたら嘘書いているかもしれない
この記事書いた時のソースコード全体
#!/bin/sh # zipの中にあるファイルを片っ端からmplayerに渡すプログラム if [ -f "$1" ];then pipe=`mktemp -u` trap "rm \"${pipe}\";exit 1" 1 2 3 9 15 mkfifo "${pipe}"||{ echo 'error: mkfifo';exit 1; } IFS=$'\n' for zipInFile in `zipinfo -1 "${1}"|sed -e 's/\[/\\\\\[/g' -e 's/\]/\\\\\]/g'` ;do echo " --- staring: ${zipInFile}" unzip -p "${1}" "${zipInFile}" > "${pipe}" & mplayer "${pipe}" done rm "${pipe}" else echo "not found: $1" exit 1 fi
1 #!/bin/sh
スクリプトの1行目はどこそこに置いてあるプログラムの引数として実行しますって意味
この場合/bin/sh z2m.shとして実行される
#!がマジックナンバー
2 # zipの中にあるファイルを片っ端からmplayerに渡すプログラム
ただのコメント
4 if [ -f "$1" ];then (略) 16 else 17 echo "not found: $1" 18 exit 1 19 fi
ファイルが存在してるかどうか判定してる
なかったら何もできないのでエラー表示して終了
ifは引数に書いてるコマンドが0かそれ以外か見てる。0ならthen、それ以外ならelseに飛ぶ
[に-fオプションをつけるとその後ろにあるファイル名が存在するかどうかで戻り値を変える、あれば0
変数に使ってる$1はシェルスクリプトに使われた第1引数が入ってる
この場合 z2m.sh hoge.zipとかって使われることを想定しているからhoge.zipが入ってる
exitはプログラムの終了、その引数の数字はシェルスクリプト自体の戻り値、1は基本的にはエラーに使う
5 pipe=`mktemp -u`
pipe変数にmktempコマンドの標準出力を入れてる
``で囲うことで中身のコマンドの標準出力に置き換えることができる
mktempは一時ファイルを作成するコマンド、-uオプションをつけると作った振りをして他とかぶらない名前だけ標準出力される
作ったファイルが消せなくなると困るのでpipe変数に入れてます
6 trap "rm \"${pipe}\";exit 1" 1 2 3 9 15
Ctrl+Cとかされて途中終了されてしまうとゴミファイルが残ってしまうのでそういうコマンドを感知したら
プログラムが終了する前に消すように命じてる
trapの第1引数は実行するコマンド、第2引数以降はシグナルを指定する
シグナルってのはkillコマンドでプログラムに送るアレ
それぞれの数字の意味は各自調べてください、覚えてないです
rmは引数にあるファイルの削除
8 mkfifo "${pipe}"||{ echo 'error: mkfifo';exit 1; }
名前付きパイプを作成して、失敗したらエラー表示して終了してる
mkfifoは名前付きパイプっていうファイルを作成できる
これは普通のパイプのファイル版と思ってもらっていい
ファイルのようにパイプが使えるけど何で直接mplayerに渡さないかというとそうするとCUIでのキー操作を受け付けなくなるから
途中に書いてる||はmkfifoの戻り値が0以外だったら次に書いてるコマンドを実行してくれって意味
echoは引数に書いてる文字列の標準出力を行う
これまた途中に書いてる;は次に実行するコマンドを1行で書く時に間に挟む
なんで{}で囲ってるかというと、どっかで||の後ろは1つしかコマンドが実行されないとかどっかで見た気がするから
こうすることで1つまとめにできる
9 IFS=$'\n' 10 for zipInFile in `zipinfo -1 "${1}"|sed -e 's/\[/\\\\\[/g' -e 's/\]/\\\\\]/g'` ;do (略) 14 done
IFS変数は区切り文字を入れるとforなどで勝手にその文字で区切って別けてくれる
ここでは改行だけ区切り文字にしたいから$'\n'を代入してる、この文字列で改行を指定できる
forは繰り返しを行いたい時に書く
第1引数に第2引数から得た文字列をIFS変数を参考に区切ってループしていく
全部区切り終えたらループからは脱出する
zipinfoは引数に指定されたzipファイルの情報を出力するプログラム
オプションで-1を指定するとファイル名が1行ずつ表示される
これをsedっていう置換プログラムに送ってる
この後使うunzipは[や]の文字が正規表現として扱われてしまうのでエスケープするようにしてる
sedの-eオプションはこの後正規表現を書きますよという意味
''で囲まれてる文字列は、そのままの意味なんで勝手に解釈しないでくれって意味
ようはエスケープじゃないしスペースは引数の区切り文字じゃないよって言ってる
最初に書かれてるsは置換します
その後の/はこれから書く時は区切り文字は/ですって言ってる
\[は置換前の文字で[が正規表現に使われてるので\を使ってエスケープしてる
\\\\\[は置換後の文字で\も書きたいならエスケープする必要があるので\\と書いてる、ようは\\[って書いてあって
\が1個多いのは変数の中身を出す時も勝手にエスケープされちゃうから1個多く書いてる
最後のgは対象の文字列は全てs(置換)するという意味
その次の-e以降も同じ
最後に書いてある;doとdoneはfor文はdoから始まってdoneで終わる必要があるから書いてある
11 echo " --- staring: ${zipInFile}"
どのファイルを解凍して再生するかわかるように出力してる
12 unzip -p "${1}" "${zipInFile}" > "${pipe}" &
unzipに-pオプションを足すと標準出力に解凍するファイルが出力される
1つ目の引数は対象のzipファイル
2つ目の引数はそのzipファイルの中身のpathを指定して、解凍するファイルを選んでる
その後に書いてる>は標準出力を書き込むためのものでその後に書いてる名前付きパイプに上書きしている
最後の&はバックグラウンドで実行している、つまり終了を待たずに次にコマンドに以降できる
13 mplayer "${pipe}"
名前付きパイプをmplayerで再生してる
15 rm "${pipe}"
正常終了前にちゃんと消しておく
linux版firefoxでshockwaveを使う
前書き
http://askubuntu.com/questions/48140/compatible-version-of-adobe-shockwave-player
ここに書いてあることをそのままするだけですが
shockwaveのexe版だとなぜかインストールできなかったのでそれを混じりながら書く
ちなみにこれをするとlinux版firefoxの中にwine上のfirefoxを埋め込んで表示する
やり方
wineでfirefoxを導入
最新版のwin版は
http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/win32/en-US/
多分この辺りにあるのでそこからダウンロードして
% wine 'Firefox Setup 26.0.exe'
こんな感じでインストールして色々ウィンドウが出るので初回起動もしておく
次にshockwaveはmsi版をインストールする
http://www.adobe.com/products/shockwaveplayer/shwv_distribution3.html
ここにリンクがあると思う
今だと http://www.adobe.com/go/sw_msi_installer
ここからリダイレクトされるところにある
ダウンロードしたら http://appdb.winehq.org/objectManager.php?sClass=version&iId=20531&iTestingId=60908
ここに書かれてる方法を参考に
% msiexec /i sw_msi_installer
こんな感じでインストール可能、言わずもがなsw_msi_installerはダウンロードしたファイル
最後にmozpluggerを導入する
archlinuxの場合はaurにあるので
% yaourt -S mozplugger
これで導入可能だけどメッセージに
~/.mozilla/firefox/<profile-dir>/pluginreg.dat
こんなのを削除せよと出てると思うから指示に従ってpluginreg.datを削除
後はshockwaveっぽい拡張子の埋め込みの時に勝手に動くように
/etc/mozpluggerrcの最後に
application/x-director: dir,dcr,dxr,cst,cct,cxt,w3d,fgd,swa: Macromedia Director file swallow(firefox.exe) fill stream: wine "C:\\Program Files\\Mozilla Firefox\\firefox.exe" -chrome "$file"
これを追加してから実際にできてるか
http://www.adobe.com/shockwave/welcome/
ここを開いて確認して終了
ホームディレクトリ構成を晒してみる
前書き
真剣にlinuxを使い始めた時にどうするか数時間悩んだのでそういう人の為に晒してみる
確かこういうのを参考にしたと思う
みんなのホームディレクトリ下の構成を教えてください - まめめも
自分のホームディレクトリ下の構成 - すぎゃーんメモ
うちのホームディレクトリ構成を少し晒す | /var/log/azumakuniyuki
ホームディレクトリの構成を見直してみた - 乙女系プロレスリング
構成
~ ├tmp ├bin └misc ├tmp ├download ├music └dev ├tmp ├srv ├git └各言語名
役割
~/tmp
終わったらすぐ消すようなファイルの置き場所 (気軽にrm -rf ./*ができる)
解凍する時とかソースみたいだけの場合は主にここ
~/bin
他人からパクってきたプログラム置き場
~/misc/tmp
終わってもすぐには消さないようなファイルの置き場所 (気軽にrm -rf ./*ができない)
はてなダイアリーの記事を書く時はここに保存してる
~/misc/download
ダウンロード先
不要のものとそうでないものが、ごちゃごちゃしてしまって分からなくなってしまったらrenameして新たに作りなおす
~/misc/music
音楽の置き場所
アーティスト名/cd/毎に別けてるけど複数のアーティストがいたりするから実際は整理できてない
~/misc/dev
開発関係
~/misc/dev/tmp
試しに書いて放置する時の置き場所
ほぼ~/tmpで済ませてるから出番ほぼなし
~/misc/dev/srv
サーバの開発関連
~/misc/dev/git
gitで管理するファイル、dotfilesや~/binに置くような自作スクリプトもここにある
~/misc/dev/各言語名
どれにも属さないような、とりあえず置いときたい奴、例えば履歴書とか