
即便从安装开始选择了中文,部分菜单和应用因为是基于 gnome 的还是英文的样子,运行以下命令后重启启动即可解决
sudo apt install -y language-selector-gnome因为搜狗输入法是基于 fcix4 开发的,所以需要首先卸载掉系统自带的 fcix5,相关命令如下
sudo apt purge -y fcitx5*
# Additional dependencies (refer to: https://shurufa.sogou.com/linux/guide)
sudo apt install fcitx libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2 libgsettings-qt1
sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/
# Download deb installer from https://shurufa.sogou.com/linux
sudo apt install -y <sogou_xxx.deb>最后重启即可生效
msyh.ttf# 删除预装的 Snap 包
sudo snap remove --purge thunderbird
sudo apt remove -y thunderbird
# 添加 PPA 源
sudo add-apt-repository ppa:mozillateam/ppa创建规则文件 /etc/apt/preferences.d/99mozillateam 内容如下
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 900最好就应正常安装非 Snap 版的邮件客户端了
sudo apt update
sudo apt install thunderbirdwget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
echo "deb [arch=amd64] https://packages.microsoft.com/repos/code/ stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge/ stable main" | sudo tee /etc/apt/sources.list.d/microsoft-edge.listsudo tee /etc/sysctl.d/disable_ipv6.conf << EOF
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
EOF
sudo sysctl -p /etc/sysctl.d/disable_ipv6.confsudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev
wget https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tar.xz
tar xf Python-3.8.20.tar.xz && cd Python-3.8.20
./configure --enable-optimizations --without-ensurepip --prefix=/usr/local/python38
make -j$(nproc)
sudo make altinstall参考文章]]>
xubuntu language support
Ubuntu_24.04_Install_Sogou_Pinyin.md
如何在 Ubuntu 24.04 中将 Thunderbird 安装为 DEB
本文使用 小米路由官方固件 实现自定义IPV6防火墙的高级功能
首先到 https://github.com/openwrt-xiaomi/xmir-patcher 下载最新的脚本,Windows 用户直接运行 run.bat 即可
确认 IP 设置正确后,选择 2 后按提示开始安装并设置密码
安装完成后即可通过如下命令连接
ssh -o HostKeyAlgorithms=+ssh-rsa [email protected]SSH 进入小米官方固件,可以看到系统是由 OpenWRT 修改而来,所以放行端口的方式类似原版 OpenWRT, 打开配置文件 /etc/config/firewall 并添加如下内容
config rule
option name 'Allow-NAS'
list proto 'tcp'
option src 'wan'
option dest 'lan'
list dest_ip '::设备的后缀/::ffff:ffff:ffff:ffff'
option dest_port '端口号'
option target 'ACCEPT'
option family 'ipv6'路由器下级设备某个IPV6后四位IP固定不变的设备,例如::11aa:22bb:33cc:44dd/::ffff:ffff:ffff:ffff,该设备11aa:22bb:33cc:44dd固定不变)
保存后运行 /etc/init.d/firewall restart 即可生效
uci set firewall.aliddns=include
uci set firewall.aliddns.type='script'
uci set firewall.aliddns.path='/data/aliddns.sh'
uci set firewall.aliddns.enabled='1'
uci commit firewall官方的自定义 hosts 功能通过修改文件 /etc/custom_hosts 实现
修改 /etc/dnsmasq.d/custom.conf 为如下内容
address=/hismarttv.com/127.0.0.1保存后运行 /etc/init.d/dnsmasq restart 即可生效
ifconfig wl3 down
]]>
dosfstools、squashfs-tools、xorriso、grub-common、grub-pc-bin 、grub-efi软件包。还有 nano 文本编辑器。sudo apt-get install --no-install-recommends -y debootstrap squashfs-tools xorriso dosfstools mtools grub-efi grub-pc-bin nanosudo 权限。准备一个空文件夹作为工作目录。这个空文件夹所在分区不能是 NTFS、FAT32 格式。
然后在这个文件夹中创建 target、livecd 这两个文件夹。target 里面是目标系统,livecd 是 ISO 文件夹目录。
livecd 里面要创建 casper boot EFI preseed 等文件夹
export CHROOT=$PWD/target
sudo mkdir -p $CHROOT livecd/{casper,boot/grub,EFI/boot}构建基础系统有两种方式:
debootstrap 是 Debian 系发行版的一个实用工具,允许您基于在线的软件源构建一个属于自己的 Debian 系发行版的基本系统。
Ubuntu Base 是 Ubuntu 的基本系统,说通俗点,就是 Ubuntu 帮你打包好的 debootstrap 后的基本系统。
如果你想使用 debootstrap 工具构建一个基本系统,请运行:debootstrap focal chroot https://mirrors.aliyun.com/ubuntu
sudo debootstrap --no-check-gpg --variant=minbase --arch=amd64 --exclude=gcc-9-base,gcc-10-base --components=main,restricted,universe,multiverse \
--include=bash-completion,systemd-sysv,locales,nano,casper,console-setup,netplan.io,whiptail focal $CHROOT https://mirrors.aliyun.com/ubuntusudo chroot $CHROOT tee /etc/apt/sources.list << EOF
deb https://mirrors.aliyun.com/ubuntu focal main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu focal-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu focal-updates main restricted universe multiverse
EOF你需要先挂载一些特殊的文件系统。比如 dev proc sys run。
sudo mount -B /dev $CHROOT/dev
sudo chroot $CHROOT mount none -t proc /proc
sudo chroot $CHROOT mount none -t sysfs /sys
sudo chroot $CHROOT mount none -t devpts /dev/pts
sudo chroot $CHROOT bash -s << EOF
truncate -s 0 /etc/machine-id
ln -fs /etc/machine-id /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
EOF我们先更新一下软件源,升级一下基础系统里的软件包。
sudo chroot $CHROOT apt-get update
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive apt-get upgrade -y这一步是必要的,安装的内核还将用于 ISO 镜像的引导。
sudo sed -i 's|COMPRESS=lz4|COMPRESS=lzma|' $CHROOT/etc/initramfs-tools/initramfs.conf
sudo chroot $CHROOT apt-get install -y linux-image-generic-hwe-20.04 grub-*-sudo mv $CHROOT/boot/vmlinuz-**-**-generic livecd/casper/vmlinuz
sudo mv $CHROOT/boot/initrd.img-**-**-generic livecd/casper/initrd.imgsudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive apt-get install -y fonts-noto-cjk-extra language-pack-gnome-zh-hans ubuntu-desktop-minimal \
networkd-dispatcher netplan.io firefox- gedit- eog- evince- gnome-characters- gnome-user-docs- gnome-font-viewer- gnome-online-accounts- \
gnome-disk-utility- gnome-screenshot- gnome-logs- ubuntu-docs- fonts-deva- snapd- cups- cups-*- ibus- ibus-*-
sudo tee $CHROOT/etc/netplan/01-network-manager-all.yaml << EOF
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
EOF到这里结束之后,你可以在这个 chroot 容器里面进行自定义的设置,你想要预装什么软件,也可以操作。在容器里的操作和在本机操作的命令是相似甚至一致的。
# 添加 VSCode 源
curl -sL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o $CHROOT/etc/apt/trusted.gpg.d/microsoft.gpg
echo "deb [arch=amd64] https://packages.microsoft.com/repos/code stable main" | sudo tee $CHROOT/etc/apt/sources.list.d/vscode.list
echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" | sudo tee $CHROOT/etc/apt/sources.list.d/microsoft-edge.list
# 添加 cmake 源
curl -sL https://apt.kitware.com/keys/kitware-archive-latest.asc | sudo gpg --dearmor -o $CHROOT/etc/apt/trusted.gpg.d/kitware.gpg
echo "deb https://apt.kitware.com/ubuntu/ focal main" | sudo tee $CHROOT/etc/apt/sources.list.d/kitware.list
curl -sL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o $CHROOT/etc/apt/trusted.gpg.d/docker.gpg
echo "deb https://mirrors.aliyun.com/docker-ce/linux/ubuntu/ focal stable" | sudo tee $CHROOT/etc/apt/sources.list.d/docker-ce.listsudo unzip $HOME/fonts.zip -d $CHROOT/usr/share/fonts/truetype/microsoft
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive apt-get install -y gnome-tweaks
# 额外字体
echo msttcorefonts msttcorefonts/accepted-mscorefonts-eula select true | sudo chroot $CHROOT debconf-set-selections
sudo chroot $CHROOT apt-get install -y ttf-mscorefonts-installer
sudo chroot $CHROOT debconf-show ttf-mscorefonts-installersudo sed -i 's|\\w|\\W|g' $CHROOT/etc/skel/.bashrc
sudo mkdir -p $CHROOT/etc/dconf/profile $CHROOT/etc/dconf/db/local.d
sudo tee $CHROOT/etc/dconf/profile/user << EOF
user-db:user
system-db:local
EOF
sudo tee $CHROOT/etc/dconf/db/local.d/01-desktop << EOF
[org/gnome/desktop/media-handling]
automount=false
[org/gnome/desktop/interface]
font-name='微软雅黑 11'
document-font-name='微软雅黑 11'
[org/gnome/desktop/wm/preferences]
titlebar-font='微软雅黑 Bold 11'
EOF
sudo chroot $CHROOT dconf update
sudo mkdir $CHROOT/etc/docker
sudo tee $CHROOT/etc/docker/daemon.json << EOF
{
"data-root": "/opt/docker",
"registry-mirrors": [ "https://docker.1ms.run" ],
"log-driver": "journald",
"log-level": "warn",
"bridge": "none",
"debug": false
}
EOF到这一步,目标系统已经配置完毕了,下面应当进行清理。
sudo chroot $CHROOT apt-get autoremove --purge -y
for i in /dev/pts /dev /proc /sys; do sudo umount $CHROOT$i; done
sudo chroot $CHROOT bash -s << EOF
cat /dev/null > /etc/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
EOF# 建立清单
sudo chroot $CHROOT dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee livecd/casper/filesystem.manifest
# 打包目标系统
sudo mksquashfs $CHROOT livecd/casper/filesystem.squashfs -noappend -wildcards -e "var/cache/*" -e "var/log/*" -e "var/lib/apt/lists/*" -e "usr/share/man/*"# 生成引导菜单
sudo tee livecd/boot/grub/grub.cfg << EOF
search --set=root --file /casper/vmlinuz
insmod all_video
set timeout=30
menuentry "Ubuntu Live" {
linux /casper/vmlinuz boot=casper net.ifnames=0 locale=zh_CN.UTF-8 toram fsck.mode=skip quiet splash --
initrd /casper/initrd.img
}
menuentry "Ubuntu persistent" {
linux /casper/vmlinuz boot=casper net.ifnames=0 locale=zh_CN.UTF-8 persistent fsck.mode=skip quiet splash --
initrd /casper/initrd.img
}
EOF
# 创建 GRUB EFI 引导文件
sudo grub-mkstandalone --format=x86_64-efi --output=livecd/EFI/boot/bootx64.efi --locales="" --fonts="" \
"boot/grub/grub.cfg=livecd/boot/grub/grub.cfg"
sudo LC_CTYPE=C bash -s << EOF
dd if=/dev/zero of=efiboot.img bs=1M count=3 && \
mkfs.vfat efiboot.img && \
mmd -i efiboot.img efi efi/boot && \
mcopy -i efiboot.img livecd/EFI/boot/bootx64.efi ::efi/boot/
EOF
# 创建 GRUB LEGACY 引导文件
sudo grub-mkstandalone --format=i386-pc --output=core.img \
--install-modules="linux16 linux normal iso9660 biosdisk memdisk search tar ls" \
--modules="linux16 linux normal iso9660 biosdisk search" --locales="" --fonts="" \
"boot/grub/grub.cfg=livecd/boot/grub/grub.cfg"
cat /usr/lib/grub/i386-pc/cdboot.img core.img > bios.imgsudo xorriso -as mkisofs -iso-level 3 -full-iso9660-filenames -volid "UBUNTU" -output Ubuntu-20.04-LiveCD-x86_64.iso \
-eltorito-boot boot/grub/bios.img -no-emul-boot -boot-load-size 4 -boot-info-table \
--eltorito-catalog boot/grub/boot.cat --grub2-boot-info --grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \
-eltorito-alt-boot -e EFI/efiboot.img -no-emul-boot -append_partition 2 0xef efiboot.img \
-graft-points "livecd" "/EFI/efiboot.img=efiboot.img" "/boot/grub/bios.img=bios.img"参考资料]]>
https://github.com/mvallim/live-custom-ubuntu-from-scratch
https://manpages.ubuntu.com/manpages/focal/man7/casper.7.html

用“管理员”打开命令提示符,以此运行以下命令
cd /d "C:\Program Files\Microsoft Office\Office16"
for /f %x in ('dir /b ..\root\Licenses16\StandardVL_KMS_*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%x"打开 https://config.office.com/deploymentsettings 下一步下一步选择适合自己的选项,并导出为 xml 文件,示例如下
<Configuration>
<Add OfficeClientEdition="64" Channel="Current">
<Product ID="O365ProPlusRetail">
<Language ID="zh-cn" />
<ExcludeApp ID="Access" />
<ExcludeApp ID="Groove" />
<ExcludeApp ID="Lync" />
<ExcludeApp ID="Teams" />
<ExcludeApp ID="OneDrive" />
<ExcludeApp ID="OneNote" />
<ExcludeApp ID="Publisher" />
<ExcludeApp ID="Bing" />
</Product>
</Add>
<Updates Enabled="TRUE" />
<RemoveMSI />
<Display Level="Full" AcceptEULA="TRUE" />
</Configuration>然后通过 OfficeSetup.exe /configure 配置.xml 进行安装
]]># 允许 iptables 检查桥接流量
sudo tee /etc/modules-load.d/containerd.conf << EOF
overlay
br_netfilter
EOF
sudo tee /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 使设置生效
sudo modprobe overlay br_netfilter
sudo sysctl --system
# 禁用虚拟内存
sudo swapoff -a# 安装 containerd
curl -sL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce.gpg
echo "deb http://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y containerd.io
# 安装 kubeadm
curl -sL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-archive-keyring.gpg
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubeadm=1.21.14-00 kubectl=1.21.14-00 kubelet=1.21.14-00# 安装 containerd
sudo curl https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
sudo yum install -y containerd.io
sudo systemctl enable containerd
# 安装 kubeadm
sudo tee /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=0
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y --enablerepo=kubernetes kubeadm-1.21.14 kubelet-1.21.14 kubectl-1.21.14
sudo systemctl enable kubelet# 配置容器运行时
sudo tee /etc/containerd/config.toml << EOF
version = 2
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://hub-mirror.c.163.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://registry.lan:5000"]
EOF
sudo systemctl restart containerd
# 添加自动填充
sudo tee /etc/profile.d/kubectl.sh << EOF
source <(kubectl completion bash)
source <(crictl completion bash)
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
# 配置 crictl
sudo tee /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
EOFsudo kubeadm init --kubernetes-version=1.21.14 --token=abcdef.0123456789abcdef \
--apiserver-advertise-address=$(ip addr show dev eth0 | grep -Po 'inet \K[\d.]+') \
--cri-socket=unix:///run/containerd/containerd.sock \
--image-repository=registry.aliyuncs.com/google_containers稍等几分钟,K8S 的 Master 节点就启动起来了
# 其他节点加入集群
sudo kubeadm join node1.lan:6443 --token=abcdef.0123456789abcdef --discovery-token-unsafe-skip-ca-verification# 链接 kubeconfig
sudo chmod +r /etc/kubernetes/admin.conf
# 配置网络插件
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
# 去除污点
kubectl taint node --all node-role.kubernetes.io/master-
# 安装 Helm
curl -sL https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz | sudo tar zxf - --strip-components=1 -C /usr/local/bin
# 安装 Traefik Ingress Controller
helm install traefik -n kube-system --repo https://helm.traefik.io/traefik traefiksudo kubeadm reset --cri-socket=unix:///run/containerd/containerd.sock -f
sudo rm -rf /var/lib/{calico,etcd,kubelet,kubernetes,cni} /etc/cni/net.d /etc/kubernetes /opt/cni/bin/*]]>参考资料
首先到 Debian 官网 下载网络安装镜像 debian-11.0.0-amd64-netinst.iso
Ventoy 的便利性这里不做赘述,下载最新版 Ventoy2Disk 一键制作启动盘
然后将刚在下载的 ISO 文件拷贝到U盘根目录下面
博主的笔记本是没有有线网卡的,首先需要下载网卡 固件文件 驱动无线网卡,可以根据自己的网卡型号选择不同的固件,博主为了安装黑苹果,已经将笔记本自带的无线网卡更换为 D1830A,此处使用的是博通的固件
| 厂商 | 固件 | 文档 |
|---|---|---|
| 英特尔(Intel) | firmware-iwlwifi | https://wiki.debian.org/iwlwifi |
| 博通(Broadcom) | firmware-brcm80211 | https://wiki.debian.org/brcmfmac |
| 瑞昱(Realtek) | firmware-realtek | |
| 高通(Atheros) | firmware-atheros |
使用 ar x firmware-xxx.deb 命令解压得到 data.tar.xz 得到固件压缩包。
下面使用 Ventoy 文件注入插件 把固件文件注入到安装盘中,
编辑 U盘中的 ventoy\ventoy.json 为如下内容
{
"injection": [{
"image": "/debian-testing-amd64-netinst.iso",
"archive": "/firmware-brcm80211.tar.xz"
}]
}重启电脑按 F12 进入启动选单,选择 EFI USB Device 即可进入 Ventoy 启动界面

安装器的语言选择 简体中文


Debian 可以搭配多种 桌面环境 安装,大多数时候在选择组件时候勾选其中一项桌面环境即可,如果不是折腾党可以跳过此节。

由于通过 tasksel 安装的桌面环境会预安装 浏览器、播放器、libreoffice等组件,虽然可以事后通过 sudo apt purge -y libreoffice? firefox-esr h3v 命令卸载,但是作为重度强迫症患者实在不能忍。

当安装程序提示完成的时候,不要重启,按 Ctrl+Alt+F2 快捷键输入以下命令,然后安装桌面必要组件以及网络管理器
mount /dev/pts /target/dev/pts
chroot /target bash
sudo sed -i 's/bullseye main/bullseye main contrib non-free/g' /etc/apt/sources.list
sudo sed -i 's/security.debian.org/mirrors.163.com/g' /etc/apt/sources.list
sudo apt update
XFce 桌面环境 sudo apt install -y xfce4 network-manager-gnome fonts-wqy-zenhei
LXDE 桌面环境 sudo apt install -y lxde-core connman-ui fonts-wqy-zenhei
LXQt 桌面环境 sudo apt install -y sddm lxqt-core lxqt-admin cmst fonts-wqy-zenhei
Cinnamon 桌面环境 sudo apt install -y cinnamon-core
Budgie桌面环境 sudo apt install gdm3 budgie-desktop budgie-network-manager-applet fonts-wqy-zenhei
安装过程中可以通过Ctrl+Alt+F2组合键进入中断,Ctrl+Alt+F1返回安装界面
/lib/firmware/i195 目录中cat > ~/.Xresources << EOF
Xft.dpi: 130
EOF修改 /etc/NetworkManager/NetworkManager.conf 将 managed=false 改为 managed=true
LXQt 桌面的用户可以通过开始菜单中的 首选项 -> LxQT 设置 -> 键盘与鼠标 中的 鼠标与触摸板 配置多指手势。但是LXDE 的用户就没有这么方便了,可以通过配置 libinput 的方法达到效果
运行 sudo apt install -y xserver-xorg-input-libinput 安装 Libinput
编辑 /usr/share/X11/xorg.conf.d/40-libinput.conf 修改如下内容
Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "Tapping" "true"
Option "NaturalScrolling" "true"
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"
EndSection重启后即可使用触摸板的 轻点、双指右键等功能
运行 sudo apt edit-sources 将如下内容添加到最后
deb http://mirrors.163.com/debian/ bullseye-backports main
deb-src http://mirrors.163.com/debian/ bullseye-backports main安装内核文件
sudo apt -t bullseye-backports install -y linux-image-amd64echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/90-cloudimgwget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.debWPS Office for Linux 是由金山软件股份有限公司自主研发的一款办公软件套装,可以实现办公软件最常用的文字、表格、演示等多种功能。具有内存占用低、运行速度快、体积小巧、强大插件平台支持、免费提供海量在线存储空间及文档模板。
curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
echo "deb [arch=amd64] http://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt install -y code选择 File -> Prefernces -> Setting,Window 下的 Title Bar Style 选择为 custom
https://packages.debian.org/bullseye/ttf-mscorefonts-installer
修改 /etc/apt/source.list 增加 contrib
sudo apt install -y ttf-mscorefonts-installer 修改 editor.fontFamily 为 Courier New
sudo curl -sL https://mirrors.163.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
echo "deb [arch=amd64] http://mirrors.163.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker-ce.list
apt update && apt install -y docker-ce即将推出的 Debian Bullseye 中,由于 deepin-wine-plugin-virtual 所依赖的 python-dbus 和 python-gobject 两个基于 Python2.7 的包被砍掉了,所以没办法像 Debian 10 一样简单的补充一个 udis86 包就能解决依赖问题。Debian 10 用户可以只看下一节的 安装 Wine
此处采用了重新打包两个 deb 文件,将依赖重定向到 Python3 版本的方案
mkdir -p python-dbus/DEBIAN python-gobject/DEBIAN
cat > python-dbus/DEBIAN/control << EOF
Package: python-dbus
Version: 1.2.16-5
Architecture: all
Maintainer: Debian GNOME Maintainers
Depends: python3-dbus
Section: python
Priority: optional
Description: simple interprocess messaging system (Python interface)
EOF
cat > python-gobject/DEBIAN/control << EOF
Package: python-gobject
Version: 3.30.4-1
Architecture: all
Maintainer: Debian GNOME Maintainers
Depends: python3-gi
Section: python
Priority: optional
Description: Python 3 bindings for gobject-introspection libraries
EOF
dpkg -b python-dbus python-dbus.deb
dpkg -b python-gobject python-gobject.deb
sudo apt install -y ./python-*.deb# 添加 Deepin 商店源
wget http://mirrors.163.com/deepin/pool/main/d/deepin-keyring/deepin-keyring_2021.06.07-1_all.deb
sudo apt install -y ./deepin-keyring_*.deb
echo "deb https://com-store-packages.uniontech.com/appstore eagle appstore" | sudo tee /etc/apt/sources.list.d/appstore.list
# 安装 x86 反汇编引擎
sudo dpkg --add-architecture i386
sudo apt update
wget http://mirrors.163.com/deepin/pool/non-free/u/udis86/udis86_1.72-4_i386.deb
sudo apt install -y ./udis86_*.deb
# 安装 Deepin-Wine5
sudo apt install -y deepin-wine-plugin-virtual
# 处理桌面快捷方式及图标
sudo tee "/etc/profile.d/deepin.sh" >/dev/null << "EOF"
XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/local/share:/usr/share}
for deepin_dir in /opt/apps/*/entries; do
if [ -d "$deepin_dir/applications" ]; then
XDG_DATA_DIRS="$XDG_DATA_DIRS:$deepin_dir"
fi
done
export XDG_DATA_DIRS
EOFsudo apt install -y com.qq.im.deepin com.qq.weixin.deepin
# 调整DPI
env WINEPREFIX="$HOME/.deepinwine/Deepin-QQ" $HOME/.deepinwine/deepin-wine5/bin/winecfg
env WINEPREFIX="$HOME/.deepinwine/Deepin-WeChat" /opt/deepin-wine6-stable/bin/winecfg获取 deb 下载连接 apt install -y --print-uris $PACKAGE | cut -f 2 -d \' | grep \.deb
]]>那么有没有什么方案可以更优雅更轻量更快速搭建一个 K8S 集群呢?答案就是 K3D
目前主流的本地 k8s 运行方式有很多
关于 k3d 以及 kind 的对比,可以参考 K3d vs Kind 谁更适合本地研发。
k3s 是 Rancher 公司推出非常快速且轻量级的完全兼容的 Kubernetes 发行版(CNCF 认证)
k3d 是一个可以让 k3s 运行在 Docker 中的工具,它提供了一个简单的 CLI 来创建、运行和删除具有 1 到 N 个节点的 Kubernetes 集群
详情参考官方文档 什么是 K3s?
官方提供的 Docker Desktop 是基于 WSL2 实现的,需要开启 Hyper-V 功能。 这样会使整个 Windows 都跑在虚拟机中,导致某些虚拟化相关的应用不正常 (比如某些模拟器),而且内存占用也不太可控。
本文采用了基于 boot2docker 的方式运行 Docker 服务,定制性更灵活一些。
这里强烈推荐使用 Git for Windows 自带的 MinGW 命令行SHELL,使开发体验更加贴近与 Linux。以下操作均在 Git Bash 中进行
首先需要安装虚拟机软件 VirtualBox
然后需要下载如下命令工具并添加到环境变量 PATH 中
docker-machine.exek3d.exe本文中上面这些工具下载到了D:\Docker\bin,并将D:\Docker\bin添加到环境变量中
同时也配置了如下环境变量,将虚拟机文件的储存位置修改为 D 盘,避免占用系统空间
在 ~/.profile 文件添加如下内容配置命令行自动补全
sudo tee /etc/profile.d/kubectl.sh << EOF
source <(kubectl completion bash)
source <(k3d completion bash)
下面创建了一个磁盘大小为 60000 MB,CPU 使用 2 个核心的虚拟机
docker-machine create --virtualbox-cpu-count 2 \
--engine-registry-mirror https://hub-mirror.c.163.com \
--virtualbox-disk-size 60000 --virtualbox-memory 2048 \
--virtualbox-no-share default
# 每次使用 docker 时都需要执行如下命令
eval $(docker-machine env --shell bash default)稍等片刻,当出现以下日志时,说明 Docker 服务已启动完成

第一次创建 Docker 实例会下载boot2docker.iso作为启动镜像,国内用户可以通过添加参数--virtualbox-boot2docker-url https://github.com.cnpmjs.org/dragonflylee/boot2docker/releases/latest/download/boot2docker.iso加速镜像下载
首先我们尝试创建包含主节点和容器仓库的集群
eval $(docker-machine env --shell bash)
k3d cluster create --api-port 6443 \
-p 0.0.0.0:80:80@loadbalancer \
--k3s-arg "--disable=traefik@server:0" \
--registry-create registry:0.0.0.0:5000当出现下面的日志时,k3s 集群就创建成功了

此时,我们按照日志提示,运行 kubectl cluster-info 查看下当前集群的信息
运行 kubectl get pod -o wide -A 命令,当所有 Pod 的状态都是 Running 或者 Done 的时候,集群就初始化完毕了
cgroups: cannot find cgroup mount destination: unknown. 的错误提示,请执行如下命令docker-machine ssh default sudo sh - << EOF
mkdir /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
EOF而 K3s 不需要任何特殊的配置就可以使用 Helm 命令行工具,如下命令使用 Helm CRD 部署 traefik 服务
kubectl create -f - << EOF
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: traefik
namespace: kube-system
spec:
chart: traefik
repo: https://helm.traefik.io/traefik
valuesContent: |-
ports:
websecure:
expose: false
EOF下面的例子是使用 Traefik CRD 开启内置的仪表盘
kubectl apply -f - << EOF
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
namespace: kube-system
spec:
entryPoints:
- web
routes:
- match: Host(\`traefik.domain.com\`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
EOF更多配置参考 https://docs.rancher.cn/docs/k3s/helm/_index

KinD 顾名思义 Kubernetes in Docker,是一个使用 Docker 容器在本地运行 Kubernetes 集群的工具。相比 k3d,Kind 更贴近原生 Kubernetes,适合用于开发测试 Kubernetes 原生组件。
首先下载最新版本的 KinD https://kind.sigs.k8s.io/dl/latest/kind-windows-amd64
kind create cluster --image kindest/node:v1.21.14 --config=- << EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
apiServerAddress: "$(docker-machine ip)"
apiServerPort: 6443
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
kubeadmConfigPatches:
- |
kind: ClusterConfiguration
etcd:
local:
extraArgs:
listen-metrics-urls: http://0.0.0.0:2381
controllerManager:
extraArgs:
bind-address: 0.0.0.0
scheduler:
extraArgs:
bind-address: 0.0.0.0
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://hub-mirror.c.163.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://registry:5000"]
EOF参数描述参考 https://kind.sigs.k8s.io/docs/user/quick-start#configuring-your-kind-cluster
https://docs.nginx.com/nginx-ingress-controller/
# 生成测试用 SSL 证书
openssl req -x509 -nodes -newkey rsa:4096 -keyout tls.key -out tls.crt -days 3650 -subj "/CN=kube"
kubectl create secret tls ingress-wildcard-tls -n kube-system --cert=tls.crt --key=tls.key
# 安装控制器
helm install nginx -n kube-system --repo https://helm.nginx.com/stable nginx-ingress --values - << EOF
controller:
image:
tag: latest-alpine
service:
create: false
controller:
hostNetwork: true
setAsDefaultIngress: true
EOFhelm install traefik -n kube-system --repo https://helm.traefik.io/traefik traefik --values - << EOF
service:
enabled: false
ports:
web:
hostPort: 80
websecure:
expose: false
deployment:
kind: DaemonSet
ingressClass:
enabled: true
isDefaultClass: true
EOF
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/alternative.yaml
# 添加 ingress 路由
kubectl create ing -n kubernetes-dashboard dashboard --rule="domain.com/*=kubernetes-dashboard:80,tls"
# 添加用户权限
kubectl create serviceaccount admin-user -n kubernetes-dashboard
kubectl create clusterrolebinding admin-user --serviceaccount=kubernetes-dashboard:admin-user --clusterrole=cluster-admin
# 获取 Token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')参考文档:
]]>官方的制作程序 Ventoy2Disk 安装时磁盘将会被格式化,下面是非官方的无损安装方法数据无价,谨慎操作,此方法只针对 MBR 分区表格式。如果你不了解这些分区表格式,建议备份数据后使用官方格式化的安装方法
参考文档 https://www.ventoy.net/cn/doc_disk_layout.html
首先需要下载 DiskGenius 进行磁盘分区操作
1.在待修改磁盘的第一个分区上点击鼠标右键,选择 调整分区大小 如下图

204832MB 的空间2.在第一个分区后面的空闲空间创建新分区
主分区EFI System partition32MB4096扇区
四项必须符合,缺一不可
3.重复第二步调整第一个分区的大小, 将 分区后部的空间 改为 0

4.运行 Ventoy2Disk 主程序,此时磁盘分区已被 Ventoy 识别,版本号显示 ?

点击 升级 按钮,即可完成 Ventoy 的无损安装!
Hosts 加入如下内容即可屏蔽广告
0.0.0.0 api.cupid.iqiyi.com t7z.cupid.iqiyi.com
]]>