linux

Linuxに関するメモ

Namespace Root
目次

項目
ユーザー名 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 

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

現在やってる設定はこちら。

一部のキーワードが異なるだけでやり方は上の段落の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

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

本当に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'
  • 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

TumbleweedとLeapの互換性がなくなっているので、Backportのカーネルを利用。

普通に検索しても出ないのでここにメモ

http://download.opensuse.org/repositories/Kernel:/stable:/Backport/standard/

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

ARM64向けのやつをビルドする。

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
./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.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

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

動画再生用マシンでファイル鯖から動画を引っ張ってくるため、読み取り専用(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 マウントポイント)

全ユーザー共通の/etc/X11/xinit/xinitrcを読んでから、ユーザーのホームにある~/.xinitrcを読み、起動する。

ユーザーのホームにある~/.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

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の場合は当該のファイルを消して再起動すれば自動的に生成されるので、テンプレートを作成する前に消しておくと良い