2013-06-30

pdftops にて B5 の PDF を PS へ変換

pdftops にて, B5 サイズの PS へ変換するとき, -paper B5 ではダメ. 以下のようにする.
pdftops -paperw 516 -paperh 729
B5 には, ISO のサイズと JIS のサイズがあり, JIS のサイズを指定しないと, プリンタで正しく処理できないことがあるようだ.

2013-06-29

アクセス統計

このブログのアクセスの統計に, OSについての情報がある. Linux についての記事がほとんどなのだけれど, Windows から閲覧するユーザが多いようだ. Linux の初心者の方が検索してこのページにたどり着くのだろう.

squid http_access の順番

マニュアルには, 複数の http_access にマッチした場合にどのルールが優先されるかが明示されていない. 実際に動作させてみると, 最初にマッチしたルールが適用され, それ以降は適用されないようだ.

マニュアルの例では,

  • 許可されていないポートやメソッドは拒否
  • manager アクセスの処理
  • 許可されたホストなら許可 (この時点で許可されていないポート・メソッドは判定されない)
  • それ以外は全て拒否
  • という順序で判定される.

    Quartus II のコマンドラインにおける操作方法

    コンパイル

    quartus_sh --flow compile project

    JTAG を通してプログラミング

    FPGAへtop.sofを書き込む場合は, 以下のコマンドを使用する. なお, このコマンドはUSB Blasterが1個, FPGAが1個だけ接続されている場合の例.
    quartus_pgm -c 1 -m jtag -o P\;top.sof@1
    なお, USB Blaster を接続した際に, /dev/bus/usb/ 下にある, このディバイスに対応するファイルへのアクセス権を設定しておく必要がある.

    参考

  • Quartus II Scripting Reference Manual
  • RELATED パケットを iptables にて許可するべき?

    iptables にて,
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    という設定をよく見るが, なぜ RELATED も許可するのだろうか? RELATED に該当するパケットがどのようなものか調べてみた.

    以下のコマンドで, LOG を取るようにして, あるルータにおいて1週間ほど監視してみた.

    iptables -I OUTPUT 2 -m state --state RELATED -m limit --limit 3/hour -j LOG

    該当したパケットの例が以下:

    kernel: IN= OUT=eth0 SRC=192.168.0.1 DST=192.168.0.11 LEN=88 TOS=0x00 PREC=0xC0 TTL=64 ID=33428 PROTO=ICMP TYPE=3 CODE=10 [SRC=192.168.0.11 DST=127.22.2.73 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=42348 DF PROTO=TCP SPT=40290 DPT=32137 WINDOW=14600 RES=0x00 SYN URGP=0 ]
    
    どうやら, ICMP のパケットが該当することが多いようだ.
    PROTO=ICMP TYPE=3 CODE=10396 パケット送信先ホストは管理者によって禁止されている.
    PROTO=ICMP TYPE=3 CODE=122 パケットホストに到達できなかった.
    合計418 パケット
    ログに残ったパケットは上記の2種類のみで, その他のパケットは見つからなかった. なお, CODE=10 が多いのは, このルータでのファイアウォール設定が厳しいためかもしれない.

    RELATED パケットについては, ICMP のみを許可するほうが良いのかもしれない.

    2013-06-21

    cdrecord による音楽CDの作成

    cdrecord というツールによって音楽CD (CDDA) を作成することができる.

    wave ファイルを用意した後, cdrecord を実行する. mp3 から wave を作成し, CDDA を作成するまでのコマンド例を以下に示す.

    $ mkdir /tmp/cdda
    $ for i in *.mp3 ; do ( ffmpeg -i "$i" -ar 44100 /tmp/cdda/"${i/mp3/wav}" &); done
    $ cd /tmp/cdda
    $ cdrecord dev=/dev/dvd speed=24 -v -audio -pad -dao *.wav
    
    cdrecordは, rootで実行する必要はない. cdromグループに入れておけば良い.
    サンプリングレートを44.1kHzにするために, -ar 44100オプションをつける.

    以下のページを参考にした.
    CDRTOOLSのコマンド例

    iptables にて OS ごとに異なるルールを適用

    iptables は, Linux でのルールベースのパケットフィルタツールである. パケット毎にTCPヘッダやペイロードにおいて条件を検査し, 条件にマッチするものに操作 (破棄, 拒否, 許可など) を加えることができる. ポート番号や送信元・送信先IPアドレスによる条件を作成することが多いが, ここでは, OS毎に条件を変える方法を紹介したい. 例えば, 以下のような使用方法が考えられる.
    • ウイルス感染が多いと言われる Windows からのパケットのみを除去する.
    • Linux 上でのみ動作するソフトが使用するポートを開ける.
    • Windows へは DHCP にてプロキシを通知できるので80番ポートは塞ぎ, その他のOSには80番ポートを開ける.

    今回使用するOSの判別方法は, TTL によるものである. ユーザやソフトウェアが細工をすることでこの判別を回避することは可能であることには注意していただきたい. TTL による OS 判別はこのページに記されている; ping(2)――設定や構成確認にも使える. 以下の表の様にして判別できる.

    1-64Linux
    65-128Windows
    129-255Mac OS X, Solaris, BSD など (iPhone はここに含まれる)

    iptables には, ttl と呼ばれるモジュールがあり, 例えば FORWARD を OS 毎に分ける場合は, 以下のように設定する.

    -A FORWARD -m ttl --ttl-lt  65 -g FORWARD-linux
    -A FORWARD -m ttl --ttl-lt 129 -g FORWARD-windows
    -A FORWARD                     -g FORWARD-mac
    

    2013-06-18

    RHEL6 で google-chrome のアップデートができなくなった

    どうやら, google-chrome については, 今後は RHEL6 (とそのクローン) のサポートがされないらしい.
    $ sudo yum update google-chrome-stable 
    Loaded plugins: fastestmirror, security
    Loading mirror speeds from cached hostfile
     * sl: ftp1.scientificlinux.org
     * sl-security: ftp1.scientificlinux.org
    Setting up Update Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package google-chrome-stable.x86_64 0:27.0.1453.110-202711 will be updated
    ---> Package google-chrome-stable.x86_64 0:28.0.1500.45-205727 will be an update
    --> Processing Dependency: libstdc++.so.6(GLIBCXX_3.4.15)(64bit) for package: google-chrome-stable-28.0.1500.45-205727.x86_64
    --> Finished Dependency Resolution
    Error: Package: google-chrome-stable-28.0.1500.45-205727.x86_64 (google-chrome)
               Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
     You could try using --skip-broken to work around the problem
     You could try running: rpm -Va --nofiles --nodigest
    
  • オブソリートなOSだって?!… Google ChromeはなぜRHEL 6のサポートをやめたのか
  • Jan Wildeboer の投稿
  • 2013-06-29 追記.
    Install Chromium (with Pepper Flash) on CentOS/Red Hat (RHEL) 6.4 というページが見つかった. RHEL 向けに, Chromium の RPM を作ってくれた人がいるようだ. ここかれ提供されている chromium も, /opt/chromium/ にインストールするようだ. google-chrome-stable をインストールしたままでも依存関係などは特に問題無さそう. ユーザ毎の設定ファイルがどのように扱われるのかが気になる所だったが, 設定ファイルは ~/.config/chromium/ へ作成するようなので, 気軽に試してみれば良さそうだ.
    インストール方法を説明しておく.

    $ wget http://people.centos.org/hughesjr/chromium/6/chromium-el6.repo
    # cp chromium-el6.repo /etc/yum.repos.d/
    # yum install chromium
    
    chromium では, PDFを描画するエンジンが含まれていない. これまで google-chrome を軽いPDFビュワーとしても使っていたので, 残念だ.

    2013-06-12

    gnome-terminal のキーボードショートカット

    gnome-terminal を開いたままキーボードの掃除をしていたら, キーボードショートカットが変わってしまった. o (オー) を押すと (shift や alt, ctrl を押さなくても), ヘルプが表示される. o を入力できない. どうやって直すのだろう...

    ここによると, 設定ファイルを削除すれば良いらしい.

    cd ~/.gconf/apps/gnome-terminal/
    rm -r keybindings/

    2013-06-06

    EXT4/LVM をオンラインでサイズ変更

    EXT4 になって, オンライン (マウントしたまま) のリサイズが出来るようになったようだ. EXT3 でもできたらしいが, dangerous と言われていた. 以下に, 例を示す. この例では, Scientific Linux 6 (CentOS6 同様, RHEL6 のクローン) を使用しており, もともと 16GB しか /var に確保していなかったが, 32GB に拡張した. LVM の ボリュームグループにはまだ空きがあったので, lvextend で論理ボリュームを拡張し, resize2fs にて EXT4 のサイズを変更した.
    $ sudo lvextend -L32G /dev/mapper/VolGroup00-var 
      Extending logical volume var to 32.00 GiB
      Logical volume var successfully resized
    
    $ sudo resize2fs -p /dev/mapper/VolGroup00-var
    resize2fs 1.41.12 (17-May-2010)
    Filesystem at /dev/mapper/VolGroup00-var is mounted on /var; on-line resizing required
    old desc_blocks = 1, new_desc_blocks = 2
    Performing an on-line resize of /dev/mapper/VolGroup00-var to 8388608 (4k) blocks.
    The filesystem on /dev/mapper/VolGroup00-var is now 8388608 blocks long.
    
    resize2fs は, 特にオプションを指定しなくても, オンラインであることを感知して, オンラインリサイズを実行するようだ. -p は, 進捗をバーで表示するオプション. なお, resize2fs が動いている間に df を実行すると, その拡張途中のサイズが表示された.

    ext4 ファイルシステムのサイズを変更する

    PingコマンドによるIPアドレス重複の調査

    同一のIPアドレスが複数のマシンに重複して割り当てられてしまうという事故が起こった場合の対処方法を説明する.

    以下では, 192.168.0.100 が重複して割り当てられている場合を例にして, RHEL 6 にて調査する方法を説明する.

    1. まず, MACアドレスを特定する.
      $ ping -c 1 192.168.0.100
      $ arp 192.168.0.100
      
      この時に出力されるMACアドレス (HWaddress) が時とともに (数分〜) 別のものに変わる. このMACアドレス (偽物の方) をメモする.
      たいていの機器ではこのMACアドレスがラベルに書かれているが, 機器がたくさんある場合や, 探しまわっても見つからないこともある. その時は, 以下の手順に進む.
    2. 偽物のMACアドレスを, arp テーブルに設定する. (ここでは, 01:23:45:67:89:ab とする.)
      # arp -s 192.168.0.100 01:23:45:67:89:ab
      この代わりに, 本物のMACアドレスをもったマシンをネットワークから切り離しても良い.
    3. ping を送る. 応答が来たら音が鳴るように, tr へパイプする.
      $ ping 192.168.0.100 | tr : '\a'
      この時点でもし音がならない場合は,
      # modprobe pcspkr
      を実行してから, もう一度試す.
    4. ハブにおいて, 音と同期して点滅するポートを探す. もしデータ転送量が多いなどで見つけにくい場合は, ハブにつながっているLANケーブルを1本ずつ抜き差しし, 音が鳴らなくなるものを探す.

    2013-06-04

    私のlatexmkrc

    latexmk というプログラムを使うと, コマンドひとつで LaTeX のソースファイルのコンパイル, PDF の作成などを行うことができる. 実行してみると *.fdb_latexmk というファイルが生成されていて MD5 が書かれていたので, 中間ファイルや依存ファイルの MD5 が変わったかどうかを見てコンパイルするかどうか, もう一度コンパイルし直すかどうかを判断する.

    作業ディレクトリにlatexmkrcというファイルを用意しておくと, 使用するコマンドをカスタマイズできる. 以下に私が使用しているlatexmkrcの例を示す.

    #!/usr/bin/env perl
    
    $latex  = 'platex -halt-on-error %O %S';
    $bibtex  = 'pbibtex %O %B';
    $dvipdf  = 'dvipdfmx %O %S';
    $pdf_mode = 3;
    
    $ENV{"LANG"} = "ja_JP.UTF-8";
    
  • 日本語を書くので, platex, pbibtex, dvipdfmxを使用する. これを上記の様に設定する.
  • pdf_modeを3に設定することで, DVIPDFによりPDFを生成する.
  • 念の為, 環境変数LANGをja_JP.UTF-8に設定しておく.
  • その他の設定は, latexmkの中身 (perlで書かれている) を読んで調べれば良い. なお, latex ではなく platex を使用したい場合は,
    latexmk -latex=platex
    
    とすれば良いようだ.

    また, 英語で論文などを書くときには, 以下のlatexmkrcを使っている.

    #!/usr/bin/env perl
    
    $latex  = 'latex -halt-on-error %O %S';
    $bibtex  = 'bibtex %O %B';
    $dvipdf  = 'dvipdfmx %O %S';
    $pdf_mode = 3;