Linuxに関するメモ
目次
独立したページ
VMware Photon OS
初期設定
項目 | 値 |
---|---|
ユーザー名 | root |
パスワード | changeme(ログイン後要変更) |
キーボードレイアウト | 未定義(us101) |
タイムゾーン | UTC |
ネットワーク | DHCP |
ストレージ | 16GB |
sshd | 有効・rootアクセス許可 |
キーマップ変更
Ansible的なやつで管理する想定で何もインストールされていないので別途インストールする。
root@photon-machine [ ~ ]# tdnf install kbd root@photon-machine [ ~ ]# localectl set-keymap jp106 root@photon-machine [ ~ ]# localectl System Locale: LANG=en_US.UTF-8 VC Keymap: jp106 X11 Layout: jp X11 Model: jp106 X11 Options: terminate:ctrl_alt_bksp
タイムゾーン変更
root@photon-machine [ ~ ]# timedatectl set-timezone Asia/Tokyo root@photon-machine [ ~ ]# timedatectl Local time: Thu 2023-12-21 22:37:58 JST Universal time: Thu 2023-12-21 13:37:58 UTC RTC time: Thu 2023-12-21 13:37:58 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no
ディスク容量の拡大
2番目のパーディション(/dev/sda2)がディスクの最後にあり、rootとして使われているのでこれを拡大する
ここら辺はバージョン差異が大いにあり得るので慎重に作業されたい。
root@photon-machine [ ~ ]# tdnf install parted root@photon-machine [ ~ ]# parted /dev/sda GNU Parted 3.5 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print print Model: VMware Virtual disk (scsi) Disk /dev/sda: 172GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 5243kB 4194kB bios_grub 3 5243kB 15.7MB 10.5MB fat16 boot, esp 2 15.7MB 172GB 172GB ext4 (parted) resizepart 2 100% (parted) q q root@photon-machine [ ~ ]# resize2fs /dev/sda2 root@photon-machine [ ~ ]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 999M 0 999M 0% /dev/shm tmpfs 400M 672K 399M 1% /run /dev/sda2 158G 734M 151G 1% / tmpfs 999M 0 999M 0% /tmp /dev/sda3 10M 2.2M 7.9M 22% /boot/efi tmpfs 200M 0 200M 0% /run/user/0
パッケージのインストール・更新
本当に最小限なのでターミナルに入って作業するのであればsudoくらいは…ね?
あと個人的にvi大嫌いなので真っ先にnanoをインストールする。Emacs?知らんな
scpで送り込む想定なので入れないがcurlやgitも候補に挙がるかも?
root@photon-machine [ ~ ]# tdnf install sudo root@photon-machine [ ~ ]# tdnf install nano root@photon-machine [ ~ ]# tdnf check-update root@photon-machine [ ~ ]# tdnf clean all root@photon-machine [ ~ ]# tdnf upgrade
一般ユーザーの作成
dockerとsudoを使えるように構成する。
特にdockerでパーディション関係のごたごたを起こしたくないのでuid、gidは一般的なものを設定しておく。
root@photon-machine [ ~ ]# useradd -m -g users -G wheel ユーザー root@photon-machine [ ~ ]# usermod -aG docker ユーザー root@photon-machine [ ~ ]# groups ユーザー ユーザー : users wheel docker root@photon-machine [ ~ ]# id ユーザー uid=1000(ユーザー) gid=100(users) groups=100(users),28(wheel),995(docker) root@photon-machine [ ~ ]# passwd ユーザー
Docker Composeのインストール
他所のサイトだとdockerの公式からダウンロードして/usr/local/binに置く方法が紹介されいるがPhotonの公式にあるのでそっちを使うようにする。
tdnf install docker-compose
sshdのrootログインを禁止する
初期設定でrootアクセスがONになったsshdが動いているので一通り設定が終わったら無効にする。 必要に応じて公開鍵認証に切り替える。
root@photon-machine [ ~ ]# nano /etc/ssh/sshd_config
PermitRootLogin yesをnoに変更
root@photon-machine [ ~ ]# systemctl status sshd
systemd-networkd でブリッジデバイス作成
Dockerのコンテナに実ネットワークのIPアドレスを直接割当てることができるように設定していたが、作らなくても実現する方法が見つかったので通常のStatic IPに戻した
追記:ブリッジではなくmacvlanで行うことでports指定によるポート開放、特定コンテナに対する実ネットワークのIPアドレス割り当て、コンテナ↔ホストネットワーク、コンテナ↔ホストの通信確保などを制限なく行える状態にできた
Photon OS でやるためのメモ。CentOS等RHEL系でも効くと思う。
仮想マシンで作業するためesxiの仮想スイッチの無差別モード(プロミスキャスモード)を有効にしておく。
定義ファイル群
Photon OS ではファイルのパーミッションを0644としなければ読み取りエラーとなって崩壊するので要注意
保存場所は全て/etc/systemd/network/
物理ホストや複数nicでやる場合はenp0s3のような名前を使うべきだろう
作成するファイル | 内容 |
---|---|
br0.netdev | ブリッジデバイス br0 を定義して作成させる |
10-static-br0.network | ブリッジデバイス br0 のネットワークを設定 |
11-bridge-eth0.network | NIC(vmxnet3) を br0 へ接続する旨を設定 |
ブリッジデバイスの作成(br0.netdev)
/etc/systemd/network/br0.netdev でブリッジデバイスを定義して networkd に作成させる
[NetDev] Name=br0 Kind=bridge
作成後、networkctl reloadするとbr0が生えている。
root@photon-machine [ ~ ]# cd /etc/systemd/network/ root@photon-machine [ /etc/systemd/network ]# nano br0.netdev root@photon-machine [ /etc/systemd/network ]# chmod 644 br0.netdev root@photon-machine [ /etc/systemd/network ]# networkctl reload root@photon-machine [ /etc/systemd/network ]# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:50:56:89:2b:3f brd ff:ff:ff:ff:ff:ff altname eno1 altname enp11s0 altname ens192 3: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 6e:e3:04:ec:4c:1a brd ff:ff:ff:ff:ff:ff
ブリッジデバイス(br0)にIPアドレスを割り当て(10-static-br0.network)
通常のNICと同じように設定する。
Static IP
[Match] Name=br0 [Network] DHCP=no Address=192.168.100.213/24 Gateway=192.168.100.1 DNS=192.168.100.200 Domains=junk-labs.net
DHCP
[Match] Name=br0 [Network] DHCP=yes
eth0をbr0に接続(11-bridge-eth0.network)
[Match] Name=eth0 [Network] Bridge=br0
systemd-networkd でmacvlanデバイスを作成
現在やってる設定はこちら。
一部のキーワードが異なるだけでやり方は上の段落のbridgeと一緒
00-macvlan1.netdev | ブリッジデバイス macvlan1 を定義して作成させる |
10-static-br0.network | ブリッジデバイス macvlan1 のネットワークを設定 |
11-bridge-eth0.network | NIC(vmxnet3) を macvlan1 へ接続する旨を設定 |
Photon OS ではファイルのパーミッションを0644としなければ読み取りエラーとなって崩壊するので要注意
00-macvlan1.netdev
デバイスを生やす。
[NetDev] Name=macvlan1 Kind=macvlan [MACVLAN] Mode=bridge
10-static-macvlan1.network
生やしたデバイスにipアドレスを割り当てる。
[Match] Name=macvlan1 [Network] DHCP=no Address=192.168.100.213/24 Gateway=192.168.100.1 DNS=192.168.100.200 DNS=192.168.100.212 Domains=junk-labs.net
11-macvlan-eth0.network
ネットワークアダプタからipアドレスを剥奪して全ての通信をmacvlan経由にする。
そうすることでmacvlan使用コンテナ↔ホスト+他コンテナ間の通信を確保できるようになる。
[Match] Name=eth0 [Network] MACVLAN=macvlan1
nginx
cloudflare経由のアクセスログにアクセス元のIPを記録
cloudflareのAPIからIPの一覧を拾ってnginxの設定ファイルを作成する。
/opt/cloudflare-realip-nginx.sh
#!/bin/bash CLOUDFLARE_FILE_PATH=/etc/nginx/conf.d/cloudflare.conf echo "#Cloudflare" > $CLOUDFLARE_FILE_PATH; echo "" >> $CLOUDFLARE_FILE_PATH; echo "# - IPv4" >> $CLOUDFLARE_FILE_PATH; for i in `curl -s -L https://www.cloudflare.com/ips-v4`; do echo "set_real_ip_from $i;" >> $CLOUDFLARE_FILE_PATH; done echo "" >> $CLOUDFLARE_FILE_PATH; echo "# - IPv6" >> $CLOUDFLARE_FILE_PATH; for i in `curl -s -L https://www.cloudflare.com/ips-v6`; do echo "set_real_ip_from $i;" >> $CLOUDFLARE_FILE_PATH; done echo "" >> $CLOUDFLARE_FILE_PATH; echo "real_ip_header CF-Connecting-IP;" >> $CLOUDFLARE_FILE_PATH; #test configuration and reload nginx nginx -t && systemctl reload nginx
# Auto sync ip addresses of Cloudflare and reload nginx 30 2 * * * /opt/cloudflare-realip-nginx.sh >/dev/null 2>&1
OpenSUSE
Minimal Virtual Machine
本当にMinimalすぎてyastすら入っていない!!
esxiにvmdk.xzとvmxをscpで転送したら起動した。付属のvmxを使わないと起動しなかった。
付属のvmxはダウンロードサイトからリンクされている.vmdk.xzのURIを.vmxに変えればダウンロードできる。
初期状態でrootログイン可能なsshd(openssh-server)が立ち上がっているので要注意
初回起動時にjeos-firstbootというTUIのインストーラーが立ち上がって利用許諾の同意、タイムゾーン変更、キーボードレイアウト変更、rootパスワードの変更がウィザード形式で進む。WSLイメージの初回起動のような流れがある。
cloud-initも入っているのでそっちで設定を済ませることもできるだろう。
yast2でネットワークアダプタの設定を変更してもcloud-initがDHCPに設定しなおす不具合が出た。
動きがおかしい場合はzypper rm cloud-initでアンインストールする
VMWare ESXi 7.0ではvmxの仮想マシンバージョンがESXi5.5互換と表示される。
バージョンに差異がありぎるのか編集しようとするとフリーズするので「仮想マシン互換性のアップグレード」を使用してESXi 6.7互換くらいまで上げてあげるとよさげ。
ネットワークアダプタがないのでe1000を追加(vmxnet3は仮想マシンが起動しなかった)
# jeos-config
ネットワークアダプタを追加した後に上記のコマンドを起動してnetworkを選択すると何も聞かれずにネットワークアダプタがDHCPになる。
# zypper in -t pattern yast2_server
上記コマンドでyast一式が入ってopensuseらしくなるのでネットワークアダプタをstaticにするなど必要な設定変更を行う。
ディスク容量の拡大とbtrfsのリサイズ
partedで拡大する手順はPhoton OSと同じだがopenSUSEはマウントされているドライブの操作を拒否するので、一時的にレスキューCDで作業する
手元のvmdkはsda3がルートファイルシステムであった
0:rescue:~ # mount /dev/sda3 /mnt 0:rescue:~ # btrfs filesystem resize max /mnt Resize '/mnt' of 'max'
zypperでアップグレードする
- 1行目:手動で追加したリポジトリを新しいバージョンに合わせる。
- 2行目:もとからあるリポジトリは引数でバージョン指定出来るのでバージョンを指定して更新する。
- 3行目:アップグレード実行
15.3はDVDISOから更新したほうがよさげ?
# sed -ri 's/15.1/15.2/g' /etc/zypp/repos.d/* # zypper --releasever=15.2 ref # zypper dup
Leapで利用可能な最新カーネル
TumbleweedとLeapの互換性がなくなっているので、Backportのカーネルを利用。
普通に検索しても出ないのでここにメモ
http://download.opensuse.org/repositories/Kernel:/stable:/Backport/standard/
Debian 11(bullseye) にOpenWebRXをインストールする
bullseyeはパッケージのバージョンが上がって互換性がなくなっているのでlibsoapysdr0.6 を手動でインストールする。
wget http://ftp.jp.debian.org/debian/pool/main/s/soapysdr/libsoapysdr0.6_0.6.1-4+b1_amd64.deb sudo dpkg -i libsoapysdr0.6_0.6.1-4+b1_amd64.deb
それ以外の必要なパッケージはそろっているので公式の手順通りにインストールする。
wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | apt-key add echo "deb https://repo.openwebrx.de/debian/ buster main" > /etc/apt/sources.list.d/openwebrx.list apt update apt install openwebrx
Debian のカーネルをクロスコンパイルしてdebパッケージを作る
ARM64向けのやつをビルドする。
- メインラインのカーネルツリーは特になのも追加しなくてもdebianのパッケージを作る機能が備わっている
- Debianで作業する(dpkg等があるならそれ以外でも可)
必須パッケージのインストール
apt install -y build-essential bc kmod cpio flex cpio libncurses5-dev bison libssl-dev apt install -y crossbuild-essential-arm64
ビルド
cd linux-source-6.10 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- oldconfig make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KDEB_PKGVERSION=1 -j`nproc` bindeb-pkg
ARM UEFI向けのGRUBをクロスコンパイルする
ビルドの構成とビルド
./configure --with-platform=efi --target=arm-linux-gnueabihf --host=x86_64-linux-gnu --prefix=/home/main/src/grub-2.04/out/ make -j40 & make install
hostに母艦を指定することで、ビルドしたbin/grub-*コマンドをそのまま使えるように指定しています。
bootarm.imgの作成
bootarm.efiに各種モジュールを組み込みます。 ビルドしたgrub-mkimgコマンドで作業します
./grub-mkimage -v -p '' -o bootarm.efi -O arm-efi acpi boot chain fdt fat ufs2 part_msdos part_gpt iso9660 gzio all_video gfxterm font terminal normal linux echo test search configfile cpuid minicmd
DD形式のイメージファイルを縮小
RUUやROMをビルドする方向けの情報となります。
原理とかは下記のサイトに載ってます。
$ sudo su # dd if=/dev/zero of=system_new.img bs=1M count=1500 # mkfs.ext4 system_new.img 質問にはyと答える。 # md out # mount ./system_new.img out # md in # mount ./system.img in # rsync -a ./in/ ./out/ # umount out # umount in # exit
mountコマンド関連
CIFS(samba)マウント
動画再生用マシンでファイル鯖から動画を引っ張ってくるため、読み取り専用(ro)と、
スピード重視だが複数クライアントから読み書きが発生するとファイルが破損する恐れがあるアルゴリズムを使用したキャッシュ(cache=loose)を指定
当方はActivedirectory環境だが単一ドメインのためADのドメイン名指定を行わずサーバー側で引いてもらう
mount -t cifs -o ro,cache=loose,username="ADのUSER" //IP or FQDN/share /target
強制アンマウント
umount: /target: target is busy.
umount -fl デバイスファイル(or マウントポイント)
Xinitとstartxの違い
startx
全ユーザー共通の/etc/X11/xinit/xinitrcを読んでから、ユーザーのホームにある~/.xinitrcを読み、起動する。
xinit
ユーザーのホームにある~/.xinitrcのみを参照しXを起動する。 もしくは指定した引数のファイルを直ちに起動する。
推奨パッケージのインストールを拒否する
Linuxのパッケージ管理システムには、推奨パッケージと称して大量のパッケージをまとめてインストールする機能が備わっている物があります。
特に、openSUSEで採用されているzypperはアップグレードの度に推奨パッケージの追加インストールを行うため処理時間が遅延したりします。
ディスク容量が肥大化したり、セキュリティ上の懸念が生じたりするため、最小構成のサーバーや、Rasberry Pi等の組み込み機器ではインストールを行わないようにすることが重要です。
なお、FedoraやCentOS向けのdnfやyumには推奨パッケージのインストール機能が無いようです。使ってないので知らん。
設定ファイルを変更する
毎回コマンドラインから指定するするのがめんどくさいので設定ファイルを変更しています。
Debian (apt)の場合
echo "APT::Install-Recommends 0;">> /etc/apt/apt.conf.d/01norecommends echo "APT::Install-Suggests 0;">> /etc/apt/apt.conf.d/01norecommends
よくDockerFileに書かれています。
openSUSE (zypper)の場合
/etc/zypp/zypper.confを変更
installRecommends = no
/etc/zypp/zypp.confを変更
solver.onlyRequires = false
違いがよく分からないのでどちらも記入しています。。。
コマンドラインから指定する
Debian (apt)の場合
apt --no-install-recommends
openSUSE(zypper)の場合
zypper --no-recommends
D-BusのマシンIDを変更する
hostnamectl等で表示されるやつ。
VMWareなどでマシンをクローンした場合、重複した状態になっておりk8sで事故が起きそうなのでランダム生成しなおす。
作業後、直ちに再起動する。
localhost:~ # rm /etc/machine-id localhost:~ # rm /var/lib/dbus/machine-id localhost:~ # dbus-uuidgen --ensure localhost:~ # cp /var/lib/dbus/machine-id /etc/machine-id
openSUSEの場合は当該のファイルを消して再起動すれば自動的に生成されるので、テンプレートを作成する前に消しておくと良い