Debian 9.4をクリーンインストールしました。
その備忘録デス
Debian 10でも同じです。(しょっちゅうインストールしている模様)
インストール中
途中、Gnomeが選択されています。ここでは、それを外し、選択は、最後に表示される2つだけにしています。ssh serverと、その他のツールのみです。
Gnomeの選択を外すと、インストールが高速化される印象であり、一方で、肝心なツールがインストールされない印象。そのため、インストール後に基本的な設定が必要になります。
インストール後
基本設定
必要なツールのインストール
# apt-get install -y net-tools
# apt-get install -y sudo
# apt-get install -y samba
# apt-get install -y xorg lxde-core xrdp tigervnc-standalone-server
# apt-get install -y x11vnc
# apt-get install -y rsync
# apt-get install -y qemu-kvm libvirt-clients qemu-utils libvirt-daemon-system virt-manager
# apt-get install -y mdadm
# apt-get install -y firmware-realtek
# apt-get install -y nfs-kernel-server
# apt-get install -y acpidump
# apt-get install -y task-japanese locales-all
# apt-get install -y ibus-mozc
# apt-get install -y nginx
# apt-get install -y build-essential
# apt-get install -y openvpn
# apt-get install -y sdparm
# apt-get install -y bridge-utils
# apt-get install -y lxc
# apt-get install -y freerdp
# apt-get install -y ansible sshpass
Sudoersの変更
#vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
myid ALL=NOPASSWD: ALL <<==追記
myid ALL=NOPASSWD: ALLを追記
これで、sudoするときに、パスワードなしで実行できるようになります。
好みですが、パスワード不要派はドウゾ
sudo で、DISPLAYを正しく動かす設定
alias sudo='sudo XAUTHORITY=/home/myid/.Xauthority'
もしくは、単純に.bashrcで、exportしておく
export XAUTHORITY=$HOME/.Xauthority
これで、sudo gpartedとかいけるはず
sambaの変更
ユーザ登録をします。
$ sudo pdbedit -u myid -a
$ sudo systemctl restart smbd nmbd
xrdpの設定
とくに、難しいこともなく、単純にインストール。
$ sudo apt-get install -y xrdp tigervnc-standalone-server
$ sudo systemctl start xrdp
$ sudo systemctl enable xrdp
このあと、お気に入りのセッション設定を、/etc/xrdp/xrdp.iniに記述します。
;
; Session types
;
[myhost]
name=myhost
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
#xserverbpp=24
#delay_ms=2000
違う端末から、同じセッションに入れるようにするには、次の"param8"と"param9"おまじないが必要
これを入れないと、クライアントAで起動した5910セッションに、クライアントBからはいれない
[Xvnc]
param=Xvnc
param=-bs
param=-nolisten
param=tcp
param=-localhost
param=-dpi
param=96
param8=-SecurityTypes
param9=None
リモートデスクトップで接続する
.xsessionファイルの立ち上げ。これがないと、xrdpにつないだ後、エラーがでる。そもそもコンソールでもstartxが動かないので、設定漏れに気づくハズ。
$ echo "lxsession -e LXDE" > ~/.xsession
コンソールのログイン画面をCUIにしておくためのコマンド
$ sudo systemctl stop lightdm.service
$ sudo systemctl disable lightdm.service
xrdpの設定 - Ubuntu 22.04 2022 Spring
22.04のプレリリースから、2022年6月現在、apt install xrdpでインストールしたxrdpでは、動かない事象が発生中。(上記の手順でのインストールはだめ。他のは不明、たとえば、lxde以外のDEのケースなど)
[INFO ] error loading libvnc.so specified in xrdp.ini, please add a
[INFO ] valid entry like lib=libxrdp-vnc.so or similar
このような感じで、libvnc.soが読めないようなエラーが発生。
しかたがないので、野良ビルドします。手順は、 本家のままです。
wget https://github.com/neutrinolabs/xrdp/releases/download/v0.9.19/xrdp-0.9.19.tar.gz
tar xvf xrdp-0.9.19.tar.gz
cd xrdp-0.9.19
./
vncserverの設定
xrdpに乗り換えたので、xrdpの項とちょっとつじつまが合わない箇所あり
$ sudo apt-get install -y xorg lxde-core tightvncserver
このあと、.vnc/xstartupに、次の一文を加える
/usr/bin/startlxde &
lxdeをブート時に立ち上がらないようにする呪文
$ sudo systemctl set-default multi-user.target
vncserverを起動時に自動起動させる
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Default-Start: 3 4 5
# Default-Stop: 0 6
### END INIT INFO
. /lib/lsb/init-functions
case "$1" in
start)
log_action_begin_msg "Starting vncserver"
su myid -c "/usr/bin/vncserver"
;;
stop)
log_action_begin_msg "Stoping vncserver"
su myid -c "/usr/bin/vncserver -kill :1"
;;
restart)
$0 stop
$0 start
;;
esac
exit 0
これをサービスに登録
$ sudo update-rc.d vncserver default
ホストの画面をvncで流す
遠くにあるホストの画面を操作したいときの設定
$ sudo systemctl start lightdm
$ sudo apt-get isntall x11vnc
$ sudo x11vnc -display :0 -auth /var/run/lightdm/root/:0
lightdmの例ですが、次のコマンドで、どこを見ればいいかはわかる
$ ps wwwwaux | grep auth
(snip) /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
kvm/qemu/libvirtの設定
# apt-get install -y qemu-kvm libvirt-clients qemu-utils libvirt-daemon-system virt-manager ovmf
# adduser <youruser> libvirt
# adduser <youruser> libvirt-qemu
uefi bootが必要なら、ovmfが必要
virt-manager (GUI) が必要なら、virt-managerが必要。
ブリッジbr0を作る
auto br0
iface br0 inet static
address 192.168.x.y
netmask 255.255.255.0
network 192.168.x.0
broadcast 192.168.x.255
gateway 192.168.x.1
dns-nameservers 192.168.x.1 8.8.8.8
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
auto eth0
iface eth0 inet manual
mdadmの設定
mdadmで、データ用ディスクのraid1を実施します。
# mdadm --create /dev/md20 --level=raid1 --raid-devices=2 /dev/sdc1 /dev/sdc2
# mdadm --assemble /dev/md20 /dev/sdc1 /dev/sdc2
注意
新しく作るときは、create
既存のraidを戻すときは、assemble
assembleのときは、raidの条件は、デバイスから読みだされて設定されます
/etc/mdadm/mdadm.confへ、情報を追記
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
fstabへの登録
$ sudo dumpe2fs /dev/md20 | grep UUID
$ sudo ls /dev/disk/by-uuid/ <--確認用
ここで表示されるUUIDを利用して、fstabへ登録
formatが必要な場合
# fdisk /dev/sdx
# mkfs.ext4 /dev/sdx1
firmware-realtekの設定
そもそも、mdadmをインストールしたら、次のメッセージを受信
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8107e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8107e-1.fw for module r8169
...
気持ち悪いので、消しにかかります。
https://unix.stackexchange.com/questions/445673/possible-missing-firmware-update-in-debian-9-4
ここの情報のまんま。いちおう、怒られているチップセットは、realtekのものなので、installは、ffirmware-realtekのみ実施。
#sed -i.bak 's/stretch[^ ]* main$/& contrib non-free/g' /etc/apt/sources.list
#apt-get update
#apt-get install -y firmware-realtek
#update-initramfs -u
debian 9.4なので、stretchを対象にしています。
debian 10では、busterになります。sed で指定しているstretchを読み替えてください。
もしくは、直接、source.listを変更してもヨシです。mainのあとに、contrib non-freeを追記していくだけです。
nfs-kernel-serverの設定
$ sudo apt-get install -y nfs-kernel-server
その後、/etcにexportsができるので、そこを編集
/home 192.168.1.0/255.255.255.0(rw,sync,no_wdelay,no_root_squash)
/mydir 192.168.1.0/255.255.255.0(rw,sync,no_wdelay,no_root_squash)
nginxの設定
設定ファイルは、次のもの
/etc/nginx/nginx.conf
/etc/nginx/sites-enabled/default
defaultのroot情報を書き換えると、任意の場所に、rootの位置を変更できる。デフォルトは、/var/www/html。
そこに、index.nginx-debian.htmlがある
phpは、別途ツールを入れないと動かない
$ sudo apt-get install php7.0-fpm
$ sudo systemctl start php7.0-fpm
(Still, To Be Filled)
openvpn serverの設定
複数のサーバを起動するときには、systemctrlでの指定を工夫する
# systemctl start openvpn@(thefirst)
# systemctl start openvpn@(thesecond)
thefirst.confとthesecond.confが、/etc/openvpn/配下に存在すること
これで、複数のopenvpnが1台のサーバで提供可能
TUNのときは、以下の設定を忘れないようにしましょう
- /etc/sysctl.conf: net.ipv4.ip_forward=1
- if-up.shとif-down.shを更新して、接続時にiptablesでサブネットをつなぐ
外付けHDDの節電設定 (sdparm)
# sdparam -S 5 /dev/sdx
とすると、hddのスピンを止めることができるらしいが、うちの環境では動いていない
Bridgeの設定
以下を追記
auto br0
iface br0 inet static
address 192.168.0.2/24
gateway 192.168.0.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.1.1
# br
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
もし、eth0にdhcpでアドレスが割り振られている場合は、解除することも可能
# ip addr del <dhcp ip> dev eth0
lxc
残念ながら、Debian (10.4も) では、lxdは、apt-getできないので、lxcをapt-getします。(snapで、lxdがはいるらしいですが、挑戦せず)
$ sudo apt-get install -y lxc
設定は面倒なので、sudoでのみ利用
$ sudo lxc-create -t download -n newvm
$ sudo lxc-start -n newvm
$ sudo lxc-attach -n newvm
もし、エラーが出たら、認証をやめることで、回避可能。自己責任でお願いします。
$ sudo lxc-create -t download -n newvm
Setting up the GPG keyring
ERROR: Unable to fetch GPG key from keyserver
lxc-create: newvm: lxccontainer.c: create_run_template: 1617 Failed to create container from template
lxc-create: newvm: tools/lxc_create.c: main: 327 Failed to create container newvm
$ sudo lxc-create -t download -n newvm -- --no-validate
Downloading the image index
WARNING: Running without gpg validation!
システム設定
UID/GIDの変更
Linuxでは、UID/PIDがユーザ名で、かつ、1000:1000で登録されてしまいます。
長年、違う番号を使っていたのと、家族のGroupが1000なので、変更する。
# groupmod -g 1001 mygrp
# usermod -u 1001 -g 1001 myid
# groupadd -g 1000 home
Userの追加
ほかの人のIDを追加します。
# groupadd -g 1002 hoge
# useradd -u 1002 -g 1002 -m -d /home/hoge hoge
groupへ追加する
usermod -a -G newgrp hoge
グループ名そのものを変更する場合
groupmod --new-name newgname currentgname
ほかのユーザのidを参考にする手順
$ id -G hoge ; -Gで、数字のみ一覧表示
$ sudo usermod -a -G a,b,c,d,e hoge ; -Gに、","区切りで連結できる
lxdeメニューにアプリケーションを追加する
google-chromeで、プロファイルを使い分けて、メニューに登録します。google-chrome2.desktopはお好きな名前に変えてください。
$ cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/google-chrome2.desktop
$ vi ~/.local/share/applications/google-chrome2.desktop
変更箇所は、2箇所
- Name = メニュー表示時に表示される名前になる
- Exec = 実際に起動されるプログラム (3箇所ある)
たとえば、以下のような感じに変更します。
Name=Google Chrome2
Exec=/usr/bin/google-chrome --user-data-dir=.config/google-chrome2 --enable-crashpad
sshするとき、パスワードフリーにする
$ ssh-copy-id -i ~/.ssh/id_rsa.pub myid@myhost
Swapファイルの設定
パーティションを分けるのが嫌いなので、基本、swapファイルを作成して登録、運用しています。
8ギガのマシンなので、大体半分くらいとっておこう、という感じ
$ sudo mkdir /swap
$ sudo dd if=/dev/zero of=/swap/swap.img bs=1M count=4096
$ sudo chmod 600 /swap/swap.img
$ sudo mkswap /swap/swap.img
$ sudo swapon /swap/swap.img
ファイルのコピー
rsyncを使う。
rsync -av --bwlimit=10000 (from) (to)
Bandwidthがないと、rsyncが全力でコピーするので、ほかの作業がのろくなる。
ファイルのコピー2
$ ionice -c3 nice -n 19 sudo rsync -axHAWXS --numericids --delete --info=progress2 / /mnt/root
ここでのprogress2は、あまり役に立たないですが、おまじない。
また、負荷制御として、bwlimit=10000 と指定してもいいですが、サーバの負荷がないときも、律儀に帯域制限をかけてしまうので、やめた。
ファイルのコピー3
特定の時間以降のものをコピーする方法。rsyncとfindを組み合わせます。
rsync --progress --files-from=<(find digi -mtime -3 -type f) /(from)/ /(to)
findでは、コマンドから下のディレクトリが参照されるので、そこに合わせて、fromとtoを設定する必要があります。話を簡単にするには、”/”ルートからたどるようにすればよい。
この例は、"-3"なので、3日前から、現在までのファイルををコピーします。
大きなファイルを探し出す
duを使って掘っていく。max-depthで、掘り進める深度が指定できる。
あとは、大きい順にソートするだけ
sudo du -h --max-depth=1 --exclude="hoge" / | sort -hr
cpanの呪縛
perlな人なので、perlを入れる。
cpanでうまく入らない場合は、apt-getでやってみる
# apt-get install -y libXXX-YYY-ZZZ-perl
XXX, YYY, ZZZは、XXX::YYY::ZZZにそれぞれ相当。
cpan installでうまくいかなければ、apt-getか、cpanコンソールから、install。
crontabの再設定
$ crontab -e
で編集されるファイルは、次のところにある
/var/spool/crontabs/myid
必要なタスクをコピペすればOK
Node.jsのインストール
素直なaptではなかったので、こちらに記載
$ sudo apt-get install -y curl
# curl -sL https://deb.nodesource.com/setup_12.x | bash -
$ sudo apt-get install -y nodejs
IPv6を中止
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
umountで困ったら
# umount -f
# umount -l
"-f"でだめなら、"-l"でやってみる
Timezone
en-usモードでインストールすると、アメリカ時間しか設定できないので、以下の作業が必要
sudo timedatectl set-timezone Asia/Tokyo
2画面、左右制御
- xrandrでデバイス名を確認
- xrandr (option)で入れ替え
$ xrandr
Screen 0: minimum 320 x 200, current 4480 x 1440, maximum 8192 x 8192
HDMI-1 connected primary 1920x1080+2560+0 (normal left inverted right x axis y axis) 477mm x 268mm
1920x1080 60.00*+ 60.00 50.00 59.94
1920x1080i 60.00 60.00 50.00 59.94
1680x1050 59.88
1280x1024 60.02
1280x960 60.00
1152x864 59.97
1280x720 60.00 60.00 50.00 59.94
1024x768 60.00
800x600 60.32
720x576 50.00
720x480 60.00 60.00 59.94 59.94
640x480 60.00 59.94 59.94
HDMI-2 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 280mm x 150mm
2560x1440 59.95*+ 49.96
1920x1080 60.00 60.00 50.00 59.94
1920x1080i 60.00 59.94
1400x1050 59.95
1280x1024 75.02 60.02
1440x900 59.90
1280x960 60.00
1280x720 60.00 60.00 59.94
1024x768 75.03 70.07 60.00
800x600 72.19 75.00 60.32 56.25
640x480 75.00 72.81 60.00 59.94
720x400 70.08
$ xrandr --output HDMI-1 --right-of HDMI-2
うちの環境は、2Kが左、FHDが右にある。2K(=HDMI-2)の右にFHD(=HDMI-1)を持ってくるようにオプションを指定。コマンド投入直後に、左右が入れ替わる。
debianからxrdpサーバへ接続
いつもは、Windows PCから接続しますが、たまにxrdpを動かしているサーバそのものから、アクセスする必要が出てきたので、試した。
まずは、freerdpのインストール
$ sudo apt-get install freerdp
単純に起動すると、以下のエラーで、起動が妨げられる
$ xfreerdp 192.168.0.2
(snip)
[xx:xx:xx:308] [2596:2597] [ERROR][com.freerdp.core.update] - [0x03] Cache Glyph - SERVER BUG: The support for this feature was not announced! Use /relax-order-checks to ignore
(snip)
これを回避するには、いろいろとオプションをつける必要がある。
- +glyph-cache
- /relax-order-checks
また、こいつらを指定するとオプションの付け方がいろいろ変わり、最終的には、次で起動。
$ xfreerdp /w:1920 /h:1080 /v:192.168.0.2 +glyph-cache /relax-order-checks
/w: /h: 1920x1080
/v: xrdp server
DockerをKVM環境に同居させたら、iptablesの設定がおかしくなった
ホストマシン以外からpingを打ったり、仮想マシンからpingを打っても、通らなくなる事象が発生。ipbalesを書き換えることで対応
$ sudo iptables -A FORWARD -i br0 -o br0 -j ACCEPT
出来心でインストールしたDockerでひどい目にあった
lxcのあれこれ
debianでは、lxdがapt-getできないので、がんばってlxcを使います。
設定は、次のところにあるconfigを操作します。
/var/lib/lxc/{machine}/config
機能 | 変数名 | 値 |
---|---|---|
自動起動の設定 | lxc.start.auto | 0:off, 1:on |
tun生成-1 | lxc.cgroup.devices.allow | c 10:200 rwm |
tun生成-2 | lxc.mount.entry | /dev/net/tun dev/net/tun none bind,create=file |
apparmorで引っかかったら | lxc.apparmor.profile | unconfined |
tunは見にくいので、以下に参考
lxc.cgroup.devices.allow = c 10:200 rwm
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
これがあれば、lxc内のコンテナで、openvpnやsoftehterのようなtunを利用するvpnの構築が可能になります。
softether(client)の場合は、tunに対して、dhcpの設定も必要です。(ubuntuならnetplanに追記する)
また、忘れがちですが、/etc/sysctl.confへ、ip forwardの設定を忘れると通信しません。
インストール時、認証エラーで止まる場合は、次の呪文を追加する
$ sudo lxc-create -n mymachine -t download -- --no-validate
apparmorのエラーで引っかかった場合のおまじない
lxc.apparmor.profile=unconfined
watchの代わりにwhileを使う
コマンドをループさせるのに、watchがありますが、時系列に追いにくいので、whileでやる。
while [ 1 ]; do df | grep sda1; sleep 5;done
shell scriptのgetoptsを使う
#!/bin/sh
while getouts ab:c: options
do
case $options in
a)
echo "option a. without an arg"
;;
b)
echo "option b. with an arg, ${OPTARG}"
argb=$OPTARG
;;
c)
echo "option c. with an arg, ${OPTARG}"
argc=$OPTARG
;;
\?)
echo "Unknown params. Quit!!"
exit 1
esac
done
引数が必要な場合、":"を文字の後ろに入れること
上記例だと、aは引数なし。b,cは引数あり。引数ありの場合、どちらもOPTARGという名前の変数に入るので、都度、別の変数への引き渡しが必要。
引数の獲得(OPTARGが値を持つ)に":"が必要だということがわからず、ハマった。
bluetoothを使う
$ bluetoothctl devices
$ bluetoothctl remove xx:xx:xx:xx:xx:xx
$ sudo bluetoothctl scan on
$ bluetoothctl connect xx:xx:xx:xx:xx:xx
devicesで、接続されているものを表示。
切断するには、removeする
scanで、対象のデバイスを探せる
connectで、対象のデバイスを接続する
ubuntuをインストールしたら、使っている環境のせいで、default gwが引けない問題
dhcpサーバの問題で、dhcpクライアントが、default gwを引っ張ってくれない。そんなときは、netplanを改版して頑張る
network:
version: 2
ethernets:
eth0:
dhcp4: true
routes:
- to: 0.0.0.0/0
via: 192.168.0.1
default gwで検索をかけても見つからなかったので、素直に普通のルート追加にした。
最新のカーネルを使う
ホストを入れ替えたら、ehternet(realtek r8111)もwifi(Intel AX200)も認識してくれない。Googleとbackportsを使えと出てきたので、その記録。
健気に、apt update/upgradeをしたら、上書きされるっぽいので、根気よく続ける必要がありそう。
echo deb http://deb.debian.org/debian buster-backports main contrib non-free | sudo tee /etc/apt/sources.list.d/buster-backports.list
sudo apt update
sudo apt install -t buster-backports linux-image-amd64
sudo apt install -t buster-backports firmware-linux
sudo apt install -t buster-backports firmware-iwlwifi
起動ディスクの引っ越し
起動中に、他のディスクへ引っ越し
/dev/sdaXに現運用データ、/dev/sddXがコピー先と仮定。
新しいディスクの番号を確認
dmesgで表示されているのもから、対象を引っ掛ける。今回は、Samsungの2.5inchのディスクなので、"sams"で検索。その後、idが5とわかったので、"sd 5"で追加検索。
$ sudo dmesg | grep -i "sams\|sd 5"
[ 1.685085] ata6.00: ATA-11: Samsung SSD 860 QVO 1TB, RVQ01B6Q, max UDMA/133
[ 1.794282] scsi 5:0:0:0: Direct-Access ATA Samsung SSD 860 1B6Q PQ: 0 ANSI: 5
[ 1.796952] sd 5:0:0:0: [sdd] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
[ 1.796954] sd 5:0:0:0: [sdd] Write Protect is off
[ 1.796955] sd 5:0:0:0: [sdd] Mode Sense: 00 3a 00 00
[ 1.796959] sd 5:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.798308] sd 5:0:0:0: [sdd] supports TCG Opal
[ 1.798308] sd 5:0:0:0: [sdd] Attached SCSI disk
[ 4.446208] sd 5:0:0:0: Attached scsi generic sg3 type 0
フォーマット
もとのファイルとおなじようになるように、partedを利用。
もとの構成。mdadmを利用しているので、raidになっていますが、気にしない。
$ sudo parted /dev/sda u s p
Model: ATA ST2000LM015-2E81 (scsi)
Disk /dev/sda: 3907029168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 124927s 122880s fat32 boot, esp
2 124928s 3907028991s 3906904064s raid
これと同じようになるように、操作していく。ただし、容量が違うので、2番目は、ディスクの最大サイズを指定する。
$ sudo parted /dev/sdd
GNU Parted 3.2
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u s p
Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sdd: 1953525168s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdd will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) p
Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sdd: 1953525168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
(parted) mkpart
Partition name? []?
File system type? [ext2]? fat32
Start? 2048s
End? 124927s
(parted) p
Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sdd: 1953525168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 124927s 122880s fat32
(parted) set 1 esp on
(parted) p
Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sdd: 1953525168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 124927s 122880s fat32 boot, esp
(parted) mkpart
Partition name? []?
File system type? [ext2]? ext4
Start? 124928s
End? 1953525167s
Warning: You requested a partition from 124928s to 1953525167s (sectors
124928..1953525167).
The closest location we can manage is 124928s to 1953525134s (sectors
124928..1953525134).
Is this still acceptable to you?
Yes/No? yes
(parted) p
Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sdd: 1953525168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 124927s 122880s fat32 boot, esp
2 124928s 1953525134s 1953400207s ext4
(parted) q
Information: You may need to update /etc/fstab.
$ sudo mkfs.vfat -v -F 32 /dev/sdd1
mkfs.fat 4.1 (2017-01-24)
/dev/sdd1 has 255 heads and 63 sectors per track,
hidden sectors 0x0800;
logical sector size is 512,
using 0xf8 media descriptor, with 122880 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 1 sector per cluster.
FAT size is 945 sectors, and provides 120958 clusters.
There are 32 reserved sectors.
Volume ID is 83eac85f, no volume label.
$ sudo mkfs.ext4 -v /dev/sdd2
mke2fs 1.44.5 (15-Dec-2018)
fs_types for mke2fs.conf resolution: 'ext4'
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
61046784 inodes, 244175025 blocks
12208751 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2392850432
7452 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Filesystem UUID: 5a4ca314-e967-42fb-bc72-825334073196
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
ファイルをコピー
$ sudo mkdir /mnt
$ sudo mount /dev/sdd2 /mnt
$ sudo rsync -avP --exclude='/backup' --exclude='/home/kvm' --exclude='/boot/efi/EFI' --exclude='/dev' --exclude='/mnt' --exclude='/proc' --exclude='/sys' --exclude='/tmp' / /mnt
$ sudo mount /dev/sdd1 /mnt/boot/efi
$ sudo rsync -avP /boot/efi/ /mnt/boot/efi
$ sudo mkdir /mnt/dev
$ sudo mount --bind /dev /mnt/dev
$ sudo mkdir /mnt/dev/pts
$ sudo mount --bind /dev/pts /mnt/dev/pts
$ sudo mkdir /mnt/proc
$ sudo mount --bind /proc /mnt/proc
$ sudo mkdir /mnt/sys
$ sudo mount --bind /sys /mnt/sys
$ sudo chroot /mnt
# grub-install /dev/sdd
Installing for x86_64-efi platform.
Installation finished. No error reported.
# update-grub
Generating grub configuration file ...
(snip)
# exit
$ findmnt
$ sudo umount /mnt/sys/fs/fuse/connections
$ sudo umount /mnt/sys
$ sudo umount /mnt/proc
$ sudo umount /mnt/dev/pts
$ sudo umount /mnt/dev
$ lsblk -f /dev/sdd
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sdd
├─sdd1
│ vfat 83EA-C85F
└─sdd2
ext4 5a4ca314-e967-42fb-bc72-825334073196 496.4G 41% /mnt
$ sudo vi /mnt/etc/fstab # update uuid in fstab
$ sudo umount /mnt
再起動
uuidの変更ができたら、おしまい。あとは、biosから、こちらの新しいhdd(sdd)を選択して、起動。正しく設定できていれば、こちらから起動するはず。(/dev/sddXがroot(/)になっていることが確認できます。)
$ sudo reboot
(snip)
$ df | grep sdd
/dev/sdd2 960321244 390952068 520517788 43% /
/dev/sdd1 60479 3330 57150 6% /boot/efi
番外編
サブネット間をつなぐ
自宅(eth0):192.168.0.0/24 と 接続先(vpn0):172.16.0.0/16 とをつなぐ際の設定。中継するサーバに、次の設定をします。
# iptables -A FORWARD -i eth0 -o vpn0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o vpn0 -s 192.168.0.0/24 -j MASQUERADE
# iptables -A FORWARD -i vpn0 -o eth0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j MASQUERADE
同一サブネットにいる他のPCでは、routeの設定が必要。192.168.0.1は、中継サーバのIPアドレス
# route add -net 172.16.0.0/16 gw 192.168.0.1
仮想イメージの容量変更
$ qemu-img resize -f raw <filename> <size>G/M/K
<attach to some vm>
$ sudo fdisk /dev/vdx
fdisk> p
fdisk> d
fdisk> n (p/1/2048/<max>/no)
fdisk> p
fdisk> w
$ sudo e2fsck /dev/vdxy
$ sudo resize2fs /dev/vdxy
virshでusbを接続する
usbだけに、hotplugしたい衝動にかられます。簡単にできたので、記録。
接続したいusbの情報を確認する
$ lsusb
Bus 002 Device 001: ID XXXX:XXXX Linux Foundation 3.0 root hub
Bus 001 Device 005: ID XXXX:XXXX Logitech, Inc. Unifying Receiver
Bus 001 Device 016: ID abcd:0123 ABCD, My Target
Bus 001 Device 001: ID XXXX:XXXX Linux Foundation 2.0 root hub
lsusbで、まず、ターゲットのid情報を入手。ここでは、"abcd:0123"。これを、xmlに仕立てる。
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<vendor id='0xabcd'/>
<product id='0x0123'/>
</source>
</hostdev>
このファイルを用いて、attach, detachすればOK
# virsh attach-device <vmname> --file myusb.xml
# virsh detach-device <vmname> --file myusb.xml
デバイスIDが変わっても有効なので、便利です。
/usr/local/lib にパスを通す
LD_LIBRARY_PATHでもいいのですが、別のやり方をメモ
# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
# ldconfig
Qtが入っていないと怒られた
厳密には、Ubuntuの話になります (Debian -> KVM -> ubuntu 20.04 でUbuntu入っています)
During initialization the error "/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/ubuntu/.local/lib/python3.8/site-packages/PyQt5/QtCore.abi3.so)" occurred in /usr(snip)
という形でエラーが出たときの解決方法デス
$ pip3 uninstall PyQt5
$ sudo apt-get install python3-pyqt5
これでエラーは解消します。
ansibleでセットアップする
$ ansible-playbook -i (target) (ansible.yaml)
機械学習関係
venvを使う場合は、先にpython3-venvをインストールしましょう
$ sudo apt-get install python3-venv
OpenCV
$ python3 -m pip install -U opencv-python
$ python3 -m pip install -U opencv-python-headless
$ python3 -m pip install -U opencv-contrib-python
自己ビルドの場合
$ wget https://github.com/opencv/opencv.git
$ wget https://github.com/opencv/opencv_contrib.git
$ cd opencv
$ mkdir build
$ cd build
$ cmake -DWITH_CUDA=ON -DWITH_CUFFT=ON -DWITH_CUBLAS=ON -DWITH_NVCUVID=ON -DWITH_TBB=ON -DMKL_WITH_TBB=ON \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../
$ make -j N (N = num of cpu core)
CUDAを利用するには、CUDA系のパラメータをONにする必要がある
Tensorflow
$ python3 -m pip install -U tensorflow-gpu
GPUが動くかは、本家にプログラムがあるので、それで確認しましょう。
$ python3
>>> import tensorflow as tf
>>> gpu_available = tf.test.is_gpu_available()
>>> print("GPU: ", gpu_available)
GPU: True
>>> is_cuda_gpu_available = tf.test.is_gpu_available(cuda_only=True)
>>> print("CUDA:", is_cuda_gpu_available)
CUDA: True
複数のCUDAをインストールした場合
/usr/local 配下に複数のCUDAが現れます。
$ ls -1F /usr/local/ | grep cuda
cuda@
cuda-12@
cuda-12.1/
cuda-12.3/
update-alternativesで管理されているか確認
$ update-alternatives --display cuda
cuda - manual mode
link best version is /usr/local/cuda-12.3
link currently points to /usr/local/cuda-12.1
link cuda is /usr/local/cuda
/usr/local/cuda-12.1 - priority 121
/usr/local/cuda-12.3 - priority 123
ここでは、12.1と12.3で管理されていることが確認できます。
$ update-alternatives --config cuda
There are 2 choices for the alternative cuda (providing /usr/local/cuda).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/local/cuda-12.3 123 auto mode
* 1 /usr/local/cuda-12.1 121 manual mode
2 /usr/local/cuda-12.3 123 manual mode
Press <enter> to keep the current choice[*], or type selection number:
ここで、変更する際は、番号を入れます。今回は、cuda-12.1を選択中となります。