VMware Shared Folder on FreeBSD Guest
VMware の共有フォルダは、以前はFreeBSD のカーネルをパニックさせるので使ってなかったが、最近は問題なく利用できるようだ。
legacyos.ichmy.0t0.jp
www.isapon.com
などを参考にした。
emulators/open-vm-tools が導入され、起動されているのを前提として、/boot/loader.conf
に
fuse_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 は Poppler が失敗するPDFであっても、テキストを抽出しているようにみえるので、こちらを利用したい。しかしながら、PDFBox は「内容のコピーと抽出」という項目が許可しないになっていると、抽出してくれない。それでは困るので、「内容のコピーと抽出」という項目が許可しないの場合でも抽出してくれるように、修正する。
PDFBox はJavaで書かれており、ビルドには Java Cryptography Extension (JCE) と Maven 3 が必要とある。FreeBSD の pkg で、devel/maven と java/cryptix-jce を入れておく。devel/maven3 は 3.0.5、devel/maven33 は 3.3.9、devel/maven は 3.8.4。PDFBox のコンパイルには、3.1.0 以上が必要で、3.0.5 ではダメだった。
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
UbuntuをVMwareにインストールする手順をメモする。
方針
Desktop版をインストールするが、TeraTermを用いてsshでログインして利用することを前提にする。FreeBSDと同等の利用が可能な環境を、なるべくシンプルな方法で構築する。インストール後、
をした後、シェルスクリプトで必要なソフトウェアを一気にインストールする。
インストール
解像度が低くインストーラの操作ができない場合は、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
root になって ubuntuPostInstall.sh を実行する。このスクリプトが実行することは基本的に2つ。
- pkg_list.txt に記載されたパッケージをインストールする。
- 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が出たら新規インストールをする、ということでやっていくのが楽なのではないかと思う。
Poppler
前回、xpdfのPermission Errorについて書いたが、xpdfはメンテナンスされておらず、後継のPopplerがあることを知った。
poppler.freedesktop.org
Popplerのpdftotextは、「内容のコピーと抽出」という項目が許可しないになっていても、問題なくテキストを抽出するので、前回書いたような修正は必要がないことがわかった。
xpdf: Permission Error
PDF文書によっては、xpdf の pdftotext で以下のようなエラーが出る
Permission Error: Copying of text from this document is not allowed.
PDF文書のセキュリティの一つとして「内容のコピーと抽出」という項目が許可しないになっていると、テキスト抽出できないようだ。
https://uchiuchiyama.hatenadiary.org/entry/20060509/1147184615
上記のリンクに対応策がある。xpdf-4.02 でも同じ対応ができるようだ。が、ソースからコンパイルするのをそのままインストールするのはしたくないので、portsから修正することにする。
対応策の中身は、要するに pdftotext.cc の以下のブロックをコメントアウトする。
// check for copy permission // if (!doc->okToCopy()) { // error(errNotAllowed, -1, // "Copying of text from this document is not allowed."); // exitCode = 3; // goto err2; // }
久しぶりに ports をいじるので忘れてしまっていたが、ソースの一部を修正する場合、
# make BATCH=yes extract patch
# make BATCH=yes install
でインストールする必要がある。
xpdfの場合、japanese/xpdf は graphics/xpdf に依存していることに注意して、まずは graphics/xpdf をインストールするために必要なものをインストールする。
# cd /usr/ports/graphics/xpdf # make BATCH=yes
で、buildするために必要なものが全てインストールされる。この場合はcmakeなど。ここで、graphics/xpdf でいったん make clean する。
pkg でインストールされた xpdf を、
# pkg delete -y xpdf-4.02,1
で、削除した後、
# cd /usr/ports/japanese/xpdf # make BATCH=yes extract patch # cd /usr/ports/graphics/xpdf # make BATCH=yes extract patch
で、graphics/xpdf の work 以下のソースを修正し、
# cd /usr/ports/japanese/xpdf # make BATCH=yes install
で、エラーが出ない修正版をインストールできた。
ports の使い方は man 7 ports https://www.freebsd.org/cgi/man.cgi?ports(7) を確認すること。
正直お行儀が悪いとは思うが、お行儀を良くしすぎると仕事にならないので、これで対応する。
*1:make BATCH=yes patch で十分だが、何をしてるのか忘れないために extract patch としている。
japanese/xpdf error message
PDFファイルからテキストを抜き出す必要があり、japanese/xpdfをインストールしている。基本的に /usr/local/etc/xpdfrcの
textEncoding UTF-8
この行だけ、コメントアウトされているのを有効にして、利用できる。
ただ、最新のバージョンでは、
% /usr/local/libexec/xpdf/pdftotext hogehoge.pdf Config Error: No paper information available - using defaults %
とのエラーメッセージが出る。エラーメッセージではあるが、hogehoge.txtは作成されているので、動いているようだ。using defaults と言ってるし。こういうのはerrorとは書かないでほしいというのはあるが、なぜこのエラーが出るのかは分からない。
/usr/local/etc/xpdfrc には、textEncoding のすぐ前に、
#psPaperSize letter
という行があるので、この行を有効にしても変わらなかった。
エラーメッセージは出るが、このまま利用する。