mumumu の日記

Development, Translation, daily life, thoughts, and so on.

2014-08-09 23:37:00 +0900

dpkg related command

最近 dpkg コマンドでパッケージ自体のデバッグをすることが多くなった。[Debian|Ubuntu] のアーカイブとはサポートポリシーが異なるアーカイブ のパッケージを採用することで、Pin Priority を設定する機会が増えたからだ。

Debian のパッケージには優先度(Priority) が設定されている。パッケージを apt-get コマンドなどに指定した場合、複数のインストール候補がある場合、優先度が高いモノがインストールされる。よって、、この優先度を操作することで、強制的にダウングレードを行わせたり、特定の条件に当てはまるパッケージのインストールを禁止することすら可能である。

stable や unstable や testing などの ディストリビューションを指定することはまずない (本番環境ではstableでしょJK的な) ので、優先度を操作することが多い。

ここでは、パッケージ単体の情報を扱うのにいくつか重宝しているコマンドがあるので、それをメモしておく。

dpkg

dpkg コマンドは、パッケージを扱う基本コマンドである。パッケージのインストールや情報の表示などを行う。dpkg は deb ファイルを扱う。

ちなみに、これを内部的に使うことで apt は作られている。apt関連コマンド (apt-get, apt-cache ...etc) はそれをラップし、パッケージ名だけで扱えるようにしてくれ、依存関係の整理や debファイルの取得をネットワークから行い、dpkg に渡してくれる。

dpkg -l

インストール済みのパッケージの一覧を表示する。これを grep することで、特定のパッケージがインストールされているかを知るのによく使う

dpkg -L

パッケージ名を与えることで、インストールされたパッケージに含まれるファイル一覧を表示する。rpm -ql に相当する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ dpkg -L /usr/bin/sg

/.
/bin
/bin/login
/bin/su
/etc
/etc/login.defs
/etc/pam.d
/etc/pam.d/login
/etc/pam.d/su
/etc/securetty
/usr
/usr/bin
/usr/bin/faillog
/usr/bin/lastlog

...

dpkg -S

ファイルのフルパスを与えることで、そのファイルがどのパッケージに属しているかを表示してくれる。自分はこれは apt-file コマンドでしかこれまでできないものだと思っていたが、インストール済みのファイルであれば dpkg でできたらしい(´ー`; )

1
2
$ dpkg -S /usr/bin/which
debianutils: /usr/bin/which

逆に、インストールされていないファイルのパッケージを検索したいなら、apt-file とかが便利なようだ。

dpkg -i

dpkg は deb ファイルを扱う。それを指定して直接パッケージをインストールしてくれる。但し、依存関係を管理してくれるわけではないので、それが管理できていない、またはよくわからない状態で使うべきではない

apt

自分は一般ユーザなので、apt 関連コマンドを欠かすことは出来ない。けど、dpkg だとイマイチな出力をしない部分とかを補うのに使っているというのが正直なところか(*゜ー゜)

apt-cache show

パッケージ名を与えることで、その詳細を表示してくれる。apt show や dpkg -s でもほぼ同様の情報が見られたりもするが、日本語で詳細情報の説明が見れたりするので、自分はこれを使っている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ apt-cache show build-essential 
Package: build-essential
Priority: optional
Section: devel
Installed-Size: 37
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Matthias Klose <doko@debian.org>
Architecture: amd64
Version: 11.6ubuntu6
Depends: libc6-dev | libc-dev, gcc (>= 4:4.4.3), g++ (>= 4:4.4.3), make, dpkg-dev (>= 1.13.5)
Filename: pool/main/b/build-essential/build-essential_11.6ubuntu6_amd64.deb
Size: 4838
MD5sum: 6fa3d082885a7440d512236685cd24fd
SHA1: 488c10084cd20cafec7f8b917e752bad45a4f983
SHA256: 50c00d2da704e131855abda2f823f3ac2589ab1579f511ccd005be421f0a3954
Description-ja: build-essential なパッケージの一覧情報
 Debian パッケージを構築するつもりがないのであれば、本パッケージは不要です。 1.14.18 以降の dpkg では、Debian
 パッケージの構築に本パッケージは必須です。
 .

...

apt-cache policy

これがパッケージが衝突したときや特定のパッケージのバージョンが意図したモノにならない場合などに特によく使う。
パッケージ名を与えない場合は、各パッケージリポジトリ毎の優先度が表示される。

1
2
3
4
5
6
7
8
9
$ apt-cache policy 
パッケージファイル:
 100 /var/lib/dpkg/status
     release a=now
 500 http://dl.google.com/linux/chrome/deb/ stable/main i386 Packages
     release v=1.0,o=Google, Inc.,a=stable,n=stable,l=Google,c=main
     origin dl.google.com

...

パッケージ名を与えることで、インストール候補とそれぞれに与えられる優先度が表示される。

1
2
3
4
5
6
7
8
$ apt-cache policy build-essential
build-essential:
  インストールされているバージョン: 11.6ubuntu6
  候補:               11.6ubuntu6
  バージョンテーブル:
 `***` 11.6ubuntu6 0
        500 http://jp.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
        100 /var/lib/dpkg/status

apt source

パッケージ名を与えることで、パッケージのソースパッケージをダウンロードできる。 後述する build-dep と組み合わせると便利。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ apt source login

 apt source login
パッケージリストを読み込んでいます... 完了
'login' の代わりに 'shadow' をソースパッケージとして選出しています
注意: 'shadow' パッケージは以下の場所の 'Git' バージョン制御システムで保守されています:
https://anonscm.debian.org/git/pkg-shadow/shadow.git
パッケージの最新の (まだリリースされていないかもしれない) 更新を取得するには、
git clone https://anonscm.debian.org/git/pkg-shadow/shadow.git
を使用してください。
1,818 kB のソースアーカイブを取得する必要があります。
取得:1 http://archive.ubuntu.com/ubuntu bionic-updates/main shadow 1:4.5-1ubuntu2 (dsc) [2,426 B]
取得:2 http://archive.ubuntu.com/ubuntu bionic-updates/main shadow 1:4.5-1ubuntu2 (tar) [1,345 kB]
取得:3 http://archive.ubuntu.com/ubuntu bionic-updates/main shadow 1:4.5-1ubuntu2 (diff) [471 kB]
1,818 kB を 8秒 で取得しました (240 kB/s)

dpkg-source: info: extracting shadow in shadow-4.5

...

apt build-dep

パッケージ名を与えることで、そのソースパッケージをビルドするのに必要なパッケージがダウンロードできる

[ Update October 16th 4:23 JST by m ]

dpkg -L apt source apt build-dep を追加しました

2014-07-05 22:22:00 +0900

disk partition over 2TB

ストレージって普段意識せずに使うモノだから、ハードウェア障害とかでいざ交換とか再初期化とかいう話になると、オペレーションを思い出すのに一瞬うっとなることが多い。今日もそんな日だった。

ちょっと重要なサーバのストレージが死にかけたので、代替機を作ろうという話になった。ストレージは 480GB のSSD と Western Digital の 3TB。/dev/sda, /dev/sdb に割り当てられているのはわかっている。どちらがSSDで、どちらがHDDか?

今までは dmesg とかを目grepしてどちらが何であるかを見ていた。なんとも原始的で情けない話だ。
けれども、hdparm 使えば簡単だということを教わった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nn@op3:~$ sudo hdparm -i /dev/sda

/dev/sda:

 Model=WDC WD30EZRX-00AZ6B0, FwRev=80.00A80, SerialNo=WD-WCC070146118
 Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=5860533168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=no WriteCache=enabled
 Drive conforms to: Unspecified:  ATA/ATAPI-1,2,3,4,5,6,7

 * signifies the current active mode

今回は /dev/sda に何故か HDD が割り当てられていることがわかった。パーティーションを一つだけ切って、それに全ての容量を割り当て、ext4 でフォーマットしようぜ、という話になった。自分は fdisk でこれまでパーティーションを切ることに慣れていたので、fdiskでパーティーションを切ったところ、以下のように2TB分しか切られない。なんでだ。

1
/dev/sda1                2.0T  199M  1.9T   1% /hoge

と思ったら、Linux の fdisk は GUIDパーティーションテーブル(GPT) に対応していないので、 2TiB 以上のパーティーションは作れないようだ。

1
2
3
4
5
6
7
8
9
10
11
$ sudo parted /dev/sda
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) print
Model: ATA WDC WD30EZRX-00A (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
1      1049kB  3001GB  3001GB               primary

これで 2TB 以上のディスクを普通に扱えるようになった。これまでも2TB以上のディスクに普通に fdisk を使ってきた自分が恥ずかしいわ(´ー`;)

2014-05-12 13:20:00 +0900

My DIY Server Spec final

http://mumumu.github.io/blog/2014/05/02/my-diy-server-spec-2/

紆余曲折あった末、最終的な構成は以下の通り。
SSD と HDD は予備的なもの。はじめに予想してたモノより随分お高くはなったけど、
流石にこれ以上おカネを使うことはない(´ー`; )

パーツ項目 品名 価格
CPU Xeon E5-2618Lv2 (2.0G) 6core/12thread TDP50W 69,929
マザーボード GIGABYTE GA-6PXSV4 41,999
RAM Kingston DDR3-1600(PC3-12800) ECC Registered DIMM KVR16R11D4/16 2枚 43,390
SSD Samsung SSD840EVO 250GB MZ-7TE250B/IT 14,780
HDD Seagate ST3000DM001 3TB SATA 12,004
ケース Coolermaster Silencio 652 18,900
電源 玄人志向 SSシリーズ 350W 80PLUS GOLD KRPW-SS350W/90+ 6,234
CPUクーラー Dynatron R24 5,250
合計 212,486

2014-05-12 11:25:00 +0900

Disable Akonadi

http://userbase.kde.org/Akonadi#Disabling_the_Akonadi_subsystem

Kubuntu 14.04 LTS には KDE 4.13 が入っているが、このバージョンから有効になっているデスクトップ検索がどうにも糞で、起動して10分くらいCPUを毎回占有してくれる。

業を煮やして無効にした。以下のコマンドを実行 (rootである必要はない) して、上のリンクにあるとおり、カレンダーのイベント表示を無効にすればよい。実はこのやり方は Akonadi サブシステムを無効にするものだが、Akonadi を使っている機能はどれも俺は使ってないので一気に無効にしたった(´ー`; )

1
$ akonadictl stop

カレンダーのイベント表示は以下のように "Display events" となっているので、そのチェックを外す。

2014-05-07 00:15:00 +0900

Narrow ILM v.s Square ILM

http://www.servethehome.com/narrow-ilm-square-ilm-lga2011-heatsink-differences/

自作をやった人なら御存知かもしれないが、Intel な CPU をマザーボードのCPUソケットに固定するための部品を ILM (Independent Loading Mechanism) という。手元にあるマザーボードだと、以下の長方形の部分になる。レバーを上げてCPUをおいて、カバーを付けてレバーを下げると固定されるという具合だ。

今回自分が購入したマザーボードの CPUソケットは LGA 2011 である。LGA 2011 の ILM には二つの種類がある。Square ILM と Narrow ILM だ。

a) Square ILM
 - サイズ 80x80mm の正方形
 - コンシューマー向けのマザーボードのソケットのほとんどはこれ
b) Narrow ILM
 - サイズ 56x94mm
 - マザーボードに載せる機能が多いため、ヒートシンクの面積を制限する理由があるサーバ向けのマザーボードに採用例が多い

これらの何が違うかというと、ソケットの上に載せることになるヒートシンクのサイズである。ほとんどの人が自作に使うマザーボードについては、Square ILM が前提になっており、ヒートシンクもそれを前提にして LGA 2011 対応とのみ謳っている。これがフツーのヒートシンクである。

だが、今回自分が購入した GIGABYTE GA-6PXSV4 については、Narrow ILM が採用されていたため、フツーのヒートシンクが付かなかった。。 Katana4 というクーラーを買っていたのだが、これも Square ILM を前提にしていたのである。

Narrow ILM はこのような性格から情報が少ない上、国内で Narrow ILM 対応と謳って売っているヒートシンクも少ない傾向にある。オリオで売っている Noctua のやつ くらいだろうか。また、機能を詰め込んだマザーボードに採用されているため、推奨するヒートシンクの面積すら指定されているマザーボードだとますます適合品が少なくなる傾向にある。

自分が買った Gigabyte GA-6PXSV4 だと、「Recommended cooling device dimension: 70x106mm」となっていた ため 泣く泣くそれに適合する Dynatron のヒートシンク を発注するハメになった。

まとめ

・ Supermicro とかのサーバ向けマザーボードでは、ILM のサイズに注意
・ ILM に適合するヒートシンクを発注しよう! 但しコンシューマー向けマザーボードでは気にする必要はない。
・ 参考文献
 - Narrow ILM v. Square ILM – LGA2011 Heatsink Differences
 - Xeon E5-1600/2600/4600 v1 and v2 Thermal / Mechanical Design Guide(PDF)