ラベル PC の投稿を表示しています。 すべての投稿を表示
ラベル PC の投稿を表示しています。 すべての投稿を表示

2018-11-12

WSLでMozcで日本語入力

できるの・・・?

WSL(Windows Subsystem for Linux/旧Bash on Ubuntu on Windows)でGUIアプリ使う場合に気になること。GUIでLinuxのアプリを動かすのはXサーバを起動して環境変数DISPLAYを0:0とかに設定、というのはssh -XでGUIを引っ張ってくる時もやるので同じスキームでできそうだなという見当は付くものの、この方法でいっつも引っかかるのは

  • クリップボード経由のコピペ
  • 日本語入力(IMを経由した入力)

という定番があり、アルファベットだけで生きていけない言語話者としては常用するにあたりクリティカルな問題として常に横たわっていました。
が、どうもググるとWSLでMozc使って日本語入力が可能っぽいということで、作業ログ及びご紹介です。
尚、WSL用のターミナルはWSL Terminalを使っています。

WSL側で準備

関連パッケージのインストール

WSL側でフォント、X関連含めてインストール。インストールするフォントはお好みで。
# apt-get install fcitx-mozc
# apt-get install fonts-vlgothic fonts-mmcedar fonts-motoya-l-cedar fonts-motoya-l-maruberi
# apt-get install dbus-x11 x11-xserver-utils

実行準備

実行ユーザのUUIDを書き込み。
$ sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id"
(これしないとエラーが出ます
dbus[4934]: D-Bus library appears to be incorrectly set up: see the manual page for dbus-uuidgen to correct this issue. (Failed to open "/var/lib/dbus/machine-id": No such file or directory; UUID file '/etc/machine-id' should contain a hex string of length 32, not length 0, with no other text)

環境変数設定

必要な環境変数をまとめたファイル~/.xenvをWSL側のホームディレクトリに作成(本当は~/.profileに書きたいのだけどWSL Terminalからbash起動した場合に~/.profileを読み込まないため。--loginを付けてbashを起動すればいいらしいのだけどそうじゃないだろと…)
export DISPLAY=localhost:0.0
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
今回だけ手動読み込み(次回以降WSLログインで読み込み)
$ . .xenv

尚、次回以降の起動用に~/.bashrcの末尾に.コマンドを追記。これで次回以降は気にする必要なし。
. ~/.xenv

Windows側でXサーバ/VcXsrvのインストール

vcxsrv-64.1.20.1.3.installer.exeでインストールしました。デフォルトのままFullで。
インストール後、デスクトップにできたXLaunchを実行、Select display settingsはデフォルトのMultiple windowsを選択し次へ、Select how to start clientsもデフォルトのStart no client。Extra settingsもデフォルトのままClipboardとNative openglで。タスクトレイにアイコン表示で起動。

WSL側でFcitx起動・設定

$ fcitx-autostart
毎回GUI起動時に実行しなければならないが.profileに書いてしまうとXサーバがいない場合.profileを抜けないらしいのでとりあえず手動で実行することにします。
諸々表示されますがecho $?して0なら問題なし。ならない場合はXサーバが起動されてるか確認。
問題なければ
$ fcitx-config-gtk3
fcitx-autostartを実行しない場合は空で表示されるので閉じてfcitx-autostart。ここにMozcを追加するので左下の+をクリック。
Mozc選んでOK。
Global Configを選んでとりあえずTrigger Input Methodを変えます。何か色々安定しないので全角半角以外、Ctrl+SpaceはEclipseの補完入力と被るので普段使わないキーバインディングに変えます。変え終わったら閉じ。

文字入力の出来るアプリを適当に実行して確認します。私の場合普段がMATE使いなのでPlumaとかCajaとかで。
とりあえずうまくいったことにします。

Mozcの設定(任意)

Xサーバが起動している状態で、徐に以下を実行。
$ /usr/lib/mozc/mozc_tool --mode=config_dialog
私の場合はATOKキーマップが一番いいのでMS-IMEから変更します。

fcitx-autostart実行設定を.xenvに追記

Windows側でVcXsrvが起動してたらログイン時(WSL Terminal実行時)にfcitx-autostartコマンドを実行するようにします。
Xサーバの死活監視ってどうやればいいかな?6000番からTCPでnetstat開いてるか見るかな?とも思ったんですが、Build14951以降のWSLではWSLからWindowsプログラムを実行できるようになってるので、これを利用して「VcXsrvが起動してるかどうかをtasklistコマンドで確認して動いてればfcitx-autostartを実行」を書いてしまおうと思います。

~/.xenvに以下を追記
if [ $(/mnt/c/Windows/System32/tasklist.exe | grep vcxsrv | wc -l) -gt 0 ] ; then
        echo "vcxsrv exists. fcitx-autostart execute."
        fcitx-autostart
else
        echo "vcxsrv does not exist. do nothing."
fi
色々と力づくなのは承知しており、以下の懸念があるのは言わずもがなです。
  • tasklistコマンドの位置がWindows/System32の下にあることが将来的に保証されない
  • tasklistコマンドで表示した場合のVcXsrvプロセスが小文字のvcxsrv.exeであることが将来的に保証されない
  • VcXsrv以外のプログラムで「vcxsrv」を含むプロセスがwindowsで動作していると誤検知する
ただ、手軽にさっとできるのはこの程度とは思っています。変更があれば修正したいですね。
また、fcitx-autostartの出力が邪魔という場合は > /dev/null 2>&1を後ろにつけてもいいと思います。

まとめ

  • WSL側で必要パッケージをインストール
  • VcXsrvをインストール
  • WSL側で環境変数、実行プログラム等準備
  • Have a Happy Mozc on WSL Life!

補足

何か調子がおかしい場合
  • 入力中のGUIアプリを保存して閉じて、fcitx-autostartを実行する
  • fcitx-config-gtk3を実行して、Mozcがある(一番上にある)事を確認
  • どうしてもおかしかったらXサーバを再起動してfcitx-autostartからやり直す
  • fcitx-config-gtk3の中でKeyboard-EnglishがあってIM切り替えでMozcを外した時にEnglishに切り替わる場合、キーボードレイアウトが英語キーボードになるっぽいのでいっそ消した方が幸せかもしれない

2018-08-08

Linuxで外部モニターの解像度を指定して表示させる

PC:ThinkPad X230
OS:Ubuntu MATE 18.04LTS
モニター:BUFFALOのWUXGAのモニター(D-Sub接続)

とりあえず繋いでみたらWUXGAのモニターなのにXGAで表示しやがったのでなんとかする。
手順は何から何までこちら参照。

外部モニターを設定しようとするとこんな感じ。
  • ミラーリングで表示される
  • 解像度はXGAが最高
この状態でもミラーリングを解除すれば別表示にはできるけども…
  • やっぱり解像度はXGAが最高
現在のモニター設定を確認
$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 1536, maximum 8192 x 8192
LVDS-1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 277mm x 156mm
   1366x768      60.00*+
   1360x768      59.80    59.96  
   1280x720      60.00    59.99    59.86    59.74  
   1024x768      60.04    60.00  
   960x720       60.00  
   928x696       60.05  
   896x672       60.01  
   1024x576      59.95    59.96    59.90    59.82  
   960x600       59.93    60.00  
   960x540       59.96    59.99    59.63    59.82  
   800x600       60.00    60.32    56.25  
   840x525       60.01    59.88  
   864x486       59.92    59.57  
   800x512       60.17  
   700x525       59.98  
   800x450       59.95    59.82  
   640x512       60.02  
   720x450       59.89  
   700x450       59.96    59.88  
   640x480       60.00    59.94  
   720x405       59.51    58.99  
   684x384       59.88    59.85  
   680x384       59.80    59.96  
   640x400       59.88    59.98  
   576x432       60.06  
   640x360       59.86    59.83    59.84    59.32  
   512x384       60.00  
   512x288       60.00    59.92  
   480x270       59.63    59.82  
   400x300       60.32    56.34  
   432x243       59.92    59.57  
   320x240       60.05  
   360x202       59.51    59.13  
   320x180       59.84    59.32  
VGA-1 connected 1024x768+0+768 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00* 
   800x600       60.32    56.25  
   848x480       60.00  
   640x480       59.94  
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
HDMI-3 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
どうやらLVDS-1とVGA-1が認識されていて、VGA-1は1024x768が適用されているらしい。cvtというコマンドで解像度に対応する文字列を出す。

$ cvt 1920 1200
# 1920x1200 59.88 Hz (CVT 2.30MA) hsync: 74.56 kHz; pclk: 193.25 MHz
Modeline "1920x1200_60.00"  193.25  1920 2056 2256 2592  1200 1203 1209 1245 -hsync +vsync
cvtコマンドの結果をVGA-1に追加

$ xrandr --newmode "1920x1200_60.00" 193.25  1920 2056 2256 2592  1200 1203 1209 1245 -hsync +vsync
$ xrandr --addmode VGA-1 1920x1200_60.00
解像度の1024x768の上に1920x1200が追加されるのでそれっぽくして反映できることを確認。
で、このままではXのセッションを抜ける度に設定が消えるので、xrandrコマンドをログイン時に反映するために~/.profileとかに追記する。

xrandr --newmode "1920x1200_60.00" 193.25  1920 2056 2256 2592  1200 1203 1209 1245 -hsync +vsync
xrandr --addmode VGA-1 1920x1200_60.00
xrandr --output VGA-1 --mode 1920x1200_60.00
最後のxrandr --outputはVGA-1を1920x1200_60.00で表示するようにする。これでXのログイン後に外部モニターはWUXGAで表示されることを確認。

2018-04-08

LMDEからの卒業(予定)

もうかれこれ数年に渡って愛用しているLinuxディストロであるLMDE/Linux Mint Debian Editionですが、些細なきっかけにより今後使用するディストロから外れていく可能性が高くなりました。

2016-05-21

Ubuntu使ったらブラウザでF12キーで開発者ツールにしようと思ったら画面上部にターミナルが表示されてうざすぎるのでなんとかする方法を考える。

概要
最近DellのInspiron 13 7000シリーズ(Skylake/第6世代Core i5)を買いまして、本当ならLMDE2をいつもどおり入れたかったんですがGRUBのあとに暗転、GRUBからのオプションに確か「i915.modeset=0」を指定してその先には進んだものの「syspath not found」とか表示されて無理そうだったので、てっとり早くUbuntu MATE16.04を突っ込んでお茶を濁してみてるんです。
諸処の設定はLMDEとそんなに変わらないんですが、ちゃんと使い始めてみたら標記の罠にひっかかりどうしたもんかなと。

F12を押すだけでとにかく表示されるターミナルはそもそも何なのか。
Guakeというアプリらしいです[1]

ブラウザ使っててF12で表示されるあれは何なのか。
FirefoxでもChrome/ChromiumでもF12で表示されるあれは開発者ツール/Developer toolsというみたいです(もともとIEが最初に搭載したという話を見た記憶がありますが記憶が怪しいです)

こうなる

対処法
必要ないのに立ち上がってきたguakeの何もないところで右クリック→Preferences
KeybindingsタブのPull Down TerminalでF12以外のキーバインドに変更(とりあえず間違いなく使わなそうなAlt+F12にしました)
変更後に今生のお別れをするのは変更済みのAlt+F12を押す必要があります。さようなら。

雑感
Ubuntuの開発者はブラウザでどの要素がこれを表示してるかなんか見ることないんだろうなーと。
似たような感想は.screenrcでCtrl+ZをCtrl+Aの代わりに割り当てる設定をひたすら拡散する人を見た時にも思いました(フォアグラウンドプロセスにSIGSTOPを送ってバックグラウンドに回して再開したいときはjobsでジョブ番号見てfg ジョブ番号で手前に引っ張ってくることがない人生が羨ましすぎて)


[1] http://guake-project.org/

2016-01-01

台北に行ってきた(周遊編)


台北駅は屋根の瓦?の模様替え中。
今回の主目的はXiaomi Mi 4i。
台北小米之家
http://www.mi.com/tw/service/mifamily/
↑URLは時々変わるのでググるしかないと思います。



MRT中和新蘆線の行天宮駅を3番出口から出たら左を向いてレトロなレンガ作り風ビルの階段を上がった2階です。

↑道挟んだ側から見た図。青い看板の奥が3番出口でその右に看板が見えるのが台北小米之家。

店内の様子。割と客層は広く万遍ない感じ。(店内奥のカフェスペースからレジに向かって撮ってます)

曲者なのが販売時間を制限している点で、11:00〜19:00の間ホットモックはいつでも触れますが購入は1日3回(11:30、15:30、17:30)に店にいる必要があります。
私が行った時は整理券の配布(列に並ぶ)はありませんでしたが、レジに買うものを記入するバインダーがあるので買いたい旨を伝えるとバインダーをくれます。英語で通じました。日本語は試していません。試していませんが、お釣り受け取るの忘れて帰ろうとしたら「ちょっと待って!」と言われたので日本語でも大丈夫なスタッフもいるかもしれません。後は動作確認で箱を開けるかの確認もされましたが自分でゆっくり開けたかったので丁重にお断りしました。修理の受付もここで行っています。

↑Mi 4i(の箱の一部。紫なのはHTL22で撮ったため。
台北小米之家で買えるのはスマホやタブレット(の一部恐らくグローバルモデルのみ)、モバイルバッテリー、イヤホン、ヘッドホン、Mi Band(小米手環)、ガジェットのケースです。
全てのガジェットが買えるわけではないので、事前に売っているものを確認しましょう。現在販売されているスマホは

  • 小米Note NTD12499
  • 小米手機 4i(買えたのは白と黒) NTD5999(16GB) NTD7299(32GB)
  • 紅米Note 2 NTD4999 ←発売直後でした。サイズ5.5インチで良ければ即買いレベルのコスパですよね。
  • 紅米手機2 NTD3299
行天宮


おもむろに太い通り沿いにある関帝廟で、ビジネスの神様として関羽を祀っています。
場所は行天宮駅から北にちょっと歩いたところ。ちゃんとしたお参りができるそうなので次回は行きたいですね(今回は中に入ってない…)

光華商場/三創數位生活園區(SYNTREND)
https://www.facebook.com/gwmall
http://www.syntrend.com.tw/


場所は中和新蘆線または板南線の忠孝新生駅からちょーっと歩いたところ。光華商場はPC、パーツ特化で隣のSYNTRENDがスマホ系ガジェットに特化という感じですかね。
台湾では日本よりはPCゲームが盛んなので、光華商場はそっちの需要で生き残ってる感じもあります。SYNTRENDの方が低層階がキャリア/スマホメーカーショップがあって回りやすいかと。

↑光華商場のビル広告はHTC One M9でした(前行った時はHTC One XLだった記憶)

↑SYNTREND1FのHTCショップのBoomSound体験コーナー

↑近くの大型広告はHTC One A9。

↑SYNTREND上層階ではSTARWARS公開予告


↑全然関係ないですが進撃の巨人展を今やってるみたいです。

と、かつて紹介した五鉄秋葉原*1は食べ物屋ビルに変貌していてガジェットの匂いは全てSYNTRENDに移動した模様です。


*1 http://utimukat55.blogspot.jp/2012/12/blog-post_7.html

2014-06-28

DebianのChromiumでFlashを見る

Flashという障壁
いつもセキュリティホールが見つかる対象として諸悪の根源的な扱いも受けることの多いFlashですが、それでもあったほうが便利な状況は未だに多く、特にデスクトップ用途ではその傾向が顕著です。
また、GNU/Linux上での扱い方もコロコロ変わったりするんですが、Debianで扱う[1]上で今の時点で一番筋の良さそうな方法を記載します。前提は以下。

  • ChromiumブラウザでFlashを使う
  • アーキテクチャはi386/amd64

Chromium上でのFlashの扱い
(Chromeではない)Chromiumを使う場合、ブラウザにFlashが同梱されていないため、手動で導入する必要があります。(ChromeにはPPAPI版のFlashが同梱されているので、このエントリの手順は必要ありません)
Flashの導入はパッケージとしてaptからできますが、NPAPI版[2]とPPAPI版[3]のパッケージがあります。詳細な違いは把握してませんが、NPAPIは古いアーキテクチャでメンテナンスが大変らしい、基本的にChromeはNPAPIのサポートをやめる方向、バイナリをadobeからダウンロードしてくる。PPAPIは新しいアーキテクチャで、GoogleがメンテしていてバイナリもGoogleからダウンロードしてくる。という違いはあるようなので、ここではPPAPI版[4]の導入をすることにします。

パッケージのインストール
# apt-get install pepperflashplugin-nonfree
インストールは以上で、パッケージのインストールの場合はバイナリを落としてきてインストールまでやってくれるみたいです。

普段のメンテナンス
pepperflashplugin-nonfreeパッケージ自体はflashのバイナリを含んでいるわけではなく、update-pepperflashplugin-nonfreeコマンドの実行によってバイナリが更新されているかを判断するようです(NPAPI版のflash-plugin-nonfreeと同じ)
# update-pepperflashplugin-nonfree
Usage:
  update-pepperflashplugin-nonfree --install
  update-pepperflashplugin-nonfree --uninstall
  update-pepperflashplugin-nonfree --status
Additional options:
  --verbose
  --quiet
ということなので、--statusを付けてアップデートがあるかチェック、あれば--installで更新ということになります。(更新があるかどうかを自動的に確認する方法は無さそうです。)
ちなみに、現在の状況は
# update-pepperflashplugin-nonfree --status
Flash Player version installed on this system  : 14.0.0.125
Flash Player version available on upstream site: 14.0.0.125

導入されているバージョンは、Chromiumから「chrome://plugins/」を開くことでも確認が可能です。

[1] https://wiki.debian.org/FlashPlayer
[2] https://packages.debian.org/jessie/flashplugin-nonfree
[3] https://packages.debian.org/jessie/pepperflashplugin-nonfree
[4] https://wiki.debian.org/PepperFlashPlayer

2014-06-21

LMDE UP8(MATE)での日本語入力にfcitxを使う

以前のエントリ[1]の内容を新しいPCでやってみるとできないことに気づいたので、LMDE UP8(MATE)を新規インストールした際の設定方法を確認しました。
LMDEでの設定方法ですが、他のdistro(特にDebian系)でも応用できるのではないかと思います。

関連パッケージのインストール
パッケージをインストールします。
# apt-get install im-config fcitx fcitx-mozc fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt4 fcitx-frontend-qt5 fcitx-ui-classic fcitx-config-gtk mozc-utils-gui
im-configコマンドでfcitxを指定します。(以前の手順ではコンソールから選びましたが、-nオプションでinput method nameを指定するとコマンドだけで変えれるみたいです。
$ im-config -n fcitx
Xをログアウトしてもう一度ログインし、「設定」→「Fcitx設定」を開きます(メニュー開いて右上の「すべてのアプリケーション」を選択しておいてください。)

「入力メソッド」タブにmozcが追加されてるのを確認して、「全体の設定」で入力メソッドのオンオフを変えたりします。



今度はメニューから「設定」→「Mozcの設定」。


「一般」タブでキー設定の選択をATOKに。


「辞書」タブに「Unicode6絵文字変換」というのがあったので選んでみました。


以上。

余談
パッケージを大量にインストールしてますが、こんなにちまちま指定しなくてもLinux Mint Japanが提供する「mint-gnome-ja」パッケージをインストールすると色々ひっくるめてインストールできます。
ですが、とにかく以下の点があり(個人的に)お勧めできません。

  • ibus入れてくる[2]
  • takaoフォント入れてくる[3]
  • 他にも使うかどうかわからないパッケージ色々入れてくる

これでもいいという方はmint-gnome-jaを入れるほうが楽なので、入れ方をググってもいいと思います。

[1] http://utimukat55.blogspot.jp/2013/10/ibusfcitx.html
[2] ibus使い続けて問題なければfcitxユーザーこんなに増えてないよね
[3] 画面表示はVLゴシックの方が見やすいし、改まったゴシックならモトヤLシーダ(fonts-motoya-l-cedar)/モトヤLマルベリ(fonts-motoya-l-maruberi)使えばいいかなというのと、takaoフォントの優先度がむちゃくちゃ高いのが嫌なので

2014-06-04

aptでパッケージを更新しないようにさせる

こんな時
パッケージを固定したい!(Debian系またはaptをパッケージ管理に使っているディストロで)
pinでもいいのだけど
もっと別のレイヤーで、aptのpinningではなく、dpkgの機能(dpkg --set-selections)を使って更新対象から外す方法です。
例えばisc-dhcp-commonとisc-dhcp-serverを更新したくない場合。
# apt-mark hold isc-dhcp-common isc-dhcp-server
isc-dhcp-common は保留に設定されました。
isc-dhcp-server は保留に設定されました。
現在更新が保留されているパッケージの一覧。
# apt-mark showhold
isc-dhcp-common
isc-dhcp-server
更新の保留を解除する場合。
# apt-mark unhold isc-dhcp-server isc-dhcp-common
isc-dhcp-server の保留を解除しました。
isc-dhcp-common の保留を解除しました。

2014-05-30

Linuxでswap用のファイルを作って使う(swapパーティションではなく)

かつてのLinuxの常識
実メモリ(RAM)の2倍のswapパーティションを作って、仮想メモリとして使う。

今陥っている状況
RAMが2GB積んでるからswapパーティション要らないと思って作らなかったけどChrome/Chromiumがやたらメモリ食うしヽ(`Д´)ノもう来ねえよ!ウワァァン

残された手段
Windowsのpagefile.sysみたいに、既存のパーティション上にスワップファイルを作って、メモリ逼迫してきたら仮想メモリとして使えるようにする。

というわけで、/mnt/swap.pagefileという4GBのファイルを作って、そこをスワップファイルにします。

まず、今のスワップの確認。
$ cat /proc/swaps
Filename Type Size Used Priority
何もない!

スワップファイル作成からデフラグ[1]、スワップ有効化。
# dd if=/dev/zero of=/mnt/swap.pagefile bs=1M count=4096
4096+0 レコード入力
4096+0 レコード出力
4294967296 バイト (4.3 GB) コピーされました、 84.8117 秒、 50.6 MB/秒
# e4defrag /mnt/swap.pagefile
ext4 defragmentation for /mnt/swap.pagefile
[1/1]/mnt/swap.pagefile: 100% [ OK ]
 Success: [1/1]
# mkswap /mnt/swap.pagefile
# swapon /mnt/swap.pagefile
これが問題なく終わってれば、スワップ確認した時に変わる。
$ cat /proc/swaps
Filename Type Size Used Priority
/mnt/swap.pagefile                      file 4194300 519140 -1
問題なさそうなら、/etc/fstabに行を追加。これでswapon -aでマウントしてくれるし、起動時にもマウントしてくれる。
/mnt/swap.pagefile swap swap defaults 0 0

[1] Windowsのデフォルトみたいにスワップファイルが断片化してると、目も当てられない状況になってしまうので(XPまでの話。Vista以降はよく知りません)

2014-02-10

特定のMACアドレスに対してIPv6アドレスを設定するDHCPv6サーバを構築した(4)-DHCPv6サーバの設定再び

前回までのあらすじ

  • DHCPv6サーバはISCのものにパッチを当てたものをパッケージとして作ってインストール
  • DHCPv6クライアントはISCのものを使って、クライアントを手動実行
  • クライアントから送るDHCPv6 soliciteが期待通りにならない(DUIDが)
サーバ側の設定を変更
/etc/dhcp/dhclient.confに記載したDUIDは例のwide_mkduid.plで生成したもので、Hardware typeが6(IEEE802)となっていたのだけど、ISCのdhclientは1(Ethernet)としてDUIDを作るので、こっちに寄せることにしてファイルの内容を変更[1]。最終的には以下。

default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.info-refresh-time 21600;
dhcpv6-lease-file-name "/var/lib/dhcp/dhcpd6.leases";
# RAとか範囲とか(うちの場合はRTX1100で配っているRA)
subnet6 fd00:dead:beef::/64 {
 # 1000からffffまでをDHCPで配る対象にする
 range6 fd00:dead:beef::1000 fd00:dead:beef::ffff;
 # 固定IPアドレス
 host kurobox-t4 {
  host-identifier option dhcp6.client-id 00:03:00:01:00:16:01:xx:yy:zz;
  # 固定で振るIPv6アドレス
  fixed-address6 fd00:dead:beef::100;
 }
}
DHCPサーバを再起動。
# /etc/init.d/isc-dhcp-server restart
DHCPv6クライアント側はDUIDタイプはdhclientのmanを注意深く読んだ結果、引数「-D LL」を指定することでLLを強制的に指定できそうだったので、/var/lib/dhcp/dhclient6.leasesの中身を空にして[2]、起動方法を以下の引数へ変更して実行。
# dhclient -6 -D LL -cf /etc/dhcp/dhclient.conf eth0 -v
一応これで当初望んでいた「fd00:dead:beef::100」は設定されるようになったので「特定のMACアドレスに対して固定IPv6アドレスをDHCPv6で設定する」は達成できたと思いますが、いくつか条件付きなのはここまで記載したとおり。
  • DHCPv6サーバがデフォルトだと扱いづらい
  • dhclientの起動方法が手動
  • DUIDがLLのみ(LL+Tだと対応できない)
サーバ側もクライアント側も結局一筋縄でいかないのは間違いないと思うので、できるだけ早いとここの辺が解決するといいなぁと思っています。

[1] 00:03:00:06から00:03:00:01へ
[2] 空にしないと、取得済みのアドレスを載せたDHCPv6 confirmを送り続けます

特定のMACアドレスに対してIPv6アドレスを設定するDHCPv6サーバを構築した(3)-DHCPv6クライアントの設定

DHCPv6クライアントの設定
クライアント側パッケージはisc-dhcp-clientを使います。サーバ側をisc-dhcp-serverにしたからというだけですが、一応バージョンはdebianの4.2.4-7[1]を使いました。これより前のバージョンでも動くかもしれません。
で、いろんなサイトを見ながら設定を探しつつ…とりあえず[2]の設定がよさげかなぁと思ってこれをベースに。
以下の2行を/etc/dhcp/dhclient.confに書き足して。
send dhcp6.oro 3,23,24,31;
send dhcp6.rapid-commit;
NIC再起動すりゃこの設定したdhclientがDHCPv6 solicite投げるだろjk…
# /etc/init.d/networking restart
……パケット取ってるwiresharkに一向にDHCPv6パケットが流れてこない……

DHCPv6クライアントを手動で実行する
まさかの手動実行ですよ。何か設定が間違ってるのかもしれませんが小職のスキルでは悪いところが見つけられませんでした。

で、とりあえずman dhclientしてみて、dhclient --helpしてみて、それっぽい引数を探します。
# dhclient --help
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Usage: dhclient [-4|-6] [-SNTP1dvrx] [-nw] [-p <port>] [-D LL|LLT]
                [-s server-addr] [-cf config-file] [-lf lease-file]
                [-pf pid-file] [--no-pid] [-e VAR=val]
                [-sf script-file] [interface]
ふむ。とりあえずDHCPv6クライアントとして実行する場合は-6と、最後のinterfaceは指定したほうがよさそう。ついでに一応設定ファイルを-cfで明示的に指定してみよう。あとは動きを確認するために-v(よくあるverbose)。

# dhclient -6 -cf /etc/dhcp/dhclient.conf eth0 -v
実行結果。
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Bound to *:546
Listening on Socket/eth0
Sending on   Socket/eth0
PRC: Soliciting for leases (INIT).
XMT: Forming Solicit, 0 ms elapsed.
'send dhcp6.oro' syntax is deprecated, please use the 'request' syntax ("man dhclient.conf").
XMT:  X-- IA_NA 01:96:49:2b
XMT:  | X-- Request renew in  +3600
XMT:  | X-- Request rebind in +5400
XMT: Solicit on eth0, interval 1060ms.
RCV: Advertise message on eth0 from fe80::213:e8ff:fexx:yyzz.
RCV:  X-- IA_NA 01:96:49:2b
RCV:  | X-- starts 1391264700
RCV:  | X-- t1 - renew  +3600
RCV:  | X-- t2 - rebind +7200
RCV:  | X-- [Options]
RCV:  | | X-- IAADDR fd00:dead:beef::c7e5
RCV:  | | | X-- Preferred lifetime 604800.
RCV:  | | | X-- Max lifetime 2592000.
RCV:  X-- Server ID: 00:01:00:01:1a:7f:8d:59:00:13:e8:xx:yy:zz
RCV:  Advertisement recorded.
PRC: Selecting best advertised lease.
PRC: Considering best lease.
PRC:  X-- Initial candidate 00:01:00:01:1a:7f:8d:59:00:13:e8:xx:yy:zz (s: 153, p: 0).
XMT: Forming Request, 0 ms elapsed.
'send dhcp6.oro' syntax is deprecated, please use the 'request' syntax ("man dhclient.conf").
XMT:  X-- IA_NA 01:xx:yy:zz
XMT:  | X-- Requested renew  +3600
XMT:  | X-- Requested rebind +5400
XMT:  | | X-- IAADDR fd00:dead:beef::c7e5
XMT:  | | | X-- Preferred lifetime +7200
XMT:  | | | X-- Max lifetime +7500
XMT:  V IA_NA appended.
XMT: Request on eth0, interval 960ms.
RCV: Reply message on eth0 from fe80::213:e8ff:fexx:yyzz.
RCV:  X-- IA_NA 01:xx:yy:zz
RCV:  | X-- starts 1391264702
RCV:  | X-- t1 - renew  +3600
RCV:  | X-- t2 - rebind +7200
RCV:  | X-- [Options]
RCV:  | | X-- IAADDR fd00:dead:beef::c7e5
RCV:  | | | X-- Preferred lifetime 604800.
RCV:  | | | X-- Max lifetime 2592000.
RCV:  X-- Server ID: 00:01:00:01:1a:7f:8d:59:00:13:e8:xx:yy:zz
PRC: Bound to lease 00:01:00:01:1a:7f:8d:59:00:13:e8:xx:yy:zz.
お。動いてる[3]。動いているが。DHCPv6サーバから振られているアドレスが「fd00:dead:beef::c7e5」である。前に書いたとおり動いていれば振られるアドレスは「fd00:dead:beef::100」になるはずなのであるが。一応ifconfigでも確認。
# ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス 00:16:01:xx:yy:zz
          inetアドレス:192.168.1.33 ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fd00:dead:beef:0:216:1ff:fexx:yyzz/64 範囲:グローバル
          inet6アドレス: fe80::216:1ff:fexx:yyzz/64 範囲:リンク
          inet6アドレス: fd00:dead:beef::c7e5/64 範囲:グローバル
うむやはり。c7e5はDHCPv6サーバからリースする範囲(1000からffff)の範囲には入っているので、DHCPv6サーバ自体は機能してそう。
サーバ側のログを見てみると。
Feb  1 23:25:36 lmdecfy7 dhcpd: Solicit message from fe80::216:1ff:fexx:yyzz port 546, transaction ID 0x792D6600
Feb  1 23:25:36 lmdecfy7 dhcpd: Picking pool address fd00:dead:beef::c7e5
Feb  1 23:25:36 lmdecfy7 dhcpd: Sending Advertise to fe80::216:1ff:fexx:yyzz port 546
Feb  1 23:25:37 lmdecfy7 dhcpd: Request message from fe80::216:1ff:fexx:yyzz port 546, transaction ID 0xA4A60600
Feb  1 23:25:37 lmdecfy7 dhcpd: Wrote 0 deleted host decls to leases file.
Feb  1 23:25:37 lmdecfy7 dhcpd: Wrote 0 new dynamic host decls to leases file.
Feb  1 23:25:37 lmdecfy7 dhcpd: Wrote 0 leases to leases file.
Feb  1 23:25:37 lmdecfy7 dhcpd: Sending Reply to fe80::216:1ff:fexx:yyzz port 546
ということで、どうも適当に在庫からアドレスを拾ってきていてそれがc7e5ということらしい。うーむ。色々がんばったつもりなんだが。
パケットを見てみると、どうやらDHCPv6 soliciteの中にクライアントから送られるDUIDが含まれているらしいということを知る。
DUID type: link-layer address plus time (1)
Hardware type: Ethernet (1)
Time: Feb  1, 2014 23:25:00 JST
Link-layer address: 00:16:01:xx:yy:zz
マジかよ。とりあえず2つおかしい。
  1. DUIDタイプがLL+T(MACアドレスと時刻)になっている
  2. Hardware typeがEthernetになっている
DUIDタイプは時刻がいつになるかわからない時点で知ったこっちゃないので、LLになるといいなぁと思っていたので、正直参る。

このエントリはここまで。

[1] http://packages.debian.org/ja/jessie/isc-dhcp-client
[2] https://wikispaces.psu.edu/display/ipv6/DHCPv6#DHCPv6-ISCdhclient4.1.0
[3] MACアドレス該当部はぼかしています

2014-02-05

特定のMACアドレスに対してIPv6アドレスを設定するDHCPv6サーバを構築した(2)-DHCPv6サーバの設定(1)

(今のところ)isc-dhcp-serverはdaemonとしてハンドリングしづらい
いきなりブチ切れに近い感じで。

  • 今回DHCPv6サーバにするのはLinux(Debian GNU/Linux)
  • ざっと持ち合わせてる知識だとwide-dhcpv6-server[1]かisc-dhcp-server[2]が良さそうなのだけど、wideの方はupstreamを見ても最後の更新が2009年なので使うのに気が引けてしまう(今はdibblerなのかな?)
  • かと言ってisc-dhcp-serverがDHCPv6サーバとしてハンドリングしやすいかと言えばそんな事は全くなく、パッチをあてる[3]のが一番てっとり早そうという泥沼
という事で、普通のDHCP(v4)サーバみたくハンドリングできるようにソースパッケージにパッチをあててビルドしますorz。

isc-dhcp-serverをビルド、インストール
まず、当てたいパッチが4.2.4向けなので、現状4.2.4なtesting/jessieまたはsidをapt-get sourceできるように以下の行をapt-lineに追加します。

deb-src http://ftp.jp.debian.org/debian/ jessie main non-free contrib
# apt-get update
# apt-get build-dep isc-dhcp=4.2.4-7
# apt-get install devscripts

# exit
$ mkdir build_isc
$ cd build_isc/
$ apt-get source isc-dhcp=4.2.4-7
で、[3]のMessage142のisc-dhcp-server-ipv6.patchをダウンロードしてきます。ここでは~/Downloadsに保存したものとして、
$ patch -u -p0 < ~/Downloads/isc-dhcp-server-ipv6.patch
(patching file・・・がずらずらーっと出ればOK)

$ cd isc-dhcp-4.2.4/
$ debuild -uc -us
$ su
$ cd ..
# dpkg -i isc-dhcp-server_4.2.4-7_amd64.deb isc-dhcp-common_4.2.4-7_amd64.deb
でビルドしたパッケージのインストールは完了。

isc-dhcp-serverの設定項目
今回はDHCP(v4)サーバは設定せず、DHCPv6サーバだけ動かすので、そのように書き換えます。/etc/default/isc-dhcp-serverの以下の場所を書き換え。
  • V4_ENABLED="true"を"false"へ
  • V6_ENABLED="false"を"true"へ
  • INTERFACES_V6=の行を"wlan0"へ(今回はwlan0でDHCPv6dを動かすので)
# touch /var/lib/dhcp/dhcpd6.leases

/etc/dhcp/dhcpd6.confを必要に応じて書き換える。
default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.info-refresh-time 21600;
dhcpv6-lease-file-name "/var/lib/dhcp/dhcpd6.leases";
# RAとか範囲とか(うちの場合はRTX1100で配っているRA)
subnet6 fd00:dead:beef::/64 {
 # 1000からffffまでをDHCPで配る対象にする
 range6 fd00:dead:beef::1000 fd00:dead:beef::ffff;
 # 固定IPアドレス
 host kurobox-t4 {
  host-identifier option dhcp6.client-id 00:03:00:06:00:16:01:xx:yy:zz;
  # 固定で振るIPv6アドレス
  fixed-address6 fd00:dead:beef::100;
 }
}
ここで固定アドレスを振る対象の行の最後のパラメータですが(最後3オクテットをぼかしてますが)、これが弊ブログの別エントリで触れているDUIDになります。
この時点では生成をミスるとまずいと思ったので、wide_mkduid.plというスクリプトを使って生成しました。端的に書くと、MACアドレスの前に「00:03:00:06:」を付与したDUID-LL(hardware typeは6(IEEE 802 Networks))です。まぁ後々これでも不味かったことを思い知るわけですが。
なお、dhcpd6.confの書き方は[4]を参考にさせていただきました。

このエントリはここまで。


[1] http://packages.qa.debian.org/w/wide-dhcpv6.html
[2] http://packages.qa.debian.org/i/isc-dhcp.html
[3] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=592539

特定のMACアドレスに対してIPv6アドレスを設定するDHCPv6サーバを構築した(1)-序章

やる前は1エントリで済むと思ってたんですが実際やってみるとすげー大変だったのでいくつかに分けます。
現状&やりたいこと
我が家では部分的にIPv6を導入していて、VPN(L2TP)ルータとしてヤマハのRTX1100を使っています。また、RAもRTX1100からLAN側に流していて、ステートレスなIPv6アドレス設定はできている状態です。


ですが、ご存知の通りIPv6アドレスは長い事、ステートレスに生成するIPv6アドレスは128bitぶんのアドレスを使い切る(0ではない)ので、LAN内のサーバにも頻繁にアクセスするには辛いアドレス(手入力したくない)が設定されます。[1]
そこで、IPv4では家庭用のブロードバンドルータでもできるような「特定のMACアドレスに特定のMACアドレスを配布する」をIPv6で実現しようと思いました。よく言うDHCPv6によるステートフルなIPv6アドレス割り振り(しかも固定アドレス)です[2]。

せっかくヤマハルータあるんだからコマンドいくつか流しこめば出来るんじゃないかと思ったんですが、現状のヤマハルータではRTX1100に限らずこの機能が提供されていません。


なので、LAN内のPCをDHCPv6サーバにしてみようというのが今回のスタート地点です。

今回の記事の全容は以下になります。

  1. 序章←今ここ
  2. DHCPv6サーバの設定(1)
  3. DHCPv6クライアントの設定
  4. DHCPv6サーバの設定(2)
RTX1100の設定はこんな感じです。

  • LAN1がLAN
  • 配布するRAのprefixはfd00:dead:beef::/64
  • DHCPv6使うのでRAのMフラグは立てる

具体的には

  • # ipv6 prefix 1 fd00:dead:beef::/64
  • # ipv6 lan1 prefix fd00:dead:beef::/64
  • # ipv6 lan1 rtadv send 1 m_flag=on
このエントリはここまで。


[1] AAAAレコードを返すDNSサーバを置いても解決できる問題ではありますが
[2] ステートフルの定義を理解できてないかもしれないので間違っていたら教えてください

2014-01-08

Rictyフォントを生成する

元にしているフォントのライセンス都合上導入に手間のかかるRictyフォント[1]ですが手元のDebian環境で生成してみました。
というのも、Rictyフォントの生成にはfontforgeと2つのフォントが必要ですが、Debianだとパッケージで用意されてるみたいなので手間削減できるかなぁと思い・・・
Rictyフォントの生成
まずはfontforgeとベースとなるフォント(InconsolataとMigu 1M)のDebianパッケージをインストール
# apt-get install fonts-inconsolata fonts-migmix fontforge
次いで生成シェルをダウンロード。githubからgit cloneでもいいんでしょうが、ちょっと手間を惜しんで。
ブラウザで https://github.com/yascentur/Ricty/blob/3.2.2/ricty_generator.sh へ移動
「raw」を右クリック→保存
ターミナル開いてダウンロードしたディレクトリに移動
$ chmod +x ricty_generator.sh
$ ./ricty_generator.sh auto
で、問題がなければシェルが正常終了します。
Ricty-Bold.ttfとRicty-Regular.ttfが実行した場所に生成されるので、フォント追加します。[2]

$ mkdir ~/.fonts
$ cp -f Ricty-{Bold,Regular}.ttf ~/.fonts/
システムワイドに追加したい場合は/usr/local/share/fonts/にコピーすると良いでしょう。
$ fc-cache -vf
追加されたことを確認したい場合は $ fc-list | grep Ricty で確認するといいでしょう。
と思ったものの!!
生成に必要なフォントのうち、Migu 1Mが古いです(Debianのパッケージが)。
単にパッケージングしてないだけかぁと思いつつBTS見てみたら、どうもライセンスが変わったけどどうするのこれ的なの[3]が見つかりうーん。
なお、フォントが古い事が明らかになってしまったので上記手順自体あまりおすすめできなくなってしまいましたが補足。
Rictyの生成手順で書かれている「(MigMixではありません)」をぶっちぎってfonts-migmix[4]をインストールしていますが、migu-1m-regular.ttfとmigu-1m-bold.ttfが20120411版と同じことは確認済みです。

[1] http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html
[2] https://wiki.debian.org/Fonts#Adding_fonts
[3] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680036
[4] http://packages.qa.debian.org/f/fonts-migmix.html

2013-10-20

ibusではなくfcitxを使う

(2014/06/21更新)
このエントリの内容ですが今やると一部思い通りにならないので、新しくエントリ書きました。参考になれば幸いです。
LMDE UP8(MATE)での日本語入力にfcitxを使う

概要
ここ最近ではデスクトップLinux上の日本語入力にibusとmozc(Google日本語入力のオープンソースプロダクト)を組み合わせて使っていましたが、ibusの1.5に伴う仕様変更がどうもインパクトが超大きい[1]みたいなので、とりあえずibusの代替としてfcitxを使ってみます。環境はDebian GNU/Linuxのtesting(かつLMDE)。

手順
# apt-get install fcitx fcitx-mozc
(20140222更新  im-configがインストールされていない場合はim-configパッケージをインストールしておく。)
# im-config -c
20140222追加 # apt-get install  fcitx-config-gtk fcitx-config-gtk2 fcitx-frontend-gtk2 fcitx-frontend-gtk3 mozc-utils-gui

Xを抜けてログインし直す。
設定→Fcitx設定を選ぶ。
mozcがあるはず。
オンオフのキーに最初Ctrl+SpaceのUNIXでおなじみの組み合わせが指定されていますが、私の場合Eclipseの補完とかぶるので全角半角にしました(結果的に2つ全角半角を指定していることになっていますが)
mozcの設定はGNOMEタスクトレイのキーボードアイコンを右クリック→Mozcツール→設定ツールから。
元々設定した値がそのまま設定されていました。手順は以上。

参考サイト
Fcitxのテストのお願い - いくやの斬鉄日記 http://blog.goo.ne.jp/ikunya/e/a5c2a00e25564c61d322c4c73b7a81da
Debian -- sid の fcitx パッケージに関する詳細 http://packages.debian.org/ja/sid/fcitx

追記(2013/11/06)
Fcitxを使い始めて1週間ほど経つものの、万全ではない感は感じている。
というのは、一旦Fcitxが起動してMozcに切り替われば何の問題もないのだけど、結構な頻度で「Mozcって表示されるけど日本語入力ができない」状態に陥っていて、手元で試す限りでは原因も(確実な)回避策も見つかっていない。設定が関係している可能性もあるし。

このエントリの前半で記載したように、Fcitxへの切り替えに「半角/全角」キーを使っているのだけど、その時に「Mozc」と表示されるけど英字入力のままになってしまうけど、何回か試すとMozcで処理できるようになっている時があるので、そうなるまで「半角/全角」キーを何回も押して試すという残念な回避方法でしのいでいる。
一旦Mozcに移れば基本的には問題ないので、できるだけこれを保てるように、Mozcで英字を打っておいてF10キーで半角英数に変換するというこちらも残念なワークアラウンド。

追記(2013/11/17)
どうもターミナルから起動したアプリでFcitxが起動できなくて若干困り中。
気休めにQtでの設定をしてみる。
# apt-get install qt4-qtconfig
qtconfigで起動したQt設定ツールの「インターフェース」タブからデフォルトのインプットメソッドを「fcitx」に設定する。これでQtのアプリでもFcitxが使える・・・ようになるのかなぁ。

そいでもって、GTK側のアプリは環境変数GTK_IM_MODULEの値を見ているようで、自分とこの環境だと~/.bashrcに書いてあったので、他とまとめて

export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx

と変更。

[1] キーボードの配列とIMが紐付けられてしまって変更できなくなった。英語配列のキーボードだとmozc使えないらしい。

2013-03-08

使ってないperlの関連パッケージを削除する

Perlプログラマーの方、お元気でしょうか。
普段プログラマーをしておりますが、新人の時にテストツールをシェルで作ってと言われ、テスト結果のログ解析をする必要があったので急ごしらえでperlでログ解析部分を書いて依頼、まったくPerlとは縁のない日々を過ごして参りました。

そんな前段はさておき、プライベートでもPerlのコードを書くことはないし、これからもないだろうなとは思ったものの、今動いているものから完全にPerlを削除をするのは難しかろう点も事実ですので、ディスクの節約の為にPerlで作られてる部分の必要ないところをじゃんじゃん消し抵抗と思います。Debianです。

現状把握。

それではいったいどの程度のPerlで作られているパッケージがインストールされているのか、面倒なのでlibほにゃららperlというパッケージの数を調べてみましょう。

$ dpkg -l | grep -E  lib.*perl | wc -l
 結果
78
うーん。 多い。実際にはdpkgの結果は1パッケージで2行表示されるので39パッケージがインストールされるという事ですが、それでも多い。perl書かへんのに・・・

削除。

全部いっぺんに削除しようとしたらlinux-imageとか削除されそうになったので1つ1つ消していきます。(apt-get remove --purge libほにゃららperlで)
gnome2は使ってない事が前提。

消せたもの

libalgorithm-diff-perl
libalgorithm-diff-xs-perl
libalgorithm-merge-perl
libanyevent-perl
libapt-pkg-perl
libauthen-ntlm-perl
libcairo-perl
libclass-accessor-perl
libconfig-file-perl
libdigest-hmac-perl
libevent-execflow-perl
libevent-perl
libevent-rpc-perl
libfile-fcntllock-perl
libfont-afm-perl
libglib-perl
libgnome2-canvas-perl
libgnome2-perl
libgnome2-vfs-perl
libgtk2-perl
libhtml-form-perl
libhtml-format-perl
libhtml-template-perl
libhttp-daemon-perl
libintl-perl
libio-socket-inet6-perl
libio-string-perl
liblist-moreutils-perl
libmailtools-perl
libmusicbrainz-discid-perl
libpango-perl

libparse-debianchangelog-perl

libperl5.14
libpod-plainer-perl
libregexp-assemble-perl
libsocket6-perl
libsub-name-perl
libtext-charwidth-perl
libtext-unidecode-perl
libtext-wrapi18n-perl
libtie-ixhash-perl
libwebservice-musicbrainz-perl
libxml-libxml-perl
libxml-namespacesupport-perl
libxml-sax-base-perl
libxml-sax-expat-perl
libxml-sax-perl
libxml-simple-perl

libyaml-tiny-perl

消せなかったもの

libclass-isa-perl
libdpkg-perl
libencode-locale-perl
liberror-perl
libfile-copy-recursive-perl
libfile-listing-perl
libhtml-parser-perl
libhtml-tagset-perl
libhtml-tree-perl
libhttp-cookies-perl
libhttp-date-perl
libhttp-message-perl
libhttp-negotiate-perl
libio-socket-ssl-perl
liblocale-gettext-perl
liblwp-mediatypes-perl
liblwp-protocol-https-perl
libnet-dbus-perl
libnet-http-perl
libnet-ssleay-perl
libswitch-perl
libtext-iconv-perl
libtimedate-perl
liburi-perl
libuuid-perl
libwww-perl
libwww-robotrules-perl
libxml-parser-perl
libxml-twig-perl

2013-02-02

partedでGPTのHDDのパーティションを切る

これも雑記。新しいHDDの増設の仕方も。

(番外編)ノードファイルを作る

普通は必要ないのですが、うちの環境は特殊なので(正規の順序で起動しなくなってしまったので)、起動するたびにノードファイルを手動で作っています。
今回も新しく追加したデバイスのノードファイルも作ります。デバイスファイルの場所はdmesgから、最後の引数は/proc/partitionsから持ってきます。
# mknod /dev/sdd b 8 48
# mknod /dev/sdd1 b 8 49

(番外編)景気付けにgdiskでGPTという事にする

これも本当は必要ないかもしれませんが、partedにいう事を聞かせるためにやりました。
gdisk /dev/sdd
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
Creating new GPT entries.
Command (? for help): p
Disk /dev/sdd: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): F37079F4-4B19-4A05-ACC8-124B81FFE2BF
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 5860533101 sectors (2.7 TiB)
Number  Start (sector)    End (sector)  Size       Code  Name
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): p
Disk /dev/sdd: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): A6BEDAB2-1243-44DB-8AE0-0F9DB1E0D6AD
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 5860533101 sectors (2.7 TiB)
Number  Start (sector)    End (sector)  Size       Code  Name
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdd.
The operation has completed successfully.
partedでパーティションを切る

それで、今回増設するHDDは最近の流れに乗ってGPT対応なので、速度が無駄に遅くならないように、4kB境界で使い始めるように設定していきます。

(parted) unit s                                                           
(parted) mkpart primary 2048s -1s                                      
Warning: You requested a partition from 2048s to 5860533167s.          
The closest location we can manage is 2048s to 5860533134s.
Is this still acceptable to you?
Yes/No? y                                                              
(parted) print                                                          
Model: ATA WDC WD30EFRX-68A (scsi)
Disk /dev/sdd: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number  Start  End          Size         File system  Name     Flags
 1      2048s  5860533134s  5860531087s               primary

作成したパーティションをフォーマット
今回はext4で作ります。
# mkfs.ext4 /dev/sdd1
あとはマウントしやすいように/etc/fstabに書いたりして完了。

2013-02-01

S.M.A.R.T値を確認する

今回は小ネタです。というのも、NASのHDDがいつの間にかread onlyでマウントされていたので覚え書き。 Debianの場合、smartmontools[1]パッケージをインストール(GUIで見る場合はgsmartcontrol[2]パッケージがいいようです。
# /usr/sbin/smartctl --all /dev/sdb1
して・・・ずらずらっと出てきて・・・問題ありそうなの。
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   199   199   051    Pre-fail  Always       -       40
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       261
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       228
200 Multi_Zone_Error_Rate   0x0008   200   199   000    Old_age   Offline      -       262
壊れてるやん・・・ ということで、ちょっくら交換します・・・

[1] http://packages.qa.debian.org/s/smartmontools.html
[2] http://packages.qa.debian.org/g/gsmartcontrol.html

2013-01-02

amd64のDebianで32bitのWINEを使う

WINEとは
Wine Is Not Emulatorの略で、端的に説明すると「(i386アーキテクチャで)win32 APIをエミュレートする一連のソフトウェア」です。

昔は
Windowsを使っていたので、その時に使用していたソフトウェアを使いたいという理由から今回使います。というか、wine自体は前から使っているのですが、最近の変更でamd64アーキテクチャでのwineパッケージはデフォルトインストールでは64bit Windowsをエミュレートするようになったので、今回はそんなamd64環境のDebianで32bitのwineを使えるようにする方法を書き残しておきます。(私的メモ)

まだ必要?具体的に何にwine使うの?
個人的に困っているのは、現状のLinux環境ではUDF2.6ファイルシステムのイメージファイルが作れないっぽいので、ImgBurn[1]を使うためにwine使います。
(growisofsでBD-R/BD-REにはイメージを焼くことはできるのですが。)

まずは普通にwineインストール,ImgBurnインストール

# apt-get install wine

ダウンロードしてきたImgBurnのインストーラをwineの引数に指定して実行します。

$ wine SetupImgBurn_2.5.7.0.exe
(インストーラのパスは合わせてください)

これをやると、恐らく32bitのDebian上ではうまいこと行くんですが(最近は確認してないですが)、amd64環境でやると多分次みたいなダイアログが出ます。

i386アーキテクチャを指定してwineをインストール
なので、指示に従ってコマンドをポチポチと。
# dpkg --add-architecture i386
# apt-get update
# apt-get install wine-bin:i386
この状態でインストーラを起動すると(コマンドはさっきと同じ)

起動したよ!やったねたえちゃん!

[1] http://www.imgburn.com/

2012-10-22

お風呂用タブレットとして白ロムARROWS Tab LTE F-01Dを購入〜ICSに更新〜


ICSにアップデートする(SDを使う方法)

http://www.nttdocomo.co.jp/support/utilization/product_update/list/f01d/pc.html

改めて、曰くSDを使う方法でトライ[1]。
要は、571MBのzipをダウンロードして展開したファイルをSDかストレージの直下に置けばいいみたいなので、そうします。
ですが、ここでPCが必要な理由がわかります。
PCからメーカーサイトのアップデートファイルを落とそうとするとForbiddenになるのです!!

アクセス端末と遷移の方法はこんな感じ。


なので、最終的には3.2のF-01DにGoogleドライブ[2]とSaveFile[3]をインストールした上でPCでダウンロードしたファイルをSDの直下に置きました。時間かかりますが・・・

まとめるとこうなります。


そして、通常の方法ではアプデできないみたいなので、F-01Dの電源を切って、正面から向かって音量右を押しながら電源ボタンを長押し、正面上の緑のLEDが点滅したら離します。これでリカバリーに入れるようです。(ファクトリーリセットになるので、手元に取っておきたいデータがある場合はバックアップを取っておきましょう。

アップデートファイルに問題がなければ、ICSにアップデートが行われ(10分くらい?)、自動的に本体が再起動します。失敗している場合はFAILEDと表示されるので、固まっているように見えても放置しておいたほうが良いです。


[1] http://www.nttdocomo.co.jp/support/utilization/product_update/list/f01d/pc.html#p02
[2] https://play.google.com/store/apps/details?id=com.google.android.apps.docs
[3] https://play.google.com/store/apps/details?id=jp.gr.java_conf.laar.savefile