= [[FreeBSD]] / LM: [2024-09-05 19:13:19]
~~NOCACHE~~
====== pkg ======
pkg は,[2021-10-16] の時点で少なくとも基本的なパッケージ管理ツール.
インストールされているパッケージ一覧,削除,version 情報,最新かどうか,セキュリティ勧告の出ているパッケージが入っていないかどうか,などができる.
===== pkg info =====
パッケージに関する情報を表示してくれるコマンド
* パッケージによりインストールされた shared libraries を表示する
% pkg info -b ja-FreeWnn-lib
* パッケージによりインストールされた全てのファイルを表示する
% pkg info -l ja-FreeWnn-lib
===== pkg audit =====
セキュリティ勧告が出ていないかを確認するコマンド.
* 現在ローカルに保持されている情報を元に,状況を確認する
% pkg audit
* 最新の情報を取得した上で状況を確認する(要 root)
% sudo pkg audit -F
===== pkg shlib =====
.so のような共有ライブラリが,誰によってインストールされているのか,または,誰によって利用されているのか,を検索するためのコマンド.
* hogehoge.so.1.1.1 を提供しているパッケージ名を表示.
% pkg shlib -P hogehoge.so.1.1.1
* hogehoge.so.1.1.1 を利用しているパッケージ名を表示.
% pkg shlib -R hogehoge.so.1.1.1
* -q をつけることで,quiet 出力になる.
===== pkg version =====
インストールされているパッケージのバージョンが最新かどうかを確認する.
* インストールされているパッケージのバージョンが最新かどうかを確認する.
% pkg version
===== pkg delete =====
インストールされているパッケージを削除する
* インストールされているパッケージを削除する. は,pkg version で確認できたパッケージ名から,バージョン番号を取り除いたものや,/usr/ports 以下のフォルダ名と同一.
% pkg delete
------------------------------------------------------------
====== portmaster ======
portmaster は,ports で make && make install とかするのを適当に自動化してくれるコマンド.
昔は portupgrade というのがあったが,今は使われなくなっていると思われる.[2021-10-16]
===== 新規 ports インストール =====
* 新規に emacs をインストールする場合.
% sudo portmaster -D editors/emacs
* -D:毎度毎度 distfiles を消しますか,の質問がなくなる.
* /usr/ports からの相対フォルダ名を指定する.
===== 複数存在するバージョンの ports を,指定した方にする =====
例えば,lang/php72 と lang/php74 のように,複数 ports が存在していて,72 から 74 に明示的にアップグレードしたい場合.
% sudo portmaster -D -o lang/php74 lang/php72
* -o:新しくインストールしたい ports 名を指定する
(php や perl のように,影響範囲が広い ports の場合,php74 で始まる ports を全て再インストールしたり, pkg shlib と組み合わせて再インストールするケースがある.)
==== 例)(OLD) emacs のバージョンを下げる ====
* /usr/ports/UPDATING を見る。
# portmaster -o editors/emacs23 editors/emacs
or
# env DISABLE_CONFLICTS=1 portupgrade -fo editors/emacs23 editors/emacs
or
# pkg set -o editors/emacs:editors/emacs23
* これをやった後、関連 elisp も再インストールする。apel あたりからはじめておくと関連する elisp をある程度再帰的にダウングレードしてくれる。
# portupgrade -rf editors/apel
# portupgrade -rf editors/tamago
------------------------------------------------------------
====== linux emulation [2023-09-07] ======
===== 概要 =====
FreeBSD の linux emulation は,Linux バイナリのシステムコールの番号や引数の差異を(カーネル内で?)変換し,FreeBSD バイナリとして実行する,というのが基本の機能.
emulation で動作させる際に,Linux バイナリな libc.so などが必要になる.これらのバイナリは /usr/lib/ などに入れるわけにはいかないので,/compat/ 以下に設置される.LD_LIBRARY_PATH を書き換えまくるのも大変なので,chroot/jail を使うケースが多い.LD_LIBRARY_PATH の書き換えでも動作しているようにも見える.
ユーザランドとしては,CentOS ベースと,Debian/Ubuntu ベースのものが両方ある模様.CentOS の方が昔からあるらしく,検索すると多く記述が出てくるが,Debian/Ubuntu ベースの方が最近は活発?なのか,今回は最終的に Ubuntu ベースで準備をした.
===== 設定 =====
以下を行なうことで,linux emulation 環境がインストールされる.
* /etc/rc.conf に ubuntu_enable="YES".
* # service ubuntu start
* kldstat にて,以下のカーネルモジュールがロードされているか確認.かっこ内は,確認しきれてないが linux emulation 設定後に増えているので怪しい module たち.
* linux_common.ko
* linux64.ko
* linux.ko
* fdfescfs.ko
* linprocfs.ko
* linsysfs.ko
* (netlink.ko)
* (pty.ko)
* (nullfs.ko)
* sysctl -a で出てくる compat.linux.emul_path に /compat/ubuntu が設定されているか確認.
* ports/pkg にて sysutils/debootstrap をインストールする
* debootstrap --arch=amd64 --no-check-gpg jammy /compat/ubuntu
* かなり時間がかかる.
* service ubuntu restart / onestop/onestart
==== 使い方 ====
=== chroot して,linux 環境そのものに入る ===
# chroot /compat/ubuntu /bin/bash
=== linux binary を FreeBSD において実行できるようにする ===
OS 側(?)に,当該バイナリが Linux バイナリであることを宣言する為の操作.これを実行しないと,ELF 番号がおかしいよ,というエラーが出てしまう.
% brandelf -t Linux
==== 参考 ====
* https://www.zenarmor.com/docs/freebsd-tutorials/how-to-configure-linux-binary-compatibility-on-freebsd
* https://github.com/FlareSolverr/FlareSolverr/wiki/Installing-FlareSolverr-in-FreeBSD,-FreeNAS-or-TrueNAS-jail
------------------------------------------------------------
====== svn での ports tree の管理方法 [2021-10-16] ======
SVN ベースでの ports tree を最新にする方法.ただし,今後は git になると思われる.[2021-10-16]
* 初回
% portsnap fetch extract update
* 二回目 or /usr/ports に情報がある状態 以降
% portsnap fetch update
------------------------------------------------------------
====== git での src tree の管理方法 [2022-09-26] ======
===== 新規の場合 [2024-09-05] [2022-11-04] =====
まず,git レポジトリを全てとってくる.
sudo git clone -o freebsd https://git.FreeBSD.org/src.git /usr/src
===== stable/14 =====
stable/14 にしたい場合.
sudo git checkout stable/14
===== アップデート [2022-11-04] =====
sudo git pull
====== svn での src tree の管理方法 [2021-10-16] [2014-11-25] ======
古くは cvsup だったが,もう存在しないので svn のみ.
(2021 年ごろ,git に移行したはずだけど,[2021-10-16]時点で追って追ってない)
* 参照先 url
* https://www.freebsd.org/doc/handbook/synching.html
* 以下のコマンド
% svn checkout https://svn.FreeBSD.org/base/stable/9 /usr/src
* mirror サイトは,以下を参照.
* https://www.freebsd.org/doc/handbook/svn.html#svn-mirrors
* stable/9, stable/10, release/9.3.0, release/10 などを選択
* release 番号は http://svnweb.freebsd.org/base/release/ を参照
* base/ports/doc を選択可能.
* svn checkout https://svn0.us-west.FreeBSD.org/ports/head /usr/ports
* 一度,checkout したら後は update すれば OK.
------------------------------------------------------------
====== その他設定 ======
===== ユーザ情報の移行 [2022-09-26] =====
- 元ネタ:http://www.lifewithunix.jp/notes/2015/09/21/freebsd-10-2-how-to-move-all-accounts-to-new-system/
/usr/sbin/pwd_mkdb -p /etc/master.passwd
- /etc/group は移行されないので,別途手動でコピーする必要あり.
===== FreeWnn の設定 =====
* ports でインストール。
* /etc/rc.conf に以下の設定。
wnn_enable="YES"
wnn_flags="-a 0.0.0.0"
* 2行目を書いておくことで、ホスト外から接続できるようになる。
* 上記設定は,グローバルにアクセス可能になってしまうので,やめた方が良いかと思われる.[2021-10-16]
===== cpu 温度を知る =====
# kldload coretemp
# sysctl -a | grep temperature
or
# sysctl dev.cpu | grep temperature
* 別途, ipmi という機構もあるみたいだが,これはサーバマシン向け.
===== geom 使ってファイルシステム回りを便利に. =====
* http://www.seichan.org/wiki/index.php?FreeBSD-GEOM
===== ssh で X を飛ばす =====
* サーバー側では,xauth が必要.
* クライアントでは,ssh -XY.
===== 一つのプロセスで利用できる最大メモリ容量を増やす =====
/boot/loader.conf に以下の記述
kern.maxdsiz="2G"
値の部分は適宜変更のこと.
===== ホストの名前 =====
* hostname コマンドで,完全名 (hoge.ht.sfc.keio.ac.jp) を指定.
* /etc/hosts には,hoge のみを記述.
* hosts に書きたければ,
133.27.xxx.xxx hoge.ht.sfc.keio.ac.jp
* のように,固定 IP と完全名をマッピングさせる.
* こうすることで,gethostname() あたりを使ったプログラミングが楽になる.
===== dummynet 設定 =====
==== sysctl の値 ====
net.link.ether.bridge.config: em0:1,dc0:1,
net.link.ether.bridge_cfg: em0:1,dc0:1,
net.inet.ip.forwarding: 1
==== リンク ====
http://ino-www.jaist.ac.jp/members/isogaki/fbsd-dummynet.html
===== コマンド =====
==== ゾンビプロセスの殺し方 [2023-09-07] ====
取り急ぎ:https://xn--v1tz8a.jp/2013/02/12/freebsd%E3%81%A7%E3%82%BE%E3%83%B3%E3%83%93%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E6%AE%BA%E3%81%99/
==== プロセスごとに利用している port 番号を把握する ====
% sockstat
==== package を使って,バイナリインストールしまくる ====
* ダウンロード先のサーバを指定してから,pkg_add コマンドでインストール.
% export PACKAGESITE=ftp2.jp.freebsd.org
# pkg_add -r nkf
* package を探したいときは,pkg_search をインストールしてから,探す.
# pkg_search nkf
==== iso マウント方法 ====
* mount
$ mdconfig -a -t vnode -f image.iso -u 0
$ mount -t cd9660 -o ro /dev/md0 /mount_point
* umount
$ umount /mount_point
$ mdconfig -d -u 0
==== tar でファイルコピーの方法 ====
% tar cvf - hoge | (cd /tmp/backup ; tar xvf -)
==== portupgrade で、メジャーバージョンアップ ====
# portupgrade -o www/apache22 apache
* (apache2.0 -> apache2.2の例)
==== ports でセキュリティチェックを外して、とにかくインストールさせたい ====
DISABLE_VULNERABILITIES=yes
をMakefileに書いておく。
==== tunefs ====
* soft update を有効にする
# tunefs -n enable /dev/ad0
* soft update を無効にする
# tunefs -n disable /dev/ad0
------------------------------------------------------------
====== OLD(かなり古いメモ) ======
===== python の取扱 (2012/11時点) =====
* python 2.x / 3.x の ports が二つともある.
* 間違えて 3.x がデフォルトになっている場合,/etc/make.conf に以下を記述しておくと良いらしい.
PYTHON_VERSION=2.7
PYTHON_DEFAULT_VERSION=2.7
* これが無視されてしまう場合は,/usr/local/bin/python を書き換える.
* /usr/local/bin/python は,/usr/local/bin/python3.1 or python2.7 への hard link なので,削除して ln コマンドでリンクを作ってやればOK.
===== java =====
==== java が以下のエラーで落ちる (keytool, jarsigner も同様) ====
% java -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
* 原因は,どうも jvm をサーバーモードで立ち上げる際,大量のメモリを確保しようとして,メモリが足りなくなる?ことらしい.(mmapの実装上の問題,実メモリが 4GB あること,などなど原因らしきものは出てきたけど,いまいち不明.)
* よって,クライアントモードで動かしてあげると動作するかも.
% java -client -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode)
==== jdk6 で jdk5 用のクラスファイルを生成したい。 ====
% javac -target 1.5 *.java
----
このページへのアクセス
今日: {{counter|today}} / 昨日: {{counter|yesterday}}
総計: {{counter|total}}