FreeBSD in USB memory (2)

xtermで日本語表示

前回はIPv6の検証の為に、FreeBSDをUSB memoryに焼いた。それをdebianなマシンに挿して、にわかなFreeBSD機にした。IPv6でアクセスするとポイントが付いたり亀さんダンスを堪能して、目的達成。このままUSBメモリーをうっちゃってもいいんだけど、それじゃ ちと もったいない。少し遊んでみる。

xtermで日本語表示出来ないのではw3mと言う宝のブラウザーの持ち腐れ。なんとかxtermで使ってみたい。で、いきあたりばったりに、xtermの長ったらしいmanを斜め読み。

utf-8をサポートしてるらしい。って事は日本語表示に脈が有るって事ですかね。適当に xterm -r -wc しておいて、小さいフォントを大きくしてみる。そう、端末内で、Ctl + right mouse する。出てくるメニューから、Largeフォントを選んだら、偶然にも日本語が表示された。それ以外のフォントサイズでは、日本語文字が、冷や奴な豆腐文字になる。こんな事って有り?

後は、これを恒久的になるようにすればいいな。ぐぐったら、

sakae@fb:~ $ cat .Xresources
xterm*font:     *-fixed-*-*-*-18-*

こんなリソースファイルを作って、.xinitrcで、xrdb ~/.Xresources しろとな。マージしてしまう方法もあるらしいけど、きちんと記録しておく事にした。

アルファベットと日本語の文字バランスに難が有るけど、まあ許せる範囲かな。これで勝手知ったるw3mが使えるようになった。

mlterm

ふと昔の事を思い出してしまった。mltermと言う強力な端末アプリが有る事を。今も有ったので入れてみた。xtermを無理して使う事無いよと、CJKの人たちは思っているんだな。そう、東南アジア向けのありがたーい端末なのさ。

firefox向けにさざなみフォントを入れてるけど、何か一つ、きちんとした日本語フォントを入れておいた方が、設定が楽かな。

mltermを起動したら、すかさず w3m https://www.google.co.jp して、日本語を表示させる。場合によっては豆腐文字になってるかも知れないけど、焦る事は無い。表示画面にカーソルを置いて、Ctl + mouse right するんだ。そうすると、設定画面が出てくる。文字コードはUTF8を指定。フォント類は、積極的に選んでもよい。

フォントの見本が出てくるけど、残念な事にアルファベット文字だけ。そこで、役に立つのが、先程起動したぐぐる様からの日本語。applayボタンを押すと、そのフォントが適用されるんで、佳きフォントを見つけるのさ。Xftとかを選んだり、フォントサイズを変更したりで、豆腐が消えて綺麗な日本語が表示されたりする。これでよしとなったら、その設定をsaveすればよい。

設定には個人差が有るので、何とも言えないけど、一例を挙げておく(vbox上の例)

[sakae@fb ~]$ cat .mlterm/main
fg_color = #fc7bf2fff2ff
bg_color = #0bd004b404b4
use_auto_detect = false
auto_detect_encodings = UTF-8,EUC-JP,SJIS
fontsize = 18
type_engine = xcore
geometry = 80x36
bel_mode = visual
scrollbar_mode = right

フォントは難し過ぎて、よくわからんってのが本音です。

with Linux

つらつらと HandBookを見ていたら 21.2. Linux® File Systems こんなのに出会った。これが出来れば、DebianのHDDにたっぷり入れてるファイルを参照出来るぞ。200GのHDDを満たすべく、せっせとソース・ファイルを溜め込んでいますからねぇ。まあ、ファイルサーバーって所かな。

丸ごとDebianなHDDは、FreeBSDからどんな風に認識されているのだろう? ハードに愛を注ぐFreeBSDのdmesgを確認してみる(リナのそれは糞dmsgですよ)。

ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <HITACHI HTS545025B9A300 PB2ZC61H> ATA8-ACS SATA 2.x device
ada0: Serial Number 091026PB42041SGY80YB
ada0: 300.000MB/s transfers (SATA 2.x, UDMA5, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 238475MB (488397168 512 byte sectors)

ちゃんとプロービングしてるね。リナだと、特製何とかコマンドとか言うのを使う必要が有るらしいけど、そんなの無駄の極みと思うぞ(まあ、リナも使ってるんだから、悪口は控え目にね)。これが分かれば、後は簡単。

root@fb:~ # kldload ext2fs
root@fb:~ # mount -t ext2fs /dev/ada0s1 /mnt

よく使うなら、モジュールを起動時にロードしておけ( ext2fs_load="YES" into /boot/loader.conf)。それから、マウントの方は、/etc/fstabに記入だな。

FreeBSD側からdebianなHDDの自Home内にファイルをcpしようとしたら、パーミションエラー。そりゃそうだわな。uidが違うからね。強引にroot権限でcpしたら、通り道のdirの持ち主まで書き換わってしまった。

debianでオペレーションすると、自Home内にて書き込み不可になったぞ。元に戻すの面倒くさかった。debian側にFreeBSDと同一のuidを持ったアカウントを作っておくべきだな。そしてcpは、そのアカウントだけに対して行う。通常は参照だけにしておけば、まあ安心かな。

wlan

もう一発、dmesgのネタ

iwn0: <Intel WiFi Link 5100> mem 0xf2200000-0xf2201fff irq 19 at device 0.0 on pci2
wlan0: Ethernet address: 00:24:d6:be:fe:ed
iwn0: iwn_read_firmware: ucode rev=0x08530501
wlan0: link state changed to UP

こんな記録が出てる。 iwn_read_firmware って何よ? /boot/firmwareってdirが有るので、その中に詰まってるかと思ったけど、dir内は空。もうひとつの疑問は、Debian同様のスピードが出てる事。OpenBSDとは雲泥の差だ。何か秘密が有るの?

[sakae@fb /boot/kernel]$ ls -l if_iw*
-r-xr-xr-x  2 root  wheel  114016 Apr 29 06:48 if_iwi.ko*
-r-xr-xr-x  2 root  wheel  226864 Apr 29 06:48 if_iwm.ko*
-r-xr-xr-x  2 root  wheel  167416 Apr 29 06:48 if_iwn.ko*

無線LAN用のカーネルモジュールが堂々と存在してる。FreeBSD軍団がソースから作り上げたものだな。

sys/dev/iwn/if_iwn.c

iwn_read_firmware(struct iwn_softc *sc)
{
	/* Read firmware image from filesystem. */
	sc->fw_fp = firmware_get(sc->fwname);
	if (sc->fw_fp == NULL) {
		device_printf(sc->sc_dev, "%s: could not read firmware %s\n",
		    __func__, sc->fwname);
		IWN_LOCK(sc);
		return EINVAL;
	}
          :
	device_printf(sc->sc_dev, "%s: ucode rev=0x%08x\n", __func__, sc->ucode_rev);

冒頭のクレジット。インテルさんの協力が有ったのが明確だ。

/*-
 * Copyright (c) 2007-2009 Damien Bergamini <damien.bergamini@free.fr>
 * Copyright (c) 2008 Benjamin Close <benjsc@FreeBSD.org>
 * Copyright (c) 2008 Sam Leffler, Errno Consulting
 * Copyright (c) 2011 Intel Corporation
 * Copyright (c) 2013 Cedric GROSS <c.gross@kreiz-it.fr>
 * Copyright (c) 2013 Adrian Chadd <adrian@FreeBSD.org>

方や、OpenBSDの同名ファイルではどうなっているか? sys/dev/pci/if_iwn.c

/*	$OpenBSD: if_iwn.c,v 1.219 2019/10/09 09:21:45 tobhe Exp $	*/

/*-
 * Copyright (c) 2007-2010 Damien Bergamini <damien.bergamini@free.fr>

原本は同じものを使用してるけど、独自に開発してるんですなあ。あくまでも、メーカーの制約を受けたく無いって言う、意地が伺える。自分達だけで開発したものだから、色々なシガラミから逃れられる。これを優先したのでしょう。

pkg on FreeBSD

インストール時にお世話になったpkgってコマンド、でびあん風だと、apt installね。FreeBSDではどうなってるか当たってみるか。昔は、確かperlで書かれていて、非常に遅かったけど、今はストレスなく使える(USB相手を除く)。

そして、どんなパッケージがインストールされてるかって情報が、/var/db/pkg/ にテキストで保持されてたんだけど、それも様変わりしてる。今は、

sakae@debian:~/FB/pkg$ ls -l
total 82836
-rw-r--r-- 1 sakae sakae      158 Aug  9 05:56 FreeBSD.meta
-rw-r--r-- 1 sakae sakae 26861568 Aug  9 05:56 local.sqlite
-rw-r--r-- 1 sakae sakae 51548160 Aug  9 05:56 repo-FreeBSD.sqlite
-r--r--r-- 1 sakae sakae  6407727 Aug  9 05:56 vuln.xml

こんな具合だ。えっ、FreeBSDのはずなのに、何でリナの所に有る? USBから上のmount問題を抱えつつcpしてきたからだ。悔しいので、以後これを肴にする。

sakae@debian:~/FB/pkg$ cat FreeBSD.meta | tr ',' '\n'
{"version":2
"packing_format":"txz"
"manifests":"packagesite.yaml"
"filesite":"filesite.yaml"
"manifests_archive":"packagesite"
"filesite_archive":"filesite"}

メタ情報と言うから、さぞ色々と書かれているかと思ったら、あっさりしてるね。

何だかオイラーの嫌いな太っちょカッコ風で書かれたファイルが有るな。何だろう?

sakae@debian:~/FB/pkg$ lv vuln.xml
  $FreeBSD: head/security/vuxml/vuln.xml 554018 2020-11-03 19:50:03Z rene $

<vuxml xmlns="http://www.vuxml.org/apps/vuxml-1">
  <vuln vid="3ec6ab59-1e0c-11eb-a428-3065ec8fd3ec">
    <topic>chromium -- multiple vulnerabilities</topic>
    <affects>
      <package>
        <name>chromium</name>
        <range><lt>86.0.4240.183</lt></range>
      </package>
    </affects>
    <description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>Chrome Releases reports:</p>
        <blockquote cite="https://chromereleases.googleblog.com/2020/11/stable-c
hannel-update-for-desktop.html">
          <p>This release contains 10 security fixes, including:</p>
          <ul>
            <li>[1138911] High CVE-2020-16004: Use after free in user interface.
              Reported by Leecraso and Guang Gong of 360 Alpha Lab working with
              360 BugCloud on 2020-10-15</li>
            <li>[1139398] High CVE-2020-16005: Insufficient policy enforcement
              in ANGLE. Reported by Jaehun Jeong (@n3sk) of Theori on
              2020-10-16</li>
               :

セキュリティの勧告書なんだな。追加で入れたアプリだからFreeBSD団は、そんなのユーザーの勝手でしょって訳にはいかない。ちゃんとこういう文書を用意して、穴は直ぐに塞ぐように推奨してる訳だな。

次はお待ちかねのsqlファイル。テキスト処理は限界って事で、DBにやむなく移行したんだな。

sakae@debian:~/FB/pkg$ sqlite3 repo-FreeBSD.sqlite 
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite> .tables
annotation           pkg_categories       pkg_shlibs_provided
categories           pkg_conflicts        pkg_shlibs_required
deps                 pkg_licenses         provides           
licenses             pkg_option           repodata           
option               pkg_option_default   requires           
option_desc          pkg_option_desc      shlibs             
packages             pkg_provides       
pkg_annotation       pkg_requires 

まずは、どんなテーブルが有るか確認。

sqlite> .schema
CREATE TABLE packages (id INTEGER PRIMARY KEY,origin TEXT,name TEXT NOT NULL,version TEXT NOT NULL,comment TEXT NOT NULL,desc TEXT NOT NULL,osversion TEXT,arch TEXT NOT NULL,maintainer TEXT NOT NULL,www TEXT,prefix TEXT NOT NULL,pkgsize INTEGER NOT NULL,flatsize INTEGER NOT NULL,licenselogic INTEGER NOT NULL,cksum TEXT NOT NULL,path TEXT NOT NULL,pkg_format_version INTEGER,manifestdigest TEXT NULL,olddigest TEXT NULL,dep_formula TEXT NULL,vital INTEGER NOT NULL DEFAULT 0);
CREATE TABLE deps (origin TEXT,name TEXT,version TEXT,package_id INTEGER REFERENCES packages(id)  ON DELETE CASCADE ON UPDATE CASCADE,UNIQUE(package_id, name));
CREATE TABLE categories (id INTEGER PRIMARY KEY, name TEXT NOT NULL UNIQUE );
  :

そして、各テーブルの作成仕様を確認。もうこういうのを見ると目眩がしますよ。

sqlite> select * from packages where id = 200;
200|textproc/php-mecab|php73-mecab|0.6.0_1|PHP bindings of the MeCab|MeCab: Yet Another Part-of-Speech and Morphological Analyzer

WWW: https://github.com/rsky/php-mecab||FreeBSD:13:amd64|gasol.wu@gmail.com|https://github.com/rsky/php-mecab|/usr/local|16212|57521|1|394e460bc4e79d429c16ed7cff65e932de5a3fa069f3a6ec1b6c3e58563af902|All/php73-mecab-0.6.0_1.txz||2$2$3xqwynnk3hk5gyt3sfxp5xbg81sitncasoxmne78iyi8wiicjufhnhcdaxxa6z733d4zqc1gpkuwokd7836h4r6aqmfw5euzt7fyd1d|||140733193388032

適当に登録情報を出してみた。 まあ、内容を見れば大体想像が付くけど、正確を期してみる。上の仕様書を分かり易いように分解。ここで使ったLOGは、 sqlite3 cliの .logコマンドを使えれば良かったんだけど、無視されていたんで、次のようにして採取したたものだ。

sakae@debian:~/FB/pkg$ sqlite3 local.sqlite | tee LOG
  :

scriptコマンドも使えると思うけど、それだと画面制御文字列もしっかりログされてしまうので、teeの方がお手軽だ。

sakae@debian:~/FB/pkg$ cat LOG | tr ',' '\n'
CREATE TABLE packages (id INTEGER PRIMARY KEY
origin TEXT
name TEXT NOT NULL
version TEXT NOT NULL
comment TEXT NOT NULL
desc TEXT NOT NULL
osversion TEXT
arch TEXT NOT NULL
maintainer TEXT NOT NULL
www TEXT
prefix TEXT NOT NULL
pkgsize INTEGER NOT NULL
flatsize INTEGER NOT NULL
licenselogic INTEGER NOT NULL
cksum TEXT NOT NULL
path TEXT NOT NULL
pkg_format_version INTEGER
manifestdigest TEXT NULL
olddigest TEXT NULL
dep_formula TEXT NULL
vital INTEGER NOT NULL DEFAULT 0);

もう一つ例。

sqlite> SELECT * from categories where id < 10;
1|sysutils
2|perl5
3|databases
4|python
5|security
6|pear
7|textproc
8|devel
9|graphics

こちらはカテゴリーの種類表。portsのdir分類に一致するんだな。

pkg audit -F

次に進む前にちょっと心配なので、セキュリティ監査を受けてみる。-Fのオプションを付けると、最新の情報で監査してくれるよ。

[sakae@fb ~]$ pkg audit
curl-7.77.0 is vulnerable:
  cURL -- Multiple vulnerabilities
  CVE: CVE-2021-22926
  CVE: CVE-2021-22925
  CVE: CVE-2021-22924
  CVE: CVE-2021-22923
  CVE: CVE-2021-22922
  WWW: https://vuxml.FreeBSD.org/freebsd/aa646c01-ea0d-11eb-9b84-d4c9ef517024.html

1 problem(s) in 1 installed package(s) found.

ふむ、ヤバイよやばいよなパッケージが炙り出されましたな。どうしても使いたかったら、自前でportsにパッチ当てしてコンパイルだな。あるいは、上記のCVEに抵触しないような使い方をするかだ(推奨はされません)。一番良い方法は、パッチを作って、それをメンテナーさんに提供する事。助け合い精神の発揮です。> お前やれよ。

pkg in pkg

次は、pkgってコマンドがどうなっているかだな。/usr/sbin/pkgにあるやつは、pkgコマンドが使うデータベース類を初回にインストールするやつだ。それが実行されると、pkgと言うパッケージがインストールされる。以後お世話になるやつは、そちらになる。

[sakae@fb ~]$ pkg info pkg
pkg-1.16.3
Name           : pkg
Version        : 1.16.3
Installed on   : Thu Apr 29 07:05:04 2021 JST
Origin         : ports-mgmt/pkg
Architecture   : FreeBSD:13:amd64
Prefix         : /usr/local
Categories     : ports-mgmt
Licenses       : BSD2CLAUSE
Maintainer     : pkg@FreeBSD.org
WWW            : https://github.com/freebsd/pkg
Comment        : Package manager
Options        :
        DOCS           : on
Shared Libs provided:
        libpkg.so.4
Annotations    :
        FreeBSD_version: 1300139
        repo_type      : binary
        repository     : FreeBSD
Flat size      : 34.3MiB
Description    :
Package management tool

WWW: https://github.com/freebsd/pkg

自分自身の説明書だ(都合で、amd64版を参照しています)。ここまで来たら、pkgなソースを読む鹿。apt source風はどうするか?

/usr/ports/ports-mgmt/pkg に移動しておいて、make fetchすれば、ソースが/usr/ports/distfilesの中にダウンロードされる。README.mdに

Known to fully work on (official package manager):

- FreeBSD
- DragonflyBSD

Known to work on (has been ported to):

- Linux
- NetBSD/EdgeBSD
- OSX

何? リナでも一応動くってさ。誰も使っていないだろうけど。それは兎も角として、何か適当なコマンドを引っ張り出して調べてみる。

[sakae@fb ~]$ pkg stat
Local package database:
        Installed packages: 415
        Disk space occupied: 4 GiB

Remote package database(s):
        Number of repositories: 1
        Packages available: 30736
        Unique packages: 30736
        Total size of packages: 92 GiB

ローカルな方は自ホストにインストールしたpkgの状態だな。リモートの方は提供者側の状態か。リモートの数って項目が有るって事は、オレオレpkg供給者になって、ウィルスのスプリッターに成れるって事です。リナにも有るね。撲滅大変そう。WHOの活躍が期待されます。

で、ソース鑑賞の前に予備知識を仕入れておく。

C言語でSQLiteを使う

SQLite C言語向けAPI チートシート

An Introduction To The SQLite C/C++ Interface (本家)

一番簡単そうなやつって事で、 src/stats.c を選んでみた。

exec_stats(int argc, char **argv)
{
     :
        if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
                return (EXIT_FAILURE);
        }

この他にも pkgdb_stats みたいなのが出てくる。野生の勘として、これらの関数は生のsqlit3 APIを隠蔽してるのではなかろうかと推測。探してみるか。

[sakae@fb /tmp/pkg-1.17.1]$ grep pkgdb_stats -rIl .
./libpkg/pkg.h.in
./libpkg/libpkg.ver
./libpkg/pkgdb.c
./src/stats.c

libpkg/pkgdb.c が、強烈な匂いを放っているぞ。

pkgdb_init(sqlite3 *sdb)
{
    :
        const char      sql[] = ""
        "BEGIN;"
        "CREATE TABLE packages ("
                "id INTEGER PRIMARY KEY,"
                "origin TEXT NOT NULL,"
                "name TEXT NOT NULL,"
                "version TEXT NOT NULL,"
                "comment TEXT NOT NULL,"
                  :
        "CREATE UNIQUE INDEX packages_unique ON packages(name);"
        "CREATE TABLE mtree ("
                "id INTEGER PRIMARY KEY,"
                "content TEXT NOT NULL UNIQUE"
        ");"

        "CREATE VIEW pkg_shlibs AS SELECT * FROM pkg_shlibs_required;"
        "CREATE TRIGGER pkg_shlibs_update "
                "INSTEAD OF UPDATE ON pkg_shlibs "
        "FOR EACH ROW BEGIN "
                "UPDATE pkg_shlibs_required "
                "SET package_id = new.package_id, "
                "  shlib_id = new.shlib_id "
                "WHERE shlib_id = old.shlib_id "
                "AND package_id = old.package_id; "
        "END;"

先にプチ苦労して整理したテーブル作成仕様書も見やすい形で提示されてた。それにsqlの勉強に最適そうな機能も出てきてる。

static sql_prstmt sql_prepared_statements[PRSTMT_LAST] = {
        [MTREE] = {
                NULL,
                "INSERT OR IGNORE INTO mtree(content) VALUES(?1)",
                "T",
        },
        [PKG] = {
                NULL,
                "INSERT OR REPLACE INTO packages( "
                        "origin, name, version, comment, desc, message, arch, "
                        "maintainer, www, prefix, flatsize, automatic, "
                        "licenselogic, mtree_id, time, manifestdigest, dep_formula, vital)"
                "VALUES( ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, "
                "?13, (SELECT id FROM mtree WHERE content = ?14), NOW(), ?15, ?16, ?17 )",
                "TTTTTTTTTTIIITTTI",
        },
         :

今度は、穴埋め式の定義が出てきた。こういうの昔rubyからMySQLを操る時に使ったな。今だとRailsになるのか。当初はRailsの簡単さに憧れて色々やったけど、最後は黒魔術過ぎて挫折した苦い思い出があるぞ。

余計な事に目移りしてないで、本筋も見ておけ。

pkgdb_stats(struct pkgdb *db, pkg_stats_t type)
{
        switch(type) {
        case PKG_STATS_LOCAL_COUNT:
                sql = "SELECT COUNT(id) FROM main.packages;";
                break;
        case PKG_STATS_LOCAL_SIZE:
                sql = "SELECT SUM(flatsize) FROM main.packages;";
                break;
          :
        stmt = prepare_sql(db->sqlite, sql);
        if (stmt == NULL)
                return (-1);

        while (sqlite3_step(stmt) != SQLITE_DONE) {
                stats = sqlite3_column_int64(stmt, 0);
        }

        sqlite3_finalize(stmt);

        return (stats);

上記のテンプレート(穴埋め式)から外れるやつは、生sqlをその場で定義して、コンパイルしてから実行って流れになってるね。システム自体は巨大だけど、個別に見ていけば、理解が進むな。恐れるに足りず、かな。

pkg-add on OpenBSD

ハイブリッドなOSユーザーとしては、他がどうなっているか見て億必要が有るな。

OpenBSDで色々パッケージを入れてから、メンテナンスしてなかった。更新しとくか。

vbox$ doas pkg_add -u
quirks-3.633 signed on 2021-08-02T12:40:37Z
  :
emacs-27.2-no_x11:gnutls-3.6.15p0->3.6.16: ok
erlang-wx-21.2p3v0:flac-1.3.3->1.3.3p0: ok
Running tags: ok
Read shared items: ok
--- -libxml-2.9.10p2 -------------------
Remember to update /var/db/xmlcatalog

最後の一文が気になる。世界に質問をブロードキャストしたよ。そしたら、リナの質問箱から返事が有った。 Three confusing messages after a big OpenBSD package update なかなか、緩やかで宜しい。

OpenBSDのパッケージシステムはperl語で書かれている。上の質問箱にも書かれていたけど、もうperlなんて読めない人が大半だろう。でも、文字の文化だから、使う方は嬉しい。 例えば、今どんなパッケージを入れてるか、確認。確かhexeditを入れてたよな。

vbox$ cd /var/db/pkg/hexedit-1.5p0/
vbox$ ls -l
total 8
-rw-r--r--  1 root  wheel  647 Jun 10 08:25 +CONTENTS
-rw-r--r--  1 root  wheel  311 Jun 10 08:25 +DESC
vbox$ less +DESC
Missing filename ("less --help" for help)
vbox$ less '+DESC'
Missing filename ("less --help" for help)
vbox$ less -- '+DESC'
view and edit files in hexadecimal or ASCII
hexedit shows a file both in ASCII and in hexadecimal. The file can be
a device as the file is read a piece at a time. You can modify the file
and search through it.

Maintainer: The OpenBSD ports mailing-list <ports@openbsd.org>

WWW: http://rigaux.org/hexedit.html

ちょっと知らない人が扱いに困るようなファイル名になってるけど、中身は普通だ。

apt on Debian

man apt は不親切過ぎるので man apt-getすると

/var/cache/apt/archives/
    Storage area for retrieved package files. Configuration Item:
    Dir::Cache::Archives.

/var/cache/apt/archives/partial/
    Storage area for package files in transit. Configuration Item:
    Dir::Cache::Archives (partial will be implicitly appended)

/var/lib/apt/lists/
    Storage area for state information for each package resource
    specified in sources.list(5) Configuration Item: Dir::State::Lists.

/var/lib/apt/lists/partial/
    Storage area for state information in transit. Configuration Item:
    Dir::State::Lists (partial will be implicitly appended)

ちとファイルの素性を調べてみる。

root@pen:/var/lib/apt# file listchanges.db
listchanges.db: Berkeley DB (Hash, version 9, native byte-order)
pkgcache.bin: APT cache data, version 13.0, little-endian, 80779 packages, 80974 versions

もう、取り付く島も無い。バイナリーな文化なのね。まるでWindowsみたい!! 大体、リナはどう頑張ってもWindowsには勝てませんよ。でも、Windowsがリナにすり寄って来てるってのは、面白い世の中だ脳。


This year's Index

Home