Archive

Archive for 2014年1月

crontabで%(パーセント)を使うとエラーが起こる件

crontabの中にdateコマンドを書こうとしたらエラーになった話。

やろうとしたこと:
echo '定期post" `date +%R`

起こったこと:
/bin/sh: -c: 行 0: 一致する `” を探索中に予期しないファイル終了 (EOF) です
/bin/sh: -c: 行 1: 構文エラー: 予期しないファイル終了 (EOF) です

まあ、ちゃんとman 5 crontabを読めよって話です。

以下はFedoraのcrontab(5)からの引用です。

その行のコマンド部 (改行文字または % 文字まで) が /bin/sh
(またはその crontab ファイルの SHELL 環境変数で指定されたシェル) によって実行される。 コマンド中にパーセント記号 (%) が
バックスラッシュ (\) によってエスケープされずに置かれていると、 改行文字に置き換えられ、最初に現れた % 以降の全てのデータは
標準入力としてコマンドに送られる。

ということで、
echo '定期post" `date +%R`
の解釈は
echo '定期post" `date +
R`

となるわけです。

せいかい:
echo '定期post" `date +\%R`

カテゴリー:GNU/Linux

TeXLiveにgnuplotが出力したepsを食わせると左下にずれる

2014/1/22 12:50訂正:この記事の後半の内容は大嘘です。
以下の現象はgraphicxをusepackageするときにdvipdfmxオプションを指定しなかったために発生していたものでした。
参考:http://d.hatena.ne.jp/zrbabbler/20140121/1390313675

普通に入れるとこんな感じにずれます。
texlive

こんな感じでずれたら\usepackage[dvipdfmx]{graphicx}になっているかを確認しましょう。

以下、大嘘です

どうも、この現象はTeXLiveのどこかがBoundingBoxの左下を正しく認識しないことからきている気がします。
というのも、BoundingBoxの左下数値が0 0となっているとこの現象は発生しません。

対症療法的な方法なのであまり好きではないのですが、生成されたBoundingBoxの数値の頭2つを半分にしてやると解決します。

%%BoundingBox 50 50 410 302
であれば、
%%BoundingBox 25 25 410 302
とするとちゃんと中央に表示されているように見えます。ただし、TeXLive以外の環境でpdfを作った場合の結果はお察しください。

カテゴリー:GNU/Linux

emobileのGL10PはLinuxでもUSB接続に対応できる

GP02ではusb_modeswitchが必要だったのですが、GL10Pは接続したらすぐにusb0が出現してNIC扱いされていました。
検証はFedora20ですが他でもたぶん大丈夫だと思います。

(前回GP02を何の設定もなく自動認識したマシンと同一なので追加パッケージが必要かもしれません。調査します。)

追記 2014/1/14 18:20
GP02をusb_modeswitchしないと認識しないマシンで試してもやはり自動でNIC扱いしてもらえました。
udevさんのせいで名前がenp0s29u1u1とかになってますが。

カテゴリー:GNU/Linux

USBメモリからブート不可能なマシンをごり押しでブートする

2014年1月7日 1件のコメント

問:HDDが故障して交換できないノートPCを起動したい。どのようにすれば良いか。ただし、以下の制約がある。
・FDDエミュレーション、HDDエミュレーションを問わず、USBメモリから直接ブートすることはできない。
・BIOSはUSBメモリを認識しない。
・ハードディスクは完全に故障しており、いかなる用途にも使用できない。
・ハードディスクを交換することはできない。
・光学メディアは存在しない。
・内蔵・外付けを問わずフロッピードライブは存在しない。
・純粋なBIOSを持ち、UEFIは存在しない。

解:PXEを使用し、grubをtftpでロードしてUSBメモリを認識させ、USBメモリ内のgrubをチェインロードし、USBメモリ内のlinuxをロードした。

というわけで手順はこちら。特に記載がなければすべて母艦側での操作。
1. tftpサーバーのセットアップ

# yum install tftp-server

依存関係でxinetdが入ります。
/etc/xinetd.d/tftpでdisabled=noに設定。
iptablesで69/udpをACCEPTするように設定。

2. dhcpサーバーの設定
既存のdhcpサーバーの設定を一部変更する。追加したエントリはこちら。

Host (ホスト名) {
hardware ethernet (macアドレス);
fixed-address 192.168.1.199(起動するマシンのIPアドレス);
filename "/grldr";
next-server 192.168.1.137(tftpサーバーのIPアドレス);
}

3. grub4dosをダウンロード。そのうち、grldrを/var/lib/tftpboot/以下にコピー。
本来grub2-mkimageで同様のイメージを作成できるはずですが、なぜかfedora19の環境にpxecmd.modが存在しないためイメージの作成ができません。
pxe.modだけを組み込んでgrub2-mkimageしたところ、disk ‘pxe’ not foundのエラーが発生し、grub rescueコンソールに落ちてしまいました。

4. /var/lib/tftpboot/menu.lst/以下の設定

# mkdir /var/lib/tftpboot/menu.lst

PXEで起動した場合、grubはtftpサーバー上のmenu.lstディレクトリ(ファイルではありません!)以下のファイルを特定の順番で参照します。
順序はpxelinuxの設定ファイルの命名規則と同様です。
今回は特定1台を起動したいので、一番上の01-(MACアドレスをハイフン区切りしたもの)を採用します。
中身はこちら。hd0として認識されるusbメモリのMBRをチェインロードします。

default 0
timeout 20

title chainloader
chainloader (hd0)+1
rootnoverify (hd0)

5. USBメモリに通常通り適当なOSをインストール

この状態でネットワークブートするとtftpでサーバー上のgrubが読み込まれ、続けてUSBメモリ内のgrubが読み込まれ、最後にカーネルがロードされます。

6. オチ
USBメモリにScientific Linux 6.5を入れて起動→「お前のマシンPAE対応してねーから起動できねーよバーカ(意訳)」

カテゴリー:GNU/Linux