FreeBSD update memo 2024

/usr/src/usr/ports が git で管理されるようになった。
これに伴って、portsnap は、/usr/sbin から portsports-mgmt/portsnap に移動。すでに廃止も決まっているようだ。

今後は次の手順でアップデートしようと思う。

まず、/etc/rc.conf.local を移動して、機能を止めるため再起動する。

# mv /etc/rc.conf.local /etc/rc.conf.local.TMP
# shutdonw -r now

FreeBSD のシステムを freebsd-update でアップデートする。

# freebsd-update fetch
# freebsd-update install

/usr/src をアップデートする。

# cd /usr/src
# git pull

/usr/ports をアップデートする。

# cd /usr/ports
# git pull

pkgChecker.sh で、ports_list.txt の内容を確認する。

# cd /root/settings/freebsdPostInstall
# ./pkgChecker.sh ports_list.txt

ports_list.txt に問題がないことを確認出来たら、すべての pkg を削除して、再度インストールする。

# pkg delete -afy
# pkg
# ./pkgInstaller.sh ports_list.txt

/etc/rc.conf.local を戻して、再起動する。

# mv /etc/rc.conf.local.TMP /etc/rc.conf.local
# shutdown -r now

/usr/src /usr/ports

/usr/src/usr/ports が git で管理されるようになったことに伴い、最初から git clone を使ったほうが良い。インストーラで、これらをインストールせずに、最初に以下のコマンドでインストールする。

# git clone -b releng/14.1 https://git.freebsd.org/src.git /usr/src
# git clone https://git.freebsd.org/ports.git /usr/ports

とはいえ、/usr/ports はインストール時に入っていてほしいので、インストーラから入れて、いったんドット・ファイルも含めてすべてを削除して、git で入れなおすことになると思う。

VMware Shared Folder on FreeBSD Guest

VMware の共有フォルダは、以前はFreeBSDカーネルをパニックさせるので使ってなかったが、最近は問題なく利用できるようだ。

legacyos.ichmy.0t0.jp
www.isapon.com
などを参考にした。

emulators/open-vm-tools が導入され、起動されているのを前提として、/boot/loader.conf

fusefs_load="YES"

を記述しておく。(2024年10月4日修正、fuse_load="YES" -> fusefs_load="YES"

マウント先のディレクトリとして

# mkdir /mnt/hgfs

を作成。

その上で、/etc/fstab に、以下を記述しておく。

.host:/ /mnt/hgfs       vmhgfs-fuse     rw,mountprog=/usr/local/bin/vmhgfs-fuse,allow_other,uid=1000,gid=1000,failok 0 0

これで、起動時に自動的にマウントされるはずだが、残念ながら自動的にはマウントされなかった。

# mount /mnt/hgfs

で問題なくマウントされるので、とりあえずこれで使ってみる。

% df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
rpool/ROOT/default     39G    375M     38G     1%    /
devfs                 1.0K    1.0K      0B   100%    /dev
procfs                4.0K    4.0K      0B   100%    /proc
hpool/home             38G    4.7G     34G    12%    /home
rpool/var              56G     18G     38G    31%    /var
rpool/usr              59G     20G     38G    35%    /usr
rpool/tmp              38G    168K     38G     0%    /tmp
rpool/var/log          38G    592K     38G     0%    /var/log
rpool/var/mail         38G    120K     38G     0%    /var/mail
rpool/var/crash        38G     96K     38G     0%    /var/crash
rpool/var/tmp          38G     96K     38G     0%    /var/tmp
rpool/usr/ports        39G    946M     38G     2%    /usr/ports
rpool/usr/src          39G    736M     38G     2%    /usr/src
df: File system /mnt/hgfs does not have a block size, assuming 512.
/dev/fuse             238G    160G     78G    67%    /mnt/hgfs

ちょっと怖いので、使うときだけマウントする。

必要があれば WinSCP を使うし、数個のファイルならば Tera Term の SSH SCP も結構便利なので、特にファイル共有の必要性を感じていなかった。いつか必要になるかもしれないので、使えるようにしておいたほうがいいだろうと思う。

Build PDFBox in Ubuntu

前の記事の通り、FreeBSD で PDFBox をビルドできたので、Ubuntu でもやってみるかぁ、という感じで試してみたが、失敗。Java 8, Maven 3.6.3, Java Cryptography Extension も入ってる(ここ参照)ということで、何故失敗するのかわからず、とりあえず寝た。

朝起きて、エラーメッセージをGoogle先生に投入して、次の記事を発見した。
qiita.com

全く同じ問題でした。書いてくださって、本当にありがとうございます。

$ JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn clean install

$JAVA_HOME が定義されていないことが問題なので、一時的に定義すればビルドできた。

FreeBSD では、$JAVA_HOME は定義してないままビルドできたので、なにか違いがあるのだろう。

Apache PDFBox

Poppler の pdftotext は、「内容のコピーと抽出」という項目が許可しないになっていても、問題なくテキストを抽出してくれるので便利であったが、いくつかのPDFで厳密にテキストを抽出していないことに気がついた。問題の所在がはっきりしないのだが、ほとんどのPDFで厳密にテキストを抽出してくれている。しかし、一部のテキストしか抽出していない場合もあるようだ。そのようなPDFの特徴を特定できていない。

pdfbox.apache.org

PDFBox は Poppler が失敗するPDFであっても、テキストを抽出しているようにみえるので、こちらを利用したい。しかしながら、PDFBox は「内容のコピーと抽出」という項目が許可しないになっていると、抽出してくれない。それでは困るので、「内容のコピーと抽出」という項目が許可しないの場合でも抽出してくれるように、修正する。

PDFBox はJavaで書かれており、ビルドには Java Cryptography Extension (JCE) と Maven 3 が必要とある。FreeBSD の pkg で、devel/mavenjava/cryptix-jce を入れておく。devel/maven3 は 3.0.5、devel/maven33 は 3.3.9、devel/maven は 3.8.4。PDFBox のコンパイルには、3.1.0 以上が必要で、3.0.5 ではダメだった。

github.com

Tag を 2.0.25 にして pdfbox-2.0.25 のソースを github からもらってくる。修正するファイルは以下の通り。チェックをするところだけコメントアウト

./pdfbox-2.0.25/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java

                AccessPermission ap = document.getCurrentAccessPermission();
//                if( ! ap.canExtractContent() )
//                {
//                    throw new IOException( "You do not have permission to extract text" );
//                }

最新のものだと、チェックするif文のブロックの中身が少し違うが、if( ! ap.canExtractContent() ) の場所を探せば問題ないだろう。

% mvn clean install

とすると、pdfbox-app-2.0.25.jar をビルドしてくれる。

使い方は、

% java -jar pdfbox-app-2.0.25.jar ExtractText input.pdf output.txt

のように使う。

Ubuntu 20.04 install memo

UbuntuVMwareにインストールする手順をメモする。

方針

Desktop版をインストールするが、TeraTermを用いてsshでログインして利用することを前提にする。FreeBSDと同等の利用が可能な環境を、なるべくシンプルな方法で構築する。インストール後、

  1. $HOMEのディレクトリ名の英語への修正
  2. openssh-server のインストール
  3. 固定IPアドレスの設定

をした後、シェルスクリプトで必要なソフトウェアを一気にインストールする。

インストール

解像度が低くインストーラの操作ができない場合は、Alt+F7 を押しながらマウス操作で移動できる。
https://masaoo.blogspot.com/2021/07/ubuntu-2004-800x600.html?view=flipcard

インストールは指示通りに行う。「通常のインストール」を選択、「Ubuntuのインストール中にアップデートをダウンロードする」にチェックを入れ、「グラフィックスと...」にはチェックを入れない。「インストールの種類」では「ディスクを削除してUbuntuをインストール」を選択。ユーザーは通常通りの入力で、「ログイン時にパスワードを要求する」を選択する。

インストールが終わったら、オンラインアカウントのログインをスキップして、その後「次へ」を選び続けて終了する。その後、不完全な言語サポートの通知に関してインストールし、システムのアップデートを行う。

最低限の設定

端末を開き、
1. ディレクトリ名の英語への修正、(ターミナルからコマンド、GUI操作有)

$ LANG=C xdg-user-dirs-gtk-update

を実行すると、ウィンドウが現れる。Don't ask me this again にチェックして、Update Names を実行する。
2. openssh-server のインストール

$ sudo apt-get -y install openssh-server

とりあえず、設定は後回し。
3. 固定IPアドレスの設定
[設定]->[ネットワーク] からIPアドレス、デフォルトルート、DNSを設定。
を済ませて、再起動

最初のログイン

/etc/ssh/sshd_conf の設定をしなかった場合、TeraTerm 等の端末エミュレータからのログインは、プレインパスワードを用いることに注意する。下記の設定をして、チャレンジレスポンス認証を有効にする。

dotFiles

dotFiles (https://github.com/masakeida/dotFiles) から、.bash_aliases と .inputrc を $HOME にコピー。

$HOME

$HOME/bin
$HOME/public_html
$HOME/.local/bin
を作成する。$PATH は、.profile の記述により自動的に入る。

root パスワード設定

$ sudo passwd root

/etc/ssh/sshd_config 修正

$ diff /etc/ssh/sshd_config.ORG /etc/ssh/sshd_config
34c34
< #PermitRootLogin prohibit-password
---
> PermitRootLogin no
58c58
< #PasswordAuthentication yes
---
> PasswordAuthentication no
63c63
< ChallengeResponseAuthentication no
---
> ChallengeResponseAuthentication yes

sshd を再起動する。

$ sudo systemctl restart ssh

ubuntuPostInstall

github.com

root になって ubuntuPostInstall.sh を実行する。このスクリプトが実行することは基本的に2つ。

  1. pkg_list.txt に記載されたパッケージをインストールする。
  2. server_list.txt に記載されたサービスを disable する。

必要なパッケージを apt-get でインストールする。nis についてのみ、nisdomain 名を尋ねられ、その後「nis (3.17.1-3build1) を設定しています ...」でかなりの時間固まる。動き出すまで待つこと。それ以外は問題なくインストールできる。サーバースイートについては、インストールのみとし、すぐには使わないので disable する。現状、disable するものは以下の通り。
samba (smbd, nmbd)
apache2 (apache2)
nginx (nginx)
mysql (mysql)
unbound (unbound)
nfs (nfs-kernel-server)
nis (nis, rpcbind)
rpcbind を最後に disable するのがいいと思う。

pkg_list.txt に記載したもので必要ないものもありそう。php に依存して apache2 がインストールされるようだ。また、open-vm-tools-desktop は自動的に入っているようだ。

ここで再起動する。

感想

意外とシンプルな方法で、利用できる環境構築ができた。運用としては、

# apt-get -y update
# apt-get -y upgrade
# apt-get -y dist-upgrade

を繰り返して、LTSが出たら新規インストールをする、ということでやっていくのが楽なのではないかと思う。

細かい点
  • FreeBSD では、特にサーバースイートについては、インストールと起動が別なので、インストールして、設定ファイルを正しく書いて、起動する、という3ステップが必要になる。Ununtu の文化では、インストールすると自動的に起動されてしまう。適切な設定がなされるのだろうが、ちょっと困る。なので disable するようにしている。
  • インストール後、GUI 操作なしで済むといいのだけれど。「ディレクトリ名の英語への修正」と「固定IPアドレスの設定」を、どのように設定するのが正しいのか、要調査。
  • パッケージの存在、不存在をチェックする方法も、要調査。

Poppler

前回、xpdfのPermission Errorについて書いたが、xpdfはメンテナンスされておらず、後継のPopplerがあることを知った。
poppler.freedesktop.org


Popplerのpdftotextは、「内容のコピーと抽出」という項目が許可しないになっていても、問題なくテキストを抽出するので、前回書いたような修正は必要がないことがわかった。