正在安装Debian操作系统

我进行了Debian 9.4的清洁安装。
这是我的备忘录。

在Debian 10上也是一样的。(好像经常进行安装)

安装中

在旅途中,选择了Gnome。在这里,将其移除,只留下最后显示的两个选择:SSH服务器和其他工具。移除Gnome的选择会加快安装速度,但同时也会缺少重要的工具安装。因此,在安装后需要进行基本设置。

安装后 (An

基本设置

安装必要的工具

# 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

修改Sudoers文件

#vi /etc/sudoers

# User privilege specification
root    ALL=(ALL:ALL) ALL
myid    ALL=NOPASSWD: ALL  <<==追記

请添加 myid ALL=NOPASSWD: ALL。这样,在使用sudo时就可以无需密码执行了。尽管这是个人偏好,但喜欢不需要密码的朋友可以使用。

桑巴的修改

我要进行用户注册

$ 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″咒语。如果不使用这些咒语,客户端B将无法加入客户端A启动的5910会话。

[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春季

从22.04的预发布版到2022年6月,使用apt install xrdp安装的xrdp存在无法运行的问题。(通过上述步骤进行安装是不可行的,其他情况尚不清楚,例如,使用lxde以外的桌面环境等)。

[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启动,那就需要ovmf。
如果需要图形用户界面的virt-manager,那就需要virt-manager。

创建一个名为br0的桥接(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工具,执行数据磁盘的RAID 1。

# mdadm --create /dev/md20 --level=raid1 --raid-devices=2 /dev/sdc1 /dev/sdc2
# mdadm --assemble /dev/md20 /dev/sdc1 /dev/sdc2

请注意:
当您需要创建新的RAID时,请使用以下命令:create
当您需要重新组装现有的RAID时,请使用以下命令: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中。

如果需要格式,请提供格式

# fdisk /dev/sdx
# mkfs.ext4 /dev/sdx1

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

因为感觉不舒服,我要把它删除。
URL链接的信息就是如此。总之,因为被提到的芯片组是realtek的,所以只需安装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

如果修改默认的根节点信息,可以将根位置更改到任意位置。默认位置为/var/www/html。在那里会有index.nginx-debian.html。

只有安装了额外的工具,PHP才能正常运行。

$ sudo apt-get install php7.0-fpm
$ sudo systemctl start php7.0-fpm

(仍然需要填写)

OpenVPN服务器的配置

在启动多个服务器时,需要在systemctrl中进行指定的设计。

# systemctl start openvpn@(thefirst)
# systemctl start openvpn@(thesecond)

第一个.conf和第二个.conf必须存在于/etc/openvpn/文件夹下
这样,就可以在一台服务器上提供多个OpenVPN服务

在TUN时,请确保不要忘记以下设置。

    • /etc/sysctl.conf: net.ipv4.ip_forward=1

 

    if-up.shとif-down.shを更新して、接続時にiptablesでサブネットをつなぐ

外接硬盘的省电设置(sdparm)

# sdparam -S 5 /dev/sdx

如果说,似乎可以停止HDD的旋转,但在我们的环境下却没有起作用。

桥梁的设置

请在下方添加更多信息

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

容器

很遗憾,Debian (10.4 版本也是如此),无法通过 apt-get 安装 lxd,所以我们使用 apt-get 安装 lxc。(似乎可以通过 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。由于使用了不同的编号很多年,并且家庭组的ID为1000,所以需要进行更改。

# groupmod -g 1001 mygrp
# usermod -u 1001 -g 1001 myid
# groupadd -g 1000 home

增加用户

添加其他人的ID。

# groupadd -g 1002 hoge
# useradd -u 1002 -g 1002 -m -d /home/hoge hoge

将其添加到群组中

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

更改的地方有两个地方。

    • 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文件进行注册和操作。
因为这是一台8GB的机器,所以大约要保留大约一半左右的空间。

$ 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)

如果没有带宽,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″,所以要复制从三天前到现在的文件。

找到大文件

使用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

如果 cpan install 不起作用,尝试使用 apt-get 或者通过 cpan 控制台进行 install 。

重新设定 crontab

$ crontab -e

文件的编辑位置如下。

/var/spool/crontabs/myid

只要复制粘贴所需的任务就可以了。

安装Node.js

因为这不是一个真诚的言辞,所以我将在这里进行记录。

$ 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”来做。

时区

如果您选择以en-us模式进行安装,那么只能设置美国时间,因此需要进行以下操作。

sudo timedatectl set-timezone Asia/Tokyo

双画面,左右控制

    • 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

分辨率是1920×1080的,xrdp服务器的设置。

如果将Docker与KVM环境共存,那么iptables的配置就会出问题。

从除了主机之外的设备上ping主机,或从虚拟机上ping主机都会发生无法通过的情况。通过更改iptables来进行应对。

$ sudo iptables -A FORWARD -i br0 -o br0 -j ACCEPT

使用自己的心安装了Docker,结果遭遇了糟糕的经历。

lxc的一切

由于在Debian上无法通过apt-get安装lxd,因此我们努力使用lxc。

要进行设置,请操作位于config中的下一个位置。

/var/lib/lxc/{machine}/config
機能変数名値自動起動の設定lxc.start.auto0:off, 1:ontun生成-1lxc.cgroup.devices.allowc 10:200 rwmtun生成-2lxc.mount.entry/dev/net/tun dev/net/tun none bind,create=fileapparmorで引っかかったらlxc.apparmor.profileunconfined

由于tun不容易看清,因此以下提供参考。

lxc.cgroup.devices.allow = c 10:200 rwm
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file

如果有这个,你可以在LXC容器中构建使用tun的VPN,例如OpenVPN或SoftEther。

如果使用SoftEther(客户端),需要对tun进行DHCP设置(如果是Ubuntu,则在netplan中添加)。另外,容易忽略的是,如果忘记在/etc/sysctl.conf中设置ip forward,则无法进行通信。

如果在安装时遇到认证错误并停止,请添加以下的咒语。

$ sudo lxc-create -n mymachine -t download -- --no-validate

如果发生了AppArmor错误,可以尝试这个咒语。

lxc.apparmor.profile=unconfined

使用“while”代替“watch”。

虽然有 watch 命令来循环执行操作,但由于它不太适合按时间顺序执行,所以我们可以使用 while 来实现。

while [ 1 ]; do df | grep sda1; sleep 5;done

使用shell脚本的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具有值)需要用 “:”,所以陷入了困境。

使用蓝牙

$ bluetoothctl devices
$ bluetoothctl remove xx:xx:xx:xx:xx:xx
$ sudo bluetoothctl scan on
$ bluetoothctl connect xx:xx:xx:xx:xx:xx

在设备上显示连接的物品。
要断开连接,请移除(remove)。
通过扫描(scan)来查找目标设备。
通过连接(connect)来连接目标设备。

一旦安装了Ubuntu,由于使用的环境的原因,导致无法检索到默认网关的问题。

由于DHCP服务器的问题,DHCP客户端无法获取默认网关。在这种情况下,修改Netplan并努力解决。

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      routes:
        - to: 0.0.0.0/0
          via: 192.168.0.1

由于在默认网关中无法找到搜索结果,所以我选择了直接添加常规路由。

使用最新的内核

当更换了主机后,以太网(Realtek R8111)和无线网卡(Intel AX200)都无法被识别。出现提示要使用Google和补丁程序,所以记录了下来。
为了坚持下去,我顽强地进行了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的显示,找到目标设备。这次是三星的2.5英寸硬盘,所以用”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

按照这个进行操作,确保与这个相同。不过,由于容量不同,第二步是指定磁盘的最大大小。

$ 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确认已经成为根目录(/)。)

$ 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上,需要进行路由设置。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,所以我有一种迫切的冲动。由于操作简单,我进行了记录。

请确认要连接的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信息。在这里,设备的ID信息为”abcd:0123″。然后将此信息转换为XML格式。

<hostdev mode='subsystem' type='usb' managed='yes'>
	<source>
		<vendor id='0xabcd'/>
		<product id='0x0123'/>
	</source>
</hostdev>

使用这个文件,只需要附加或分离就可以了。

# 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

我会用这个方法来解决错误。

机器学习相关

如果要使用venv,首先安装python3-venv。

$ sudo apt-get install python3-venv

打开计算机视觉开源库

$ 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相关参数设置为开启状态。

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
广告
将在 10 秒后关闭
bannerAds