计划从Hyper-V迁移到Proxmox VE,又是一个漫长的过程

Hyper-V用着已经非常的稳定了,为何还要继续折腾Proxmox VE?

不知道,总之不折腾,心里不舒服。

前段时间刚从CentOS迁移到Debian

不久之前刚刚换了一台主机,数据刚迁移完毕

刚不久才完善Lsyncd实时同步

又发现了Proxmox VE,据说可玩性更高。

明知道下载下来安装折腾的话,肯定需要花不少的时间,但还是没有忍住。一发不可收拾的,连续折腾了几天,目前还是没有找到清晰的思路。

确实发现了可玩性确实更高:

硬件直通香不香?

反正独显直通花了我的不少时间最后还是失败了,网卡直通成功了,但暂时没有部署到OpenWrt上。

LXC容器我觉得真的香!

还有更多的功能,确实没有更多的时间去折腾…

反观Hyper-V简直就是垃圾?是因为太简单了?不存在可玩性可言,还是其他原因?

对比Proxmox VE与Hyper-V,同样虚拟Windows系统,得到的结果是Hyper-V虚拟的Windows性能更好!无论是CPU、内存、磁盘等性能都是Hyper-V虚拟的Windows完胜。但Proxmox VE虚拟的Windows也不至于太差哟!

所以我纠结了,因为主要目的还是Linux

Linux在Proxmox VE上的话,就不是虚拟机了,直接上LXC简直如同上了物理机!

结论是:必须折腾 Proxmox VE

努力去了解并熟悉Proxmox VE

这几天放缓了折腾的脚步,因为遇到太多的问题没有弄清楚的

存储类型:我到底该怎么选?

文件级存储、块级存储

文件级存储:如果我使用文件级存储,将会以目录方式挂载磁盘。

块级存储:如果我使用块级存储,将会以LVM-Thin的方式挂载磁盘。目前我就愣是没有搞清楚这种存储类型,看着就头晕,看官方文档也头晕,资料还是不够详细,还是搞不明白。

还有更重要的是如何备份数据?

还是用以前的方式使用Lsyncd实时同步到不同磁盘?

或者在PVE上有更好的方法?这得熟悉PVE才能去发现呀

目前所需的功能并不多

1、OpenWrt(直接用虚拟机直通网卡部署)

  • LXC虽然很好,我也尝试了可以正常启动,但还有更多的问题,所以放弃LXC部署OpenWrt
  • 虚拟机+网卡直通,我暂时没有折腾,但是硬件直通我已经初步掌握了。

2、NextCloud 与 OnlyOffice (直接用LXC部署)

  • 准备两条LXC容器,一台部署NextCloud,另一台部署OnlyOffice。
  • 至于Docker实际上我一直以来都不懂怎么搞,貌似PVE上用LXC已经够了。

所以貌似我的需求很简单,也并不需要如何熟悉PVE呀!

要熟悉到什么程度才算熟悉?只需要掌握目前所需要的就够了吧?有些东西也许永远也熟悉不了。

好吧,接下来的计划是:

  • 确定存储与备份的方案
  • 整理安装PVE的过程
  • PVE的基本配置
  • 部署OpenWrt
  • 部署LXC容器
  • 迁移数据
  • 事后总结

Debian Linux 基础配置及常用命令

安装好debian10/11后,我们需要做的一些基本配置后,用起来会变得更加得心应手。常用命令实际上官方手册是最好的参考手册,我这里只是总结了自己常用的。

Debian官方参考手册

https://www.debian.org/doc/manuals/debian-reference/

Debian系统基本的操作命令

切换到 root shell 提示符

# 在任意用户的 shell 提示符下输入 su -l 或 su -
su -l
su -
# 这不会保存当前用户的环境设定。

# 在任意用户的 shell 提示符下输入su root 或 su
su root
su
# 这会保存当前用户的一些环境设定。

退出命令行提示符

同时按 Ctrl + d 键,或键入 exit 退出命令行。

关闭或重启系统

在普通多用户模式模式下,可以使用命令行关闭系统 shutdown -h now

# 立即关机
shutdown -h now

# 5分钟后关机
shutdown -h +5

# 重新启动
shutdown -r now

在单用户模式下,可以使用命令行关闭系统 poweroff -i -f

我一直都是使用 poweroff

恢复一个正常的控制台

当做了一些滑稽的事(例如“cat二进制文件”)后,屏幕会发狂,你可以在命令行输入 reset 。你可能无法在屏幕上看到你输入的命令。你也可以输入 clear 来清屏。

递归创建目录

mkdir 命令的基本格式为:

mkdir [-mp] 目录名

  • -m 选项用于手动配置所创建目录的权限,而不再使用默认权限
  • -p 选项递归创建所有目录

例如创建 /home/test/abc/ 在默认情况下,需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动为你创建各层级目录。

目录或文件的权限理解与配置

拥有者(Owner)、拥有者所在的组(Group)、其他用户(Other)的权限表示如下:

拥有者、组、其他用户的权限表示关系:
   Owner   Group     Other
     |       |         |
   拥有者  拥有者组  其他用户
    权限    权限      权限
     |       |         |
    rwx     rwx       rwx

起始字符:d 表示文件夹,- 表示文件

  • 表示一个文件夹的权限例子:drwxrwxrwx
  • 表示一个文件的权限例子:-rwxrwxrwx

转换为 数字 表示权限其中对应的关系:

  • r 可读 = 4w 可写 = 2x 可执行 = 1rwx 之和 = 7
  • - 无权 = 0
用不同方式表示权限其中对应的关系:
     rwx     r-x     r-x
      |       |       |
    4+2+1   4+0+1   4+0+1
      |       |       |
      7       5       5

目录或文件的拥有者配置

# 例1、将/tmp/目录下的test.conf文件修改为root所拥有。
# root(拥有者):root(组) 
chown root:root /tmp/test.conf

# 例2、将/tmp目录包括目录下的所有文件改为root所拥有
chown -R root:root /tmp

目录或文件的权限配置

详细权限有点复杂,我这只记录的常用的权限修改方法

语法为:chmod [-cfvR] file

我们看下面文件的权限示例:
root@debian11-ts2:~/test# ls -l
total 12
-rw------- 1 root root 8 Oct 16 21:57 test-2.txt
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt

# 此test-2.txt文件拥有者为root,用户组为root。
# rwx权限属性为rw-(6) ---(0) ---(0),表示只有root用户可以r=4读,w=2写,但x=0不可以执行。其他用户都不能读、写、执行。
-rw------- 1 root root 8 Oct 16 21:57 test-2.txt

# 此test-3.txt文件拥有者为root,用户组为root。
# rwx权限属性为rw-(6) r--(4) r--(4),表示root用户可以r=4读,w=2写,但x=0不可以执行。
# root用户组可以r=4读,但w=0不可写,x=0不可执行。其他用户可以r=4读,但w=0不可写,x=0不可执行。
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt

# 此test.txt文件拥有者为root,用户组为root。
# rwx权限属性为rwx(7) rwx(7) rwx(7),表示root用户与root用户组以及其他用户都能 r=4读,w=2写,x=1执行
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt

下面是修改 test-2.txt 文件权限的例子:

root@debian11-ts2:~/test# chmod 605 test-2.txt
root@debian11-ts2:~/test# ls -l
total 12
-rw----r-x 1 root root 8 Oct 16 21:57 test-2.txt
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt
root@debian11-ts2:~/test# chmod 611 test-2.txt
root@debian11-ts2:~/test# ls -l
total 12
-rw---x--x 1 root root 8 Oct 16 21:57 test-2.txt
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt

修改目录下的所有文件与子目录权限例子如下:

# 以递归的方式逐个变更
root@debian11-ts2:~/test# chmod -R 600 /root/test
root@debian11-ts2:~/test# ls -l
total 12
-rw------- 1 root root 8 Oct 16 21:57 test-2.txt
-rw------- 1 root root 8 Oct 16 21:57 test-3.txt
-rw------- 1 root root 8 Oct 16 20:57 test.txt

查看目录或文件所占空间

使用 du 命令,不加上 -s 会递归列出所有子目录,加上-h 参数更能直观理解占用的容量单位,下面示例:

root@Debian11-Cloud:~# du -sh /site-data/www/
430G    /site-data/www/
root@Debian11-Cloud:~# du -sh /site-data/www/*
429G    /site-data/www/nextcloud
126M    /site-data/www/nextcloud-22.2.0.tar.bz2
4.0K    /site-data/www/nextcloud-22.2.0.tar.bz2.sha256sum
125M    /site-data/www/nextcloud-22.2.2.tar.bz2
4.0K    /site-data/www/nextcloud-22.2.2.tar.bz2.sha256sum
443M    /site-data/www/nextcloud-old
235M    /site-data/www/wordpress

系统设置

在最小化安装debian之后,需要根据自己的使用习惯进行一些配置。

调整vi编辑器

调整vi编辑器配置文件:

# 切换至root身份
su -
# 使用nano编辑器,编辑vi配置文件
nano /etc/vim/vimrc.tiny
# 修改为以下的配置内容
" set compatible
set nocompatible
set backspace=2

修改完成后,按 Ctrl + x 然后按 y 再按 回车 保存配置即可。

如果vi或nano编辑器显示中文为乱码,cat命令却可以正常显示中文。

发现此问题是在 PVE 上的建立的 CT 容器里的 debian 上

我们可以使用 locale 命令检查区域语言配置

# LXC容器里安装的debian区域语言配置
root@debian11-ts2:~# locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

# 我自己手动安装的debian系统区域语言配置
sgtfz@debian-buster:/$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

解决vi或nano编辑器显示中文乱码问题

# 首先执行
export LC_ALL=en_US.UTF-8
# 然后执行
dpkg-reconfigure locales

# 然后选择语言,选中我们不需要的语言按空格取消*号
# 选中en_US.UTF-8 UTF-8,按空格选择,按回车确认
[*] en_US.UTF-8 UTF-8

# 系统环境的默认语言环境 选中en_US.UTF-8,按回车确认
# Default locale for the system environment:
en_US.UTF-8

# 最后重启系统生效

完成配置默认语言环境后,vi或nano编辑器即可正常显示中文了。vi编辑器可以输入中文内容,但nano编辑器貌似不可以哟。

查看时区与时间

必须检查并修改为正确的时区,时间才准确。

# 查看时区与时间
timedatectl
# 修改时区为亚洲上海
timedatectl set-timezone Asia/Shanghai
# 或列出可用时区(可供修改时区作参考)
timedatectl list-timezones

有颜色输出的命令

Debian普通用户登录命令提示符,命令的输出是带有颜色的,但是切换到root用户命令提示符却没有了颜色。我们切换到root用户命令提示符,修改root用户目录下的.bashrc文件

vi .bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# 去掉下面五行的注释
# export LS_OPTIONS='--color=auto'
# eval "$(dircolors)"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'

# 如果还需要`用户名@主机名`显示颜色,请加上以下这行。
# 此行从普通用户复制过来的,只修改了`[\033[01;32m\]改为[\033[04;32m\]`增加下横线。
PS1='${debian_chroot:+($debian_chroot)}\[\033[04;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

保存配置后执行命令:source .bashrc 使之生效。

Shell 命令历史记录时间日期

我们切换到root用户命令提示符,修改root用户目录下的.bashrc文件

vi .bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=auto'
# 增加 export HISTTIMEFORMAT=" %F %T " 并保存
export HISTTIMEFORMAT=" %F %T "
eval "$(dircolors)"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

保存配置后执行命令:source .bashrc 使之生效。

然后键入命令 history 就能查看到有时间日期记录的命令历史了

设置静态IP地址

#编辑网卡配置文件
vi /etc/network/interfaces

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.121
netmask 255.255.255.0
gateway 192.168.1.1

创建用户及配置权限

adduser xxx 会有向导一步一步的创建用户操作,要求您为新用户分配和确认密码。然后,系统会要求您输入有关新用户的任何其他信息。这是完全可选的,可以按 ENTER 跳过。示例如下:

root@debian11-ts2:~# adduser sgtfz
Adding user `sgtfz' ...
Adding new group `sgtfz' (1000) ...
Adding new user `sgtfz' (1000) with group `sgtfz' ...
Creating home directory `/home/sgtfz' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for sgtfz
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] y

用户与用户组

# 先看懂 Linux 用户与用户组的表示方式
# 冒号左边是用户 : 冒号右边是用户组
     用户 :  组
      |      |
    root : root

添加用户到 XXX 组

www-data 用户添加到 redis

  • usermod -aG redis www-data

检查用户 www-data 是否已添加到 redis

root@Debian11:~# groups www-data
www-data : www-data redis
  • 冒号 “:” 右边 www-data redis 已有 redis 组
  • 说明已经将 www-data 用户添加到 redis 组

添加用户到 sudo 组 (可选)

usermod -aG sudo xxxxxx 用户,添加到 sudo

最后还要确认 /etc/sudoers

vi /etc/sudoers

# 若不存在以下内容,则添加
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

仅授予普通用户有限的权限(仅关机权限),前提不要将用户添加到sudo组!

# 编辑权限
visudo

# 仅允许普通用户组sgtfz,免密执行shutdown命令
%sgtfz ALL= NOPASSWD: /usr/sbin/shutdown

检查用户是否具有sudo权限

sudo -l -U <UserName>

删除用户及移除权限

  • deluser xxx 删除 xxx 用户本身,而不删除任何他们的文件
  • deluser --remove-home xxx 删除 xxx 用户并且删除用户的主目录

移除用户的 sudo 权限

# 首先检查用户是否具有sudo权限
root@debian-buster:~# sudo -l -U sgtfz
Matching Defaults entries for sgtfz on debian-buster:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User sgtfz may run the following commands on debian-buster:
    (ALL : ALL) ALL

# 检查用户id
root@debian-buster:~# id sgtfz
uid=1000(sgtfz) gid=1000(sgtfz) groups=1000(sgtfz),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev)

# 移除用户sudo权限
root@debian-buster:~# gpasswd -d sgtfz sudo
Removing user sgtfz from group sudo

# 再次检查用户是否拥有sudo权限
root@debian-buster:~# sudo -l -U sgtfz
User sgtfz is not allowed to run sudo on debian-buster.

# 再次检查用户id
root@debian-buster:~# id sgtfz
uid=1000(sgtfz) gid=1000(sgtfz) groups=1000(sgtfz),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

允许root用户远程ssh登录

有时为了方便编辑一些文件,使用WinSCP登录修改,需要以root用户登录。我们需要允许root用户ssh登录,如下配置即可:

# 编辑配置文件
vi /etc/ssh/sshd_config
# 增加此行配置 PermitRootLogin yes ,或检查去掉这行配置的注释。
PermitRootLogin yes

# 然后重启 ssh 生效
/etc/init.d/ssh restart

基础软件包管理操作

在 Debian 系统中有许多基于 APT 的软件包管理工具可以在 Debian 系统上进行基于仓库的软件包管理操作。我常用的操作

查看系统版本

  • cat /etc/os-release # 查看 Debian 系统大版本号
  • cat /etc/debian_version # 查看 Debian 系统小版本号
  • uname -srm # 查看内核版本

安装软件

  • apt install xxx # 安装 xxx 软件包(以及依赖包)

列出软件

  • apt list xxx # 列出 xxx 软件包
  • apt list --installed # 显示已安装的软件包
  • apt show xxx # 显示 xxx 软件包的详细信息(版本号,安装大小,依赖关系…)
  • apt search regex(正则表达式) # 搜索匹配 regex 的软件包

更新软件

  • apt update # 检查已安装的软件包是否有更新(只检查,不更新)
    • apt list --upgradable # 列出可升级的软件包列表
  • apt upgrade # 更新升级(已安装的软件包)至最新版本
  • apt install --only-upgrade <package_name> # 更新升级(指定软件包)至最新版本
    • apt install --only-upgrade php-8.2* # 可以使用通配符 * ,仅更新升级 php8.2 相关的所有软件包
  • apt full-upgrade # 完全更新升级(已安装的软件包)至最新版本,必要时会移除其它的软件包
  • apt-mark hold <package_name> # 标记为保留不更新升级的软件包
    • apt-mark hold php* # 可以使用通配符 * ,标记保留所有 php 前缀相关的软件包不更新
  • apt-mark unhold <package_name> # 取消标记保留

删除软件

  • apt remove xxx # 移除 xxx 相关联的软件包,不会移除与之相关联的配置文件或数据文件,也不会移除依赖包。
  • apt --purge remove xxx # 移除 xxx 相关联的软件包,不保留配置文件,也不会移除依赖包。
  • apt -s remove xxx # 模拟卸载,不会真的卸载。
  • apt autoremove # 移除当前系统中的所有孤立的包,即不被任何包依赖的包。据说有点危险,但我卸载 libreoffice 时发现非常不干净,用过此命令,好用的很。

清理apt安装包

定期运行清理安装包,为磁盘腾出一些空间。

  • apt clean # 清理 /var/cache/apt/archives/ 目录下的所有 deb 安装包,推荐。
  • apt autoclean # 清理 /var/cache/apt/archives/ 目录下(已卸载的软件)的 deb 安装包。

更多的管理操作请访问Debian官方文档:

https://www.debian.org/doc/manuals/debian-reference/ch02.zh-cn.html#_basic_package_management_operations

最近的Windows10更新后共享打印机无法使用

这次的补丁代号是KB5005569/KB5005573/KB5005568/KB5005566/KB5005565。如果你的Windows10系统共享的打印机无法被局域网的其他电脑使用,检查一下是否安装了上述其中一个更新,把相关的更新补丁卸载后,重启电脑即可解决问题。

我这边由于两台电脑都是Windows10 LTSC版本的系统,同样是安装了KB5005568这个补丁,共享打印机可以正常使用。共享主机是Windows10 LTSC系统,局域网其他电脑有Windows7、Windows10 20H2等不同版本的系统,我已经遇到了共享打印机无法使用的情况,在共享打印机的主机上卸载了相关的更新补丁后,即可正常使用共享打印机了。


如何禁用自动更新?

我只针对Windows10 LTSC版本的做了如下的配置,到底效果如何,只能用时间才能检验

通过组策略,禁止 Windows 10 自动更新

1、右键点击开始菜单,选择运行,然后输入 gpedit.msc ,点击 确定 。即可打开本地组策略编辑器。

2、依次点击 计算机配置 → 管理模板 → Windows组件 → Windows更新 → 配置自动更新 → 已禁用

gpedit.msc本地组策略编辑器

3、我们打开 设置 → 安全和更新

可以看到 Windows更新 下面一行红色文字:

*某些设置由你的组织来管理

表示组策略设置已生效。

设置Windows更新

往下还有一行

*你的组织已关闭自动更新

证明已关闭自动更新。

但如果你手动点击 检查更新,Windows依然会检查并下载安装更新哟!


如果是系统无法打开组策略编辑器,系统可能是 Windows 10 Home 家庭版

可以尝试更改序列号,更改为专业版,方法如下:

右键点击开始菜单 → 命令提示符(管理员)(A),或 Windows PowerShell(管理员)(A)

然后在命令行窗口依次输入如下命令:(期间提示点击确定即可)

slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms kms.03k.org
slmgr /ato

这是切换为KMS激活为专业版(我没有测试是否可行,谨慎操作,即使失败,只会导致现有的系统变成未激活状态?)

如果成功,那么就是专业版了,就可以安装上面禁止自动更新的方法来配置组策略。

Crontab 定时任务无法执行 service stop 或 systemctl top 命令

例如我写了一个脚本backup.sh,脚本内部包含有 service apache2 stopsystemctl start apache2rsyncmysqldump 等命令。手动执行 backup.sh 是能供正常执行里面的所有命令的,但使用定时任务 Crontab 执行脚本backup.shservicesystemctl,相关的这些命令均无法执行,其他命令例如 rsyncmysqldump 这些却都可以正常执行的奇怪问题。

最近偶尔查看了一下syslog日志发现我一直使用的备份脚本定时任务报错:CRON[44480]: (CRON) info (No MTA installed, discarding output)

可是定时备份却一直都能正常运行,这个脚本用了很长的时间,一直都没有注意日志的报错信息,因为无论是数据库,网站数据文件,都能正常的按照脚本命令进行备份,偶尔在今天才发现syslog日志这里的报错信息!

实际上我这几天折腾Lsyncd实时同步备份的时候就已经觉得有点怪怪的问题,因为我查看Lsyncd日志文件的时候,没有发现Lsyncd有停止与启动的日志记录。执行定时备份数据库与Rsync备份整站数据的时候,我先命令停止Lsyncd与apache2,再执行数据库与网站数据的备份。但是Lsyncd没有停止与启动的日志记录,难道这个问题不奇怪吗?明明是命令无法执行才会没有日志记录,所以最后终于发现确实是命令无法执行导致的。

解决方法:

Crontab定时任务执行的脚本里,需要停止的服务,必须写实际路径!

/etc/init.d/apache2 stop

即可正常执行。

知道即可,详细理由,以后有空再研究。

Debian10 UFW防火墙记录了一堆UFW BLOCK日志的原因

最近发现我在Debian10上安装的UFW防火墙日志文件 /var/log/ufw.log /var/log/syslog ,都是记录了一堆UFW BLOCK相关的日志。这些日志记录的两个IP地址都很有规律,其中一个IP是每隔1分钟,另一个IP是每个2分钟,目标地址都是DST=224.0.0.1

Oct  8 23:22:33 debian-buster kernel: [246921.975342] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:23:33 debian-buster kernel: [246981.995838] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:23:42 debian-buster kernel: [246990.780600] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:dc:fe:18:4b:36:aa:08:00 SRC=192.168.22.81 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
Oct  8 23:24:33 debian-buster kernel: [247042.006337] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:25:33 debian-buster kernel: [247102.026726] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:25:47 debian-buster kernel: [247116.224207] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:dc:fe:18:4b:36:aa:08:00 SRC=192.168.22.81 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
Oct  8 23:26:33 debian-buster kernel: [247162.047143] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:27:33 debian-buster kernel: [247222.057544] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:27:53 debian-buster kernel: [247241.667095] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:dc:fe:18:4b:36:aa:08:00 SRC=192.168.22.81 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
Oct  8 23:28:33 debian-buster kernel: [247282.077816] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:29:33 debian-buster kernel: [247342.098132] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2

实际上我知道这两个IP地址就是我的两个无线路由器,配置关闭了DHCP,接LAN口作为AP使用。这被Debian的UFW防火墙给拦截?而且这么频繁的写入日志也不是什么好事情,必须得解决!

因为这并不是网络攻击,源IP地址192.168.22.82与192.168.22.81是我的两个路由器的IP地址,目标地址224.0.0.1 这个地址是指所有主机的地址 (包括所有路由器地址)

找了一堆资料,通过各种测试,解决方法如下:

ufw allow in on eth0 to 224.0.0.1

/var/log/ufw.log/var/log/syslog 的世界终于清静了下来。

看看我的UFW防火墙状态吧

root@debian-buster:/var/log# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
224.0.0.1 on eth0          ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

如果下次我们配置了不同的路由,也许这个命令需要根据实际情况修改 in on eth0

注意我们的 /var/log/ufw.log 日志信息提示,IN=eth0DST=224.0.0.1

[UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.33.12 DST=224.0.0.1

我们就可以灵活使用了。

最后我还发现:

/var/log/messages

/var/log/kern.log

这俩日志文件都是UFW BLOCK相关的信息与ufw.log记录的一模一样!幸运的是我已经发现了,要不然呢?实际上服务器工作一切正常,如此大量的日志记录,除了损耗一些CPU与内存,还有就是固态硬盘的写入量。能发现能解决这无疑是非常大快人心的事情😂

WordPress搬家与更换域名总结

昨天已经成功把公网上的WordPress所有内容备份,导入到家庭服务器上了。

公网上的内容依旧保持现有的状态,直到2023年的到期,可能我不会再续费了。至于公网上的内容,可能不一定去更新。因为我感觉很多的内容其实不想出现在公众视线,大部分还是自己折腾的自己看的内容,也没有必要出现在公众的视线。

因此,把所有的内容搬回来,安心在自家的家庭服务器上面折腾。

经过几次的WordPress搬家,我总结了一些WordPress搬家更换域名的经验记录下来,以便日后需要时作为参考。

一、WordPress搬家前需要做的事情

1、备份数据库

备份数据库方法:

在 CentOS7 上用的是 MySQL8 备份数据库的老方法是

/opt/rh/rh-mysql80/root/usr/bin/mysqldump -h 127.0.0.1 -R --opt wordpress | gzip > /mysql_backup/wordpress_202110071820.sql.gz

在 Debian10 上用的是 MariaDB10.3 备份数据库非常的简单,因为本地系统登陆数据库是 Unix Socket ,免密登录。

mysqldump wordpress | gzip > /mariadb_backup/wordpress_202110071820.sql.gz;

以前备份的老套路,对于 Debian 来说都是过时的方法。

2、备份网站文件

我们仅需备份 wp-content 这个目录即可

这是将 wp-content 这个目录打包压缩的方法:

tar -czPf /wpbackup/wpcontent_202110071928.tar.gz /www/html/wp-content

或者不用打包压缩,直接备份目录也可以。

二、WordPress搬家与更换域名

1、确定需要更改的域名

明确我们需要更改的域名以及端口号,因为我这里是从阿里云公网上的WordPress内容迁移到自己家庭服务器上面,所以使用了端口号。

WordPress原使用的域名为 https://www.sgtfz.cn

WordPress现使用的域名为 https://sgtfz.cn

2、配置网站数据

首先停止服务器 apache 或 nginx 服务。

下载最新版本 WordPress ,解压,上传网站数据,修改 wp-config.php ,最后修改网站目录权限。

# 进入网站目录
cd /www/html/
# 下载最新版的wordpress
wget https://cn.wordpress.org/latest-zh_CN.tar.gz

# 生成sha1,校对官方sha1
sha1sum latest.tar.gz > latest.tar.gz.sha1sum

# 解压wordpress
tar -xzvf latest.tar.gz

# 删除官方wp-content目录
rm -R /www/html/wordpress/wp-content

# 上传我们备份的wp-content目录文件,使用WinSCP登录普通用户上传,然后复制到指定位置。
# 移动数据到指定目录
mv /home/sgtfz/wp-content /www/html/wordpress/wp-content

# 修改 wp-config.php,先确定数据库名,用户名,密码。并填上。稍后再登录数据库创建数据库名,用户名,密码。
define( 'DB_NAME', '数据库名' );
/** MySQL database username */
define( 'DB_USER', '数据库用户名' );
/** MySQL database password */
define( 'DB_PASSWORD', '数据库用户密码' );

# 修改网站目录及相关文件拥有者权限

# 修改网站目录拥有者为www-data
chown -R www-data:www-data /www/html/wordpress

# 修改wp-config.php文件拥有者为root
chown root:root /www/html/wordpress/wp-config.php

3、配置数据库

创建新的WordPress数据库,用户,密码。然后导入数据库备份文件,修改数据库。

# 登录到 MariaDB
# 创建新的WordPress数据库及用户
create database wordpress;

# 查看已创建的数据库
show databases;

# 创建数据库用户,密码
create user '数据库用户名'@'localhost' identified by '数据库用户密码';

# 查看数据库的用户们
select host,user from mysql.user;

# 授权用户使用数据库
grant all on wordpress.* to '数据库用户名'@'localhost';

# 刷新权限
flush privileges;

# 切换到wordpress数据库
use wordpress;

# 用WinSCP登录普通用户,上传数据库备份文件到服务器
# 导入数据库备份文件
source /home/sgtfz/mysql_202110072026.sql;

# 操作数据库,修改原域名 WordPress地址(URL),站点地址(URL)为现使用的域名
# 列出WordPress原使用的域名
select * from wp_options limit 2;
MariaDB [wordpress]> select * from wp_options limit 2;
+-----------+-------------+----------------------+----------+
| option_id | option_name | option_value         | autoload |
+-----------+-------------+----------------------+----------+
|         1 | siteurl     | https://www.sgtfz.cn | yes      |
|         2 | home        | https://www.sgtfz.cn | yes      |
+-----------+-------------+----------------------+----------+
2 rows in set (0.000 sec)

# 修改为现需使用的域名
update wp_options set option_value = 'https://sgtfz.cn' WHERE option_name='siteurl';
update wp_options set option_value = 'https://sgtfz.cn' WHERE option_name='home';

# 再次列出WordPress使用的域名,验证修改完成。
MariaDB [wordpress]> select * from wp_options limit 2;
+-----------+-------------+------------------------+----------+
| option_id | option_name | option_value           | autoload |
+-----------+-------------+------------------------+----------+
|         1 | siteurl     | https://sgtfz.cn | yes      |
|         2 | home        | https://sgtfz.cn | yes      |
+-----------+-------------+------------------------+----------+
2 rows in set (0.001 sec)

# 至此,我们实际上可以访问网站了,但还得继续修改数据库的 post_content 项的域名为新域名

# 修改 post_content 域名为现使用的新域名。原域名https://www.sgtfz.cn,新域名https://sgtfz.cn
UPDATE wp_posts SET post_content = REPLACE(post_content,'https://www.sgtfz.cn','https://sgtfz.cn');

# 至此,数据库已经修改完成。

# 启动apache或nginx,即可进入网站操作登录wordpress后台。
# 设置→常规→保存

# 由于我还安装了buddypress插件,所以,还需修改一下数据库
UPDATE wp_bp_activity SET primary_link = REPLACE(primary_link,'https://www.sgtfz.cn','https://sgtfz.cn');

UPDATE wp_bp_activity SET content = REPLACE(content,'https://www.sgtfz.cn','https://sgtfz.cn');

UPDATE wp_bp_activity SET action = REPLACE(action,'https://www.sgtfz.cn','https://sgtfz.cn');

# 全部完成任务,完美工作。

# 假如数据库操作有误,我们可以删除了重建,再重新导入数据。

# 删除WordPress数据库
drop database wordpress;
# 删除数据库用户
drop user '数据库用户名'@'localhost';

4、启动服务器的apache或nginx服务,访问网站

只要按照上述的步骤与顺序完成,WordPress搬家与更换域名就非常的顺利完美完成的了。

至于服务器的环境,无论是LAMP或LNMP,这不影响搬家。搭建LAMP或LNMP的方法,这里就不做详细说明了。

佳能LBP2900+拆机及更换定影/定影膜的步骤

之前拆过佳能LBP2900,觉得这款机型外壳挺难拆的,不知道从哪里开始下手拆。塑料外壳就只发现4颗螺丝,拧下螺丝,依然一块外壳都无法拆下。没有拆机的资料,真的想暴力拆解😂,还是细心的一边的拆,一边记录吧。

最后修复完成后发现,其实记录这个过程,比拆装并修复故障更费时间!因此部分内容设置了阅读权限。

记录这个过程的时候,才发现我的维修台如此的破烂不堪,且乱得一团糟,将就着先吧,有时间了再整理、更换桌垫或更换一张桌子吧…😂

一、拆外壳

1、拆下面上的透明面盖

用手掰弯一侧,很容易就可把透明面盖拆下来,如下图:

拆透明面盖

2、拆下两侧的侧壳

首先,要拧下背盖的两颗螺丝

拧下背部两颗螺丝

然后,撬开其中一侧的侧壳(另一侧方法大同小异

  • 从底部红圈1撬开底部卡扣,同时配合红圈2撬开背部的卡扣
撬开白色侧壳底部与背部卡扣
  • 接着用手掰着已经撬开的一边,用一字螺丝刀撬开侧壳上部的卡扣
撬开白色侧壳的上部的卡扣
  • 边掰开侧壳边往前部推,并小心撬开侧壳前部卡扣,即可顺利拆下侧壳了。
小心撬开侧壳前部的卡扣

3、拆下背部的背壳

  • 首先,用手从底部往下扯背壳的一边,同时往上抬背壳,即可松脱背壳的卡扣
  • 然后,另一侧用同样的方法扯,即可顺利拆下背壳。
分别用手扯下背壳卡扣
同时往上抬起拆下背壳

4、拆上部的上壳

首先,拆下拉扯杆小圆卡扣

拆下小圆卡扣

然后,拧下上壳的两颗螺丝

拧下上壳的两颗螺丝

最后,边往后扯的同时往上抬上壳,即可拆下上壳(如下图箭头方向扯

拆下上壳

至此,上壳、左右侧壳、背壳,已经顺利拆下。

外壳拆卸完毕

二、拆定影,更换定影膜

1、把定影从机器上拆下来

首先,拔下定影接高压板的各种相关的插线,并从卡扣扯出各种插线。

拔下定影接高压板的各种插线
已经把定影接高压板的各种插线拔下

然后,拔下背部的一根插线,往上稍用力即可拔出来

拔下背部插线
已经把插线拔出

最后,拧下红圈标记的3颗螺丝,即可顺利拆下定影组件

拧下红圈标记的3颗螺丝
已经拆下定影组件
登录查看完整内容

更换定影膜成功,复原安装定影组件成功

更换定影膜完成

最后装机测试,一切正常,打印效果完美!

最近更新Debian10与NextCloud21遇到的问题

前几天打开Debian官方网发现Debian10.10已经发布正式版了,目前我使用的版本是Debian10.9,正好可以尝试一下升级系统,然后测试各种已部署的东西是否还能完美运行,我们开始折腾吧。

备份系统

备份系统是必需的前提,因为假如升级系统之后,出现各种问题,我们已部署的东西无法正常完美运行,或其他更多的问题,我们有了备份就不用再担心这些问题,即使是升级失败了,还可以恢复到未升级前的系统备份。

如何备份确实是个头痛的问题

因为没有经验,之前一直都不敢升级Linux系统。

不敢升级的原因有:

  • 曾经碰到过由于Windows10的自动更新,导致许多部署在Windows系统的各种东西出现各种各样奇怪的小问题,导致各种无法正常运行。
  • 曾经升级PHP,升级到高版本的PHP后,貌似需要重新配置各种各样的东西,更多的问题已经想不起了。

用 Hyper-V 检查点备份 Debian10 系统吧

可是使用检查点备份,我确实还是没有搞清楚检查点是如何工作的。因为Debian系统我是安装在SSD磁盘上,但数据目录我是放在HDD磁盘上。

如果创建检查点,是不是同时在SSD磁盘上与HDD磁盘上都会生成检查点的备份?如果是这样的话,数据目录占用的容量那么多,创建检查点的备份会占用容量非常大?

要弄清楚这个问题,我们完全可以一个一个问题的去测试与检验,可是需要耗费时间应该不少,懒…!

于是我采取以下的方法来创建检查点:

首先把挂载在HDD磁盘上的目录临时卸载掉

1、停止 apache、mariadb、php、计划任务等各种服务。

2、确定我们需要临时卸载的目录

sgtfz@debian-buster:~$ df -h
Filesystem                          Size  Used Avail Use% Mounted on
udev                                2.9G     0  2.9G   0% /dev
tmpfs                               592M   60M  533M  11% /run
/dev/mapper/debian_lvm-root          26G  2.2G   24G   9% /
tmpfs                               2.9G     0  2.9G   0% /dev/shm
tmpfs                               5.0M     0  5.0M   0% /run/lock
tmpfs                               2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/mapper/data_lvm-my_data        1.8T  366G  1.4T  21% /my-data
/dev/mapper/backup_lvm-data_backup  1.8T  367G  1.4T  21% /data_backup
/dev/sda2                           465M   50M  391M  12% /boot
/dev/sda1                           120M  5.1M  115M   5% /boot/efi
tmpfs                               592M     0  592M   0% /run/user/1000

3、临时卸载挂载在HDD磁盘上的目录

umount /dev/mapper/data_lvm-my_data
umount /dev/mapper/backup_lvm-data_backup

# 确认已卸载
root@debian-buster:~# df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                         2.9G     0  2.9G   0% /dev
tmpfs                        592M   60M  533M  11% /run
/dev/mapper/debian_lvm-root   26G  2.2G   24G   9% /
tmpfs                        2.9G     0  2.9G   0% /dev/shm
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/sda2                    465M   50M  391M  12% /boot
/dev/sda1                    120M  5.1M  115M   5% /boot/efi
tmpfs                        592M     0  592M   0% /run/user/1000

4、从Hyper-V虚拟机设置里移除相应目录的虚拟磁盘。记录好磁盘安装顺序,防止再次添加由于顺序问题导致各种问题。

然后,创建检查点。

创建检查点完成之后,我们需要在Hyper-V虚拟机设置里重新装载刚才卸载的磁盘,然后重启系统。

在创建检查点完成之后,在Hyper-V虚拟机设置里重新装载刚才卸载的磁盘,尝试过重新挂载目录,但是挂载出错,详细原因未知。

检查系统一切工作正常,下面开始更新系统。

从Debian10.9升级到Debian10.10

检查更新

apt update; apt upgrade;

The following NEW packages will be installed:
  linux-image-4.19.0-17-amd64
The following packages will be upgraded:
  base-files isc-dhcp-client isc-dhcp-common klibc-utils libgcrypt20 libglib2.0-0 libglib2.0-data libgnutls30 libhogweed4 libklibc libmariadb3 libnettle6 libwebp6
  libwebpmux3 libxml2 linux-image-amd64 mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common mariadb-server mariadb-server-10.3
  mariadb-server-core-10.3 php-common shim-helpers-amd64-signed shim-signed shim-signed-common shim-unsigned
28 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 73.0 MB of archives.
After this operation, 266 MB of additional disk space will be used.
Do you want to continue? [Y/n]

貌似升级的东西挺多的,确认升级后,几分钟升级完成,升级非常简单,完全感觉步到就已经完成了。简单的背后,别人不知道付出了多少的努力,才实现了给我们的如此简单的操作!

说到简单这个问题:

在你了解的领域里有个简单的问题,你当然觉得简单。可是在你不了解的领域,你只是看着别人简单的弄那么几下就OK,你也觉得非常的简单,你可能估计错误了。

可是我如何查看是否已经升级到Debian10.10了呢?

网上搜索各种查看系统版本的命令,都无法查看到现在的Debian10.10系统版本

sgtfz@debian-buster:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

sgtfz@debian-buster:~$ cat /proc/version
Linux version 4.19.0-17-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.194-2 (2021-06-21)
sgtfz@debian-buster:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

sgtfz@debian-buster:~$ hostnamectl
   Static hostname: debian-buster
         Icon name: computer-vm
           Chassis: vm
        Machine ID: c410905f8d4d4eeeabc0a1fc4da0c84c
           Boot ID: 1f08efd2ee964d09ae4f61b1ea4c0f37
    Virtualization: microsoft
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-17-amd64
      Architecture: x86-64

最后还是在Debian官方找到了查看debian系统版本的线索

sgtfz@debian-buster:~$ cat /etc/debian_version
10.10

证明升级完美成功。初步粗略体验,在debian系统上运行的各种东西一切都正常工作。

升级如此简单,干脆把另一台运行OnlyOffice的debian也升级一下吧。

运行OnlyOffice这台虚拟机,升级更简单,只有一个虚拟磁盘放在SSD上。

列出可更新的软件列表

root@debian-buster:~# apt list --upgradable
Listing... Done
base-files/stable 10.3+deb10u10 amd64 [upgradable from: 10.3+deb10u9]
isc-dhcp-client/stable 4.4.1-2+deb10u1 amd64 [upgradable from: 4.4.1-2]
isc-dhcp-common/stable 4.4.1-2+deb10u1 amd64 [upgradable from: 4.4.1-2]
klibc-utils/stable 2.0.6-1+deb10u1 amd64 [upgradable from: 2.0.6-1]
libgcrypt20/stable 1.8.4-5+deb10u1 amd64 [upgradable from: 1.8.4-5]
libglib2.0-0/stable 2.58.3-2+deb10u3 amd64 [upgradable from: 2.58.3-2+deb10u2]
libglib2.0-data/stable 2.58.3-2+deb10u3 all [upgradable from: 2.58.3-2+deb10u2]
libgnutls30/stable 3.6.7-4+deb10u7 amd64 [upgradable from: 3.6.7-4+deb10u6]
libhogweed4/stable 3.4.1-1+deb10u1 amd64 [upgradable from: 3.4.1-1]
libklibc/stable 2.0.6-1+deb10u1 amd64 [upgradable from: 2.0.6-1]
libmariadb3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
libnettle6/stable 3.4.1-1+deb10u1 amd64 [upgradable from: 3.4.1-1]
libwebp6/stable,stable 0.6.1-2+deb10u1 amd64 [upgradable from: 0.6.1-2]
libxml2/stable 2.9.4+dfsg1-7+deb10u2 amd64 [upgradable from: 2.9.4+dfsg1-7+deb10u1]
linux-image-amd64/stable 4.19+105+deb10u12 amd64 [upgradable from: 4.19+105+deb10u11]
mariadb-client-10.3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-client-core-10.3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-client/stable 1:10.3.29-0+deb10u1 all [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-common/stable 1:10.3.29-0+deb10u1 all [upgradable from: 1:10.3.27-0+deb10u1]
onlyoffice-documentserver/squeeze 6.3.1-32 amd64 [upgradable from: 6.3.0-111]
shim-helpers-amd64-signed/stable 1+15.4+5~deb10u1 amd64 [upgradable from: 1+15+1533136590.3beb971+7+deb10u1]
shim-signed-common/stable-updates 1.36~1+deb10u2+15.4-5~deb10u1 all [upgradable from: 1.33+15+1533136590.3beb971-7]
shim-signed/stable-updates 1.36~1+deb10u2+15.4-5~deb10u1 amd64 [upgradable from: 1.33+15+1533136590.3beb971-7]
shim-unsigned/stable 15.4-5~deb10u1 amd64 [upgradable from: 15+1533136590.3beb971-7+deb10u1]

从列表中可以看到,如果执行更新,onlyoffice-documentserver会更新到6.3.1的版本。可是目前我不想更新这个版本的OnlyOffice,因为我觉得OnlyOffice越来越重的商业味道,不太好食用。

标记不升级的软件包
apt-mark hold onlyoffice-documentserver

root@debian-buster:~# apt-mark hold onlyoffice-documentserver
onlyoffice-documentserver set on hold.

查看我们标记不升级的软件
apt-mark showhold

root@debian-buster:~# apt-mark showhold
onlyoffice-documentserver

执行升级,我们可以看到,标记不升级的软件包onlyoffice-documentserver,会保留原有的版本不作更新。

root@debian-buster:~# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-image-4.19.0-17-amd64
The following packages have been kept back:
  onlyoffice-documentserver
The following packages will be upgraded:
  base-files isc-dhcp-client isc-dhcp-common klibc-utils libgcrypt20 libglib2.0-0 libglib2.0-data
  libgnutls30 libhogweed4 libklibc libmariadb3 libnettle6 libwebp6 libxml2 linux-image-amd64
  mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common shim-helpers-amd64-signed
  shim-signed shim-signed-common shim-unsigned
23 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 62.7 MB of archives.
After this operation, 266 MB of additional disk space will be used.
Do you want to continue? [Y/n]

至此,Debian系统升级完美完成。

时间又过了几天,NextCloud21.0.3终于发布了。

等待NextCloud发布更新等得好苦啊,因为NextCloud21用下来发现许多小问题,对比NextCloud20根本用不出性能差别,但问题却多了不少!哎……

从NextCloud21.0.2升级到NextCloud21.0.3

经过了那么多个版本的升级,我已经总结出使用OCC命令手动升级的完美方法了。可是,该来的问题,还是来了。

OCC升级报错 An unhandled exception has been thrown: 这个还是第一次遇到。

OCC报错问题1

使用OCC命令升级系统前,我们需要做数据库以及数据目录的备份,在做备份之前需要停止Apache与PHP,但是不要停止MariaDB。如果停止了MariaDB,OCC命令升级NextCloud会报错。

OCC报错问题2

An unhandled exception has been thrown:
OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

这个问题有点棘手!

所有准备就绪的时候,执行升级命令

sudo -u www-data php occ upgrade

你却给我抛出错误,愣是无法找到解决的方法,无法使用OCC命令升级。之后我尝试使用Web浏览器访问NextCloud,在Web浏览器上点击升级,却成功升级完成了。

于是我粗略的检查升级后的各种东西,貌似没有发现什么不妥。

暂时发现了一处不妥:NextCloud后台定时任务cron.php无法正常执行。即使直接在Putty上使用命令执行,也不生效。

NextCloud后台定时任务无法正常执行,到底是升级了Debian后导致的,还是升级了NextCloud后导致的,现在已经无法追溯了,但问题肯定跟无法使用OCC命令升级相关。

百度搜索Memcache \OC\Memcache\APCu not available for local cache相关问题,少之又少,没有任何参考意义。

从报错的机器翻译,问题应该出现在PHP扩展模块上。应该是我的php.ini配置问题,或是没有安装APCu扩展模块。

我觉得这些都不能成立,因为NextCloud21.0.2运行得好好的,一切正常,包括OCC命令也是一切正常的。为何升级了Debian10.10或NextCloud21.0.3后,问题就来了?简直不可理喻。

检查php.ini配置文件,确认APCu扩展是开启的,并且apc.enable_cli=1也是开启的。Web浏览器访问info.php查看PHP扩展模块,都是已开启的。难道这个问题只能搁置下去了?然后在putty使用命令php -i ,被我发现了其中的玄机,实在是令人头疼。

使用浏览器访问info.php可以看到

APCu Support Enabled
Version 5.1.20
APCu Debugging Disabled
MMAP Support Enabled
MMAP File Mask no value
Serialization Support php, igbinary
Build Date Mar 4 2021 15:44:06

可是使用终端命令 php -i 我们看到的却是如下

APCu Support => Disabled
Version => 5.1.20
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Serialization Support => Disabled
Build Date => Mar 4 2021 15:44:06

终于找到线索了

putty上键入命令 php --ini

命令模式所加载的配置文件路径:

root@debian-buster:~# php --ini
Configuration File (php.ini) Path: /etc/php/7.4/cli
Loaded Configuration File:         /etc/php/7.4/cli/php.ini
Scan for additional .ini files in: /etc/php/7.4/cli/conf.d
Additional .ini files parsed:      /etc/php/7.4/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.4/cli/conf.d/10-opcache.ini,
/etc/php/7.4/cli/conf.d/10-pdo.ini,
/etc/php/7.4/cli/conf.d/15-xml.ini,
/etc/php/7.4/cli/conf.d/20-apcu.ini,
/etc/php/7.4/cli/conf.d/20-bcmath.ini,
/etc/php/7.4/cli/conf.d/20-calendar.ini,
/etc/php/7.4/cli/conf.d/20-ctype.ini,
/etc/php/7.4/cli/conf.d/20-curl.ini,
/etc/php/7.4/cli/conf.d/20-dom.ini,
/etc/php/7.4/cli/conf.d/20-exif.ini,
/etc/php/7.4/cli/conf.d/20-ffi.ini,
/etc/php/7.4/cli/conf.d/20-fileinfo.ini,
/etc/php/7.4/cli/conf.d/20-ftp.ini,
/etc/php/7.4/cli/conf.d/20-gd.ini,
/etc/php/7.4/cli/conf.d/20-gettext.ini,
/etc/php/7.4/cli/conf.d/20-gmp.ini,
/etc/php/7.4/cli/conf.d/20-iconv.ini,
/etc/php/7.4/cli/conf.d/20-igbinary.ini,
/etc/php/7.4/cli/conf.d/20-imagick.ini,
/etc/php/7.4/cli/conf.d/20-intl.ini,
/etc/php/7.4/cli/conf.d/20-json.ini,
/etc/php/7.4/cli/conf.d/20-mbstring.ini,
/etc/php/7.4/cli/conf.d/20-mysqli.ini,
/etc/php/7.4/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.4/cli/conf.d/20-phar.ini,
/etc/php/7.4/cli/conf.d/20-posix.ini,
/etc/php/7.4/cli/conf.d/20-readline.ini,
/etc/php/7.4/cli/conf.d/20-redis.ini,
/etc/php/7.4/cli/conf.d/20-shmop.ini,
/etc/php/7.4/cli/conf.d/20-simplexml.ini,
/etc/php/7.4/cli/conf.d/20-sockets.ini,
/etc/php/7.4/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.4/cli/conf.d/20-sysvsem.ini,
/etc/php/7.4/cli/conf.d/20-sysvshm.ini,
/etc/php/7.4/cli/conf.d/20-tokenizer.ini,
/etc/php/7.4/cli/conf.d/20-xmlreader.ini,
/etc/php/7.4/cli/conf.d/20-xmlwriter.ini,
/etc/php/7.4/cli/conf.d/20-xsl.ini,
/etc/php/7.4/cli/conf.d/20-zip.ini,
/etc/php/7.4/cli/conf.d/25-apcu_bc.ini

浏览器访问 info.php 所加载的配置文件路径:

PHP Version 7.4.20
System	Linux debian-buster 4.19.0-17-amd64 #1 SMP Debian 4.19.194-2 (2021-06-21) x86_64
Build Date	Jun 4 2021 23:17:27
Server API	FPM/FastCGI
Virtual Directory Support	disabled
Configuration File (php.ini) Path	/etc/php/7.4/fpm
Loaded Configuration File	/etc/php/7.4/fpm/php.ini
Scan this dir for additional .ini files	/etc/php/7.4/fpm/conf.d

从中看出,我们无论如何开启扩展,但是却都没有开启命令模式的扩展!需要开启命令模式的扩展,就需要修改命令模式的配置文件:

vi /etc/php/7.4/cli/php.ini

加入内容:apc.enable_cli=1

重启 php-fpm 后,再次使用命令 php -i ,命令模式的 APCu Support => Enabled 已经开启了。

APCu Support => Enabled
Version => 5.1.20
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Serialization Support => php, igbinary
Build Date => Mar  4 2021 15:44:06

定时任务终于运行正常了!!!

可是之前Debian10.9或NextCloud21.0.2也是没有特地开启修改/etc/php/7.4/cli/php.ini,为什么之前可以正常执行定时任务?

也许有些问题我们是无法找到答案的…。

兄弟 HL-5445D Error+Toner 灯常亮无法清零

兄弟 brother HL-5445D Error + Toner 灯常亮,正常情况下清零即可正常工作,可是无论如何操作清零均无效!该机型更换粉盒或加粉后清零,我通常使用以下操作,即可顺利完成:

  • 打开前盖,关闭电源开关
  • 按住GO键开机,开机三四秒钟以后松开GO键
  • 连续按GO键两下,除了READY不亮外,其余指示灯都亮
  • 连续按GO键五下,指示灯全亮,合上前盖,粉盒清零成功。

可是这次遇到的问题,我按照以上的清零方法,Error + Toner 指示灯依旧常亮,打印机无法工作。

然后尝试粉盒复位齿轮清零,依旧无济于事。

登录查看完整内容

在Hyper-V上安装Debian10 buster的磁盘分区

不管是在Hyper-V或实体机上安装Debian10,在分区的时候,一般都可以直接使用自动分区即可,如下图:

1、选择 Guided – use entire disk and set up LVM ,点击 Continue

Guided – use entire disk and set up LVM

2、选择 All files in one partition (recommended for new users) ,点击 Continue

All files in one partition (recommended for new users)

然后 一路 Yes ,Continue

最后 Finish partitioning and write changes to disk ,点击 Continue 。

自动分区默认的分区参数

我希望把swap分区改为2GB,还有将ESP分区改为128MB,貌似右点麻烦。

于是还是自己手动分区比较合适自己的需求。

Debian10 buster 手动分区

下面是 Debian10 buster 图形化手动分区的过程

一、建立 ESP 与 boot 分区

选择 Manual ,点击 Continue

Manual

选择 全新未分区的磁盘,点击 Continue

选择没有分区的磁盘

选择 Yes ,点击 Continue

创建分区表

Create new empty partition table

选择 30GB 磁盘,点击 Continue

创建分区

为磁盘进行分区

1、创建 ESP 分区

创建一个新分区

Create a new partition

设置 ESP 分区大小( ESP 分区我这设置为 128MB 即可

设置ESP分区大小为128MB

从可用空间的起始处,建立ESP分区

选择 Beginning ,点击 Continue

从可用空间的起始,建立ESP分区

设置为 EFI System Partition (Name这里根据需要命名,注意 Bootable flag 这里默认值为on),点击 Continue

use as: EFI System Partition

2、创建 boot 分区

继续选择剩余的可用空间,点击 Continue

继续从可用空间上分区

设置 boot 分区大小( boot 分区我这设置为 512MB 即可

boot分区容量 512MB

设置为 Ext3 文件系统(Name 可根据需要命名,由于测试手动分区时截图为 Ext4 文件系统,懒得改,实际使用也没问题,但是 boot 分区还是推荐使用 Ext3 文件系统

Mount point : /boot

完成以上 2 个关键参数设置后

选择 Done setting up the partition ,点击 Continue

Use as: Ext3

ESP 与 boot 分区 创建完成。

二、建立 LVM 分区

我们需要进入 Configure the Logical Volume Manager,然后进一步操作建立VG与LV

选择 Configure the Logical Volume Manager ,点击 Continue

配置 LVM — Configure the Logical Volume Manager

选择 Yes ,点击 Continue

configure LVM

1、创建VG

选择 Create volume group ,点击 Continue

创建VG — Create volume group

命名 VG(不建议使用短杠 - 符号,建议 debian_lvm 这样命名),点击 Continue

设置VG名字

为刚才建立的 VG 选择设备(我们将剩余的所有空间包含到VG),点击 Continue

勾选剩余所有可用空间绑定到刚才建立的VG

选择 Yes ,点击 Continue (更新分区表

更新分区表

VG 创建完成。

2、创建 Swap 分区与 / 根分区

2.1、创建 Swap 分区

在VG创建完成的基础上,创建LV

选择 Create logical volume,点击 Continue

创建LV — Create logical volume

选择需要在哪个VG上创建 LV – Swap 分区(当然这里只有一个VG可选

选择需要在哪个VG上创建LV

创建 Swap 分区。

命名Swap分区

据说现在不用创建Swap分区了,因为现在的内存都足够大了,没有必要使用Swap分区。可是我觉得还是设置一个Swap分区,2GB的Swap意思一下即可。

设置Swap分区容量为2GB

Swap 分区创建完成。

2.2、创建根分区 /

创建 LV 过程与以上 Swap 部分相同

命名根分区,点击 Continue

命名根分区 root

将剩余的所有剩余空间作为根分区使用

根分区容量设置

选择 Finish ,点击 Continue

完成LVM分区

注意!此时的根分区没有定义文件系统以及挂载点

选择 刚才创建的LV root根分区,点击 Continue

注意根分区没有定义文件系统

设置根分区使用的文件系统为 xfs ,挂载点为 /

文件系统使用xfs,挂载为根分区 /

LVM 分区至此完成。

意味着我们手动分区到此已经完成了。

选择 Finish partitionting and write changes to disk ,点击 Continue

Finish partitionting and write changes to disk

之后的系统安装步骤在这就不再记录了。

这是我最小化安装(不带桌面环境) Debian10 的分区方案,装好 Debian 后占用的空间非常小(只有1.6G)。作为 Web 服务器使用,安装Debian的磁盘,30GB足够了,Hyper-V建立一个动态磁盘VHDX放在SSD上运行Debian,速度非常满意。

在手动进行分区的时候,遇到了许多坑(由于不了解LVM分区的套路),以上是过程的截图,实际折腾到最后,我最终使用的分区如下图:

最终我使用的分区参数

以后有空再记录在 Debian10 上添加新磁盘,并使用 PuTTy 命令行操作,建立与挂载LVM分区。

虽然是在Hyper-V上运行Debian10,这个分区步骤一样可以完美适用在实体机上分区。