webmin安装使用

从github下载安装脚本

curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sh setup-repos.sh

Debian and derivatives
apt-get install webmin --install-recommends

登录入口

https://<Your-Server-IP>:10000

用户名密码是读取的服务器操作系统的用户名和密码,root和你安装操作系统时的密码

功能配置

可以从未使用模块面板安装软件,

可以对已经自定义安装的软件进行目录配置,如图,mysql是在wemin之前安装的没有使用系统默认目录

https://github.com/lewellyn/virtualmin-nginx/issues/4

内网搭建dns服务

需求

在家里组建局域网,其中一台电脑组为服务器,搭建了很多网站(nas系统,个人博客,游戏服务,代码仓库)智能设备网关,需要内网访问。

理论

DNS(Domain Name System,域名系统)是互联网的一项基础服务,它将域名转换为IP地址,从而使计算机能够互相通信。简单地说,DNS就像互联网的电话簿,把人类容易记住的域名(如www.example.com)转换成计算机能够识别和处理的IP地址(如192.0.2.1

DNS的工作原理

  1. 域名解析
    • 用户在浏览器中输入一个网址(如www.example.com)。
    • 计算机需要知道对应的IP地址才能访问这个网站。
  2. 查询DNS服务器
    • 计算机首先检查本地缓存是否有该域名的IP地址记录。
    • 如果本地缓存没有,计算机会向配置的DNS服务器发送查询请求。
  3. 递归查询
    • DNS服务器如果没有该域名的记录,会进行递归查询,从根DNS服务器开始,逐级查询顶级域名服务器(如.com服务器)和权威DNS服务器,直到找到正确的IP地址。
  4. 返回结果
    • DNS服务器将查询结果返回给用户的计算机,计算机随后使用该IP地址与目标服务器建立连接。

什么是DNS服务器

DNS服务器是提供DNS服务的计算机系统或程序。它的主要功能是响应DNS查询请求,将域名解析为IP地址。根据其功能和角色,DNS服务器可以分为以下几类:

根DNS服务器

  • 位于DNS体系结构的最顶层,负责管理和维护根域(Root Zone)。
  • 当DNS服务器无法解析域名时,会向根DNS服务器请求帮助。

顶级域名服务器(TLD Name Servers)

  • 管理特定顶级域(如.com.org.net等)。
  • 顶级域名服务器提供特定顶级域内的权威DNS服务器列表。

权威DNS服务器(Authoritative DNS Servers)

  • 存储域名与IP地址的映射关系,并为域名提供权威的解析信息。
  • 通常由域名注册商或域名所有者维护。

递归DNS服务器(Recursive DNS Servers)

  • 为客户端执行递归查询,将域名解析为IP地址。
  • 通常由互联网服务提供商(ISP)或公共DNS服务(如Google DNS、OpenDNS)提供。

DNS服务器的类型和用途

权威DNS服务器

  • 作用:存储和提供特定域名的解析记录。
  • 用途:当用户查询特定域名时,权威DNS服务器提供该域名的最终解析结果。

递归DNS服务器

  • 作用:为客户端执行递归查询,缓存查询结果以提高解析效率。
  • 用途:大多数用户的计算机配置使用递归DNS服务器来进行域名解析,这些服务器会逐步查询其他DNS服务器以获得所需的IP地址。

Host文件

Hosts文件是一个用于将主机名(域名)映射到IP地址的本地文本文件。在操作系统解析域名时,系统首先检查Hosts文件中的记录,如果找到匹配的条目,就会直接使用对应的IP地址,而无需向DNS服务器发出查询请求。

Hosts文件在不同操作系统中的位置如下:

  • Windows
    • 文件路径:C:WindowsSystem32driversetchosts
    • 编辑方法:需要以管理员权限运行文本编辑器(如记事本),然后打开该文件进行编辑。
  • Linux/Unix
    • 文件路径:/etc/hosts
    • 编辑方法:使用超级用户权限编辑文。
  • macOS
    • 文件路径:/etc/hosts
    • 编辑方法:使用超级用户权限编辑文件。

host文件弊端,当局域网或广域网中计算机数量过多时,修改host文件工作量繁多耗时长。这时就需要dns服务器提供域名解析服务

详细操作步骤

安装dns服务软件,系统为ubuntu

bind9文档 dnsmasq

sudo apt install bind9

配置文件结构说明

/etc/bind
├── named.conf 主配置文件
    引入了named.conf.default-zones,named.conf.local,named.conf.options
├── named.conf.default-zones
    包含BIND9默认的区域配置,定义根提示文件、本地回环地址和反向区域的默认配置。
    包括 db.0,db.127,db.255,db.empty,db.local
├── named.conf.local
    用户自定义区域配置,添加域名需要修改
├── named.conf.options
    定义BIND9的全局选项配,如目录、递归设置、转发器和日志配置
├── bind.keys
    用途:包含DNSSEC(DNS Security Extensions)验证所需的根密钥。
    内容:定义了一组信任锚,用于验证DNSSEC签名的区域数据。
├── db.0
    用途:用于根区域的反向DNS查找。
    内容:定义了0.in-addr.arpa区域,用于解析IP地址0.0.0.0的反向查询。
├── db.127
    对应ip127.0.0.1 类似db.0
├── db.255
    对应ip255.255.255.255类似db.0
├── db.empty
    用途:用于定义一个空的反向区域模板
    内容:用于未使用的IP地址范围,防止未授权的查询
├── db.local
    用途:用于本地回环地址localhost的正向DNS查找
    内容:定义了localhost的A记录
├── rndc.key
    用途:用于rndc(Remote Name Daemon Control)的密钥文件
    内容:包含用于安全通信的密钥,用于远程管理BIND9服务器
└── zones.rfc1918

配置解析,以域名www.Alist.lan Alist.lan IP 192.168.1.100为例

编辑named.conf.local配置文件

sudo vim /etc/bind/named.conf.local

添加如下内容

zone "Alist.lan" {
    type master;
    file "/etc/bind/db.Alist.lan";
};

创建并编辑区域文件/etc/bind/db.Alist.lan

vim /etc/bind/db.Alist.lan

输入以下配置内容并保存

$TTL 86400
@       IN      SOA     ns1.Alist.lan. root.Alist.lan. (
                              1         ; 序列号,每次修改后需增加
                         604800         ; 刷新时间(秒)
                          86400         ; 重新尝试时间(秒)
                        2419200         ; 过期时间(秒)
                         86400 )        ; 最小TTL(秒)
;
@       IN      NS      ns1.alist.lan.  ; 指定域的权威名称服务器
ns1     IN      A       192.168.1.100   ; 名称服务器的IP地址
@       IN      A       192.168.1.100   ; 将域名*.lan映射到IP地址
www     IN      A       192.168.1.100   ; 将www.*.lan映射到IP地址 

序列号说明

修改记录后如果你不增加序列号,从属DNS服务器将不会知道主DNS服务器上的区域文件已更新,从而不会更新它们自己的数据。这可能导致不一致的DNS解析结果,影响网络的正常运行。相当于版本管理

序列号的格式

序列号通常是一个32位整数。最常见的格式有以下几种:

简单递增:每次修改区域文件时,序列号简单地递增1。

日期格式:使用日期加上一个小版本号来表示序列号。比如,2023080901表示2023年8月9日的第一次更新,2023080902表示同一天的第二次更新

检查配置是否正确

sudo named-checkconf
sudo named-checkzone Alist.lan /etc/bind/db.Alist.lan
#显示结果如下为正确
zone Alist.lan/IN: loaded serial 1
OK

重启BIND9服务

sudo systemctl restart bind9

配置客户端使用本地DNS服务器

对单台设备配置

在客户端机器上配置网络设置,将DNS服务器指向你的BIND9服务器(192.168.1.100

局域网配置

修改路由器DNS配置,指向你的BIND9服务器(192.168.1.100

首选DNS服务器设置内网的DNS服务器

测试DNS解析是否生效

在客户端机器上使用dignslookup命令测试域名解析:

dig @192.168.1.100 Alist.lan
dig @192.168.1.100 www.Alist.lan

同一局域网内的设备访问测试,dns有缓存,需要重新连接网络测试

扩展工具

编写一个添加解析服务的shell脚本

FAQ

看网上其他人的文章,会出现外网访问慢的问题,需要修改cat named.conf.options配置,添加

forwarders { 运营商ip或者家里上级路由网关; };

我没出现这种情况,采取的安装后默认配置,DNS查询是递归的,在本地dns查询不到后,会向上级DHCP的服务的dns查找,出现这种情况可能是没有开启DHCP服务,使用的静态ip导致上级dns查询不到。也可能是DNS缓存的问题。

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        listen-on-v6 { any; };
};

Ubuntu搭建Samba使用笔记

安装配置

sudo apt install samba

修改配置文件/etc/samba/smb.conf添加如下配置

[5TB]
comment = 5TB
path = /mnt/569fa0a4-724e-44aa-94a0-cf740b506291
create mask = 0700
directory mask = 0700
valid users = nasm
read only = no
browseable = yes
writable = yes
guest ok = yes

[5TB]

  • 这是共享名称,在网络上访问共享时会显示这个名称。

comment = 5TB

  • 这是对共享资源的描述,会在Windows资源管理器中显示。

path = /mnt/569fa0a4-724e-44aa-94a0-cf740b506291

  • 指定共享目录的实际路径。在这个示例中,共享目录为/mnt/569fa0a4-724e-44aa-94a0-cf740b506291

create mask = 0700

  • 创建文件时的权限掩码。0700表示新创建的文件只有所有者(创建文件的用户)有读写执行权限。

directory mask = 0700

  • 创建目录时的权限掩码。0700表示新创建的目录只有所有者有读写执行权限。

valid users = nasm

  • 指定可以访问该共享的用户。在这个示例中,只有用户nasm可以访问该共享。

read only = no

  • 指定共享是否只读。no表示该共享是可写的,用户可以在其中创建和修改文件。

browseable = yes

  • 指定共享是否在网络浏览时可见。yes表示该共享在浏览网络资源时是可见的。

writable = yes

  • 指定共享是否可写。yes表示用户可以向共享中写入数据。

guest ok = no

  • 指定是否允许未认证的用户访问该共享。no表示不允许匿名用户访问该共享

创建用户

sudo smbpasswd -a nasm

根据提示输入密码

传输配置优化

在全局设置部分添加或修改以下参数:

ini复制代码[global]
   socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536
   read raw = yes
   write raw = yes
   max xmit = 65535
   dead time = 15
   getwd cache = yes
   use sendfile = yes
   aio read size = 16384
   aio write size = 16384
   min receivefile size = 16384

这些参数的作用如下:

  • socket options:设置TCP/IP套接字选项,提高传输性能。
  • read rawwrite raw:允许原始读写,提高传输效率。
  • max xmit:设置最大传输块大小。
  • dead time:设置空闲连接的等待时间,单位为分钟。
  • getwd cache:启用路径缓存,提高性能。
  • use sendfile:启用sendfile()系统调用,提高传输性能。
  • aio read sizeaio write size:启用异步I/O,提高大文件传输性能。
  • min receivefile size:设置接收文件的最小大小。

ubuntu安装配置aria2

aria2介绍

安装

sudo apt-get install aria2

编辑配置文件

创建配置目录和session文件

sudo mkdir /etc/aria2
sudo touch /etc/aria2/aria2.session

创建文件/etc/aria2/aria2.conf如下

#=========文件保存目录自行修改
dir=/mnt/3b0360b4-babc-45cc-9669-0bc2bfe66007
#打开rpc的目的是为了给web管理端用
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
rpc-listen-port=6800
continue=true
input-file=/etc/aria2/aria2.session
save-session=/etc/aria2/aria2.session
max-concurrent-downloads=3

更详细的配置参考:aria2.conf

手动运行测试配置是否有问题

sudo aria2c --conf-path=/etc/aria2/aria2.conf

配置systemed开机启动

创建systemd配置文件/etc/systemd/system/aria2c.service如下

[Unit]
Description=aria2
After=network.target

[Service]
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
ExecStop=/bin/kill $MAINPID
RestartSec=always

[Install]
WantedBy=multi-user.targeta

配置启动

systemctl daemon-reload

systemctl enable aria2

WebGUI

AriaNg https://github.com/mayswind/AriaNg

使用nginx虚拟主机配置

server {
    listen 80;
    server_name aria2ng.lan;
    access_log /home/nasm/wwwlogs/aria2ng_nginx.log combined;
    root /home/nasm/Code/AriaNg;
    index index.html index.htm ;
    #error_page 404 /404.html;
    #error_page 502 /502.html;


    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
      expires 30d;
      access_log off;
    }

    location ~ .*\.(js|css)?$ {
      expires 7d;
      access_log off;
    }

    location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {
      deny all;
    }
    
    location /.well-known {
      allow all;
    }
  }

局域网中电脑配置host文件

127.0.0.1 aria2ng.lan

配置后浏览器输入访问域名即可,也可以使用ip地址访问

Ubuntu搭建NAS

文件系统选择

系统盘推荐使用ext4

文件存储盘,数据不重要推荐XFS

sudo apt install xfsprogs

数据重要推荐ZFS (Zettabyte File System)或Btrfs (B-tree File System),支持数据保护

sudo apt install zfsutils-linux

sudo apt install btrfs-progs

安装好文件系统后可以使用图形界面磁盘管理工具格式化磁盘

配置自动挂载磁盘

简单方式:使用磁盘管理工具配置

复杂方式:编辑/etc/fstab文件

在文件末尾添加一行,格式如下:

UUID=your-uuid /mnt/mydisk ext4 defaults 0 2

UUID=your-uuid:替换为你找到的UUID。

/mnt/mydisk:替换为你的挂载点路径。

ext4:替换为你的文件系统类型,如ext4, ntfs, xfs等。

defaults:可以包含其他挂载选项,例如rw(读写)、ro(只读)、noatime(不更新访问时间)等。

0:设置为0表示不备份这个文件系统。

2:表示文件系统检查的优先级,一般非根文件系统设置为2,根文件系统为1。

使用命令测试/etc/fstab配置是否正确:

sudo mount -a

重启系统: 重新启动系统以验证配置是否在启动时自动生效。

远程控制

anydesk,sunlogin(向日葵),teamview`

云盘工具

nextcloud

AList 获取各种网盘文件下载连接工具

将各大网盘或存储的目录整合到一个项目列表中,可以查看文件列表,播放,下载,

https://github.com/alist-org/alist

文档地址 https://alist.nn.ci/zh/guide/install/script.html

下载工具

Aria

https://www.yangliuan.cn/archives/5972

qbittorrent

qBittorrent-Enhanced-Edition

Linux挂载磁盘错误

检查文件系统类型: 确保 /dev/sda1 上的文件系统类型是你操作系统支持的。使用以下命令查看文件系统类型:

sudo file -s /dev/sda1

这将输出文件系统类型,如果不是常见的文件系统类型(如 ext4、ntfs、fat32 等),你可能需要安装相应的文件系统工具。

检查并修复文件系统: 如果文件系统损坏,可以尝试使用 fsck 工具进行修复。注意,修复前请确保没有其他进程正在使用该分区。

sudo fsck /dev/sda1

运行该命令后,按照提示进行修复。

尝试手动挂载: 尝试使用以下命令手动挂载分区,并查看具体的错误信息:

sudo mount /dev/sda1 /mnt

如果挂载成功,你可以访问 /mnt 目录。如果失败,请记录并分析错误信息。

检查磁盘硬件问题: 使用 dmesg命令查看内核日志,查找与 /dev/sda1 相关的错误信息:如果日志中有硬件错误,可能是磁盘本身有问题,需要进一步的硬件检查。

dmesg | grep sda1 

检查挂载点的权限: 确保挂载点目录(如 /media/yangliuan/12321321)存在并且具有适当的权限:

sudo mkdir -p /media/yangliuan/12321321 
sudo chown your_username:your_username /media/yangliuan/12321321 

your_username 替换为你的用户名。如果经过以上步骤后问题仍未解决,可能需要进一步的详细诊断,或者咨询相关的技术支持人员。

手动挂载错误如下:

$MFTMirr does not match $MFT (record 3). Failed to mount '/dev/sda1': Input/output error NTFS is either inconsistent, or there is a hardware fault, or it's a SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows then reboot into Windows twice. The usage of the /f parameter is very important! If the device is a SoftRAID/FakeRAID then first activate it and mount a different device under the /dev/mapper/ directory, (e.g. /dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation for more details. ChatGPT

这个错误提示表明 NTFS 文件系统存在一些问题,可能是由于文件系统不一致或硬件故障引起的。根据错误信息,你可以尝试以下步骤来解决问题:

在 Windows 下运行 chkdsk: 如果你有 Windows 系统,可以尝试在 Windows 下使用 chkdsk 工具来修复 NTFS 文件系统。打开命令提示符并以管理员身份运行以下命令:

chkdsk /f

这将在下次启动时对磁盘进行检查和修复。确保在 Windows 中运行 chkdsk 后重新启动系统,然后再次启动到 Linux。

检查硬件故障: 如果 chkdsk 无法解决问题,可能存在硬件故障。你可以尝试连接这个硬盘到另一台计算机上,看看是否能够正常访问。如果在其他计算机上也无法正常访问,那么很可能是硬件故障引起的。

使用 ntfsfix 工具: 在 Linux 下,你也可以尝试使用 ntfsfix 工具来尝试修复 NTFS 文件系统。运行以下命令:

sudo ntfsfix /dev/sda1 

这个命令会尝试修复一些常见的、轻微的 NTFS 文件系统问题。

如果以上方法都无法解决问题,可能需要考虑备份数据并格式化磁盘,然后重新创建文件系统。但在此之前,请确保你已经备份了重要的数据。

VirtualBox磁盘扩容

磁盘类型 VDI(VirtualBox 磁盘映像)

磁盘管理工具 Hard Disk

启动光盘镜像系统(PE系统)

动态分配 dynamically allocated

1.使用如何磁盘管理工具,修改磁盘大小,如上图所示

2.启动ubuntu光盘系统,或者gparted-live-1.5.0-1-amd64.iso 也可以,使用GParted ,扩容磁盘

固定分配 fixsize

pre allocate full size(预先分配所有大小)

1.使用磁盘管理,创建一个更大空间的虚拟硬盘

2.启动光盘镜像系统,打开终端,使用dd命令刻录数据到新的硬盘

dd if=/dev/sda of=/dev/sdb

3.更换存储设置中的控制器SATA中的硬盘

动态分配差分存储 Dynamically allocated differencing storage

需要将上述两种方式结合起来

1.创建一个更大空间动态分配的硬盘

2.将原先的系统盘dd刻录到新的硬盘

3.使用动态分配中的扩容方法,使用GParted扩容剩余空间

参考文章

https://www.cnblogs.com/xueweihan/p/5923937.html

https://www.modb.pro/db/493372

ubuntu desktop 22.04 安装多版本Python

二进制安装

添加存储库

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update

安装python

sudo apt-get install python3.11

安装多个版本python

sudo apt-get install python3.11 python3.9 python3.8

将旧版本的 Python 和新版本添加到更新替代方案

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2

键入以下命令以配置 python3, 输入需要选择python

sudo update-alternatives --config python3

有 2 个候选项可用于替换 python3 (提供 /usr/bin/python3)。

  选择       路径               优先级  状态
------------------------------------------------------------
  0            /usr/bin/python3.11   2         自动模式
  1            /usr/bin/python3.10   1         手动模式
* 2            /usr/bin/python3.11   2         手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:^^^^^^

查看版本 python3 -V

编译安装

默认安装到/usr/local/bin

sudo apt install gcc dialog libaugeas0 augeas-lenses libssl-dev libffi-dev ca-certificates
tar xzf Python-3.11.3.tgz
pushd Python-3.11.3 > /dev/null
./configure --enable-optimizations
 make -j 8 && make altinstall

配置默认python3

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.11 2
sudo update-alternatives --config python3

集成环境

conda 占用空间太大,每个环境都要重复安装基础组件,适合AI项目

pyenv

存在的问题

apt update 报错

Traceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 3, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
$ cd /usr/lib/python3/dist-packages
$ ls -la | grep "apt_pkg.cpython"
$ sudo cp apt_pkg.cpython-310-x86_64-linux-gnu.so apt_pkg.so

编译安装的python使用此方法无法解决

gnome-terminal等基于的python软件无法使用

cd /usr/lib/python3/dist-packages/gi/

sudo cp _gi_cairo.cpython-310-x86_64-linux-gnu.so _gi_cairo.cpython-311-x86_64-linux-gnu.so

sudo cp _gi.cpython-310-x86_64-linux-gnu.so _gi.cpython-311-x86_64-linux-gnu.so

编译安装的python使用此方法无法解决

最好不要更改系统默认python

https://stackoverflow.com/questions/56218562/how-to-fix-modulenotfounderror-no-module-named-apt-pkg

https://askubuntu.com/questions/1301461/modulenotfounderror-no-module-named-apt-pkg-whilst-running-apt-update

https://blog.csdn.net/yulinxx/article/details/125472350

Refer To

https://ubuntuhandbook.org/index.php/2021/10/compile-install-python-3-10-ubuntu/

https://ubuntuhandbook.org/index.php/2022/10/python-3-11-released-how-install-ubuntu/

https://towardsdatascience.com/installing-multiple-alternative-versions-of-python-on-ubuntu-20-04-237be5177474

ubuntu音乐播放器

QQ音乐

下载页面:https://y.qq.com/download/download.html

shell安装脚本 https://github.com/yangliuan/ubuntu-start/blob/main/include/linuxqq.sh

网易云音乐

下载页面 https://music.163.com/#/download (页面上没有了ubuntu的下载项)

下载地址 https://d1.music.126.net/dmusic/netease-cloud-music_1.2.1_amd64_ubuntu_20190428.deb

shell安装脚本https://github.com/yangliuan/ubuntu-start/blob/main/include/neteasy_cloud_music.sh

Lollypop

有漂亮的界面和直观的用户体验。支持音频标签编辑、歌词显示和艺术家图片显示等功能

安装(可以从商店安装)

sudo apt-get install lollypop

Rhythmbox

ubuntu默认音乐播放器

https://wiki.gnome.org/Apps/Rhythmbox

安装 (可以从商店安装)

sudo apt install rhythmbox

如何修改mp3文件的元数据,如专辑名称,歌手名称

使用命令行工具 “id3v2″(需要安装):

a. 打开终端。
b. 安装 id3v2 工具:sudo apt-get install id3v2
c. 进入包含要编辑的 MP3 文件的目录:cd /path/to/mp3/files
d. 使用以下命令来修改元数据:

修改专辑名称:id3v2 –album “新专辑名称” 文件名.mp3
修改歌手名称:id3v2 –artist “新歌手名称” 文件名.mp3
e. 替换 “新专辑名称” 和 “新歌手名称” 为你想要的实际名称,将 “文件名.mp3” 替换为要编辑的 MP3 文件的实际文件名。

使用图形界面工具 “EasyTAG”(需要安装):

a. 打开终端。
b. 安装 EasyTAG 工具:sudo apt-get install easytag
c. 运行 EasyTAG:easytag
d. 在 EasyTAG 窗口中,打开要编辑的 MP3 文件。
e. 找到并编辑专辑名称和歌手名称字段。
f. 保存修改后的文件。

Kid3: Kid3 是一个跨平台的开源音乐标签编辑器,支持多种音频文件格式(包括 MP3、FLAC、AAC、WMA 等)。官方网站(https://kid3.kde.org/)

编译安装PHP

本文以centos stream 9和php8.1为例,描述编译思路

Unix 系统下的安装 核心配置选项列表

安装编译需要的工具和依赖

如何确定需要的依赖,看一下你要用的php扩展,需要那些系统组件和组件对应的系统库

可以查看扩展库归类 ,找到安装/配置说明可以查看详细说明,举例说明 GD库 配置参数详细说明

使用dnf或yum install xxx安装

#编译器相关工具
deltarpm gcc gcc-c++ make cmake autoconf bison re2c 
#基础库
glibc glibc-devel glib2 glib2-devel
#网络和数据库相关
curl curl-devel libcurl libcurl-devel sqlite-devel sqlite-devel libsqlite3x-devel
#文本字符数据格式
oniguruma oniguruma-devel libxml2 libxml2-devel libxslt libxslt-devel libtidy-devel libtidy libicu-devel 
#图片格式 字体
gd-devel
freetype freetype-devel libjpeg libjpeg-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel libtiff-dev libgif-dev libwebp-devel
#文件解压缩
 zlib zlib-devel libzip-devel  bzip2 bzip2-devel
#数学和加密
openssl openssl-devel libmcrypt libmcrypt-devel mhash mhash-devel mcrypt libargon2 libsodium

手动编译安装

有些库没有系统二进制包,不能直接使用命令安装需要下载来,或者版本太低达不到php的要求,需要手动编译安装

libiconv libargon2 libsodium

依赖说明

deltarpm 一种rpm包,优化了体积

bison 是一种通用目的的分析器生成器

re2c 一个将正则表达式转化成基于C语言标识的预处理器

oniguruma 正则表达式库,使用–enable-mbstring需要安装

freetype 可移植的字体引擎,它提供统一的接口来访问多种字体格式文件 –with-freetype

libicu  Unicode 支持、软件国际化编码 –enable-intl 开启intl扩展

libxml2 xml操作库 –enable-xml 开启

libxslt 是一种样式转换标记语言,可以将XML资料档转换为另外的XML或其它格式 –with-xsl

libtidy 处理html的一种扩展 –with-tidy 很少用

libiconv 字符编码转换库 启用–with-iconv

查看编译选项

./configure --help

创建用户和组

id -g www >/dev/null 2>&1
[ $? -ne 0 ] && groupadd www
id -u www >/dev/null 2>&1
[ $? -ne 0 ] && useradd -g www -M -s /sbin/nologin www

常用的编译参数选项,来自oneinstack脚本,php8.1.sh安装源码

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \
    --with-config-file-scan-dir=/usr/local/php/etc/php.d \
    --with-fpm-user=www --with-fpm-group=www --enable-fpm --disable-fileinfo \
    --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
    --with-iconv --with-freetype --with-jpeg --with-zlib \
    --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif \
    --enable-sysvsem --with-curl --enable-mbregex \
    --enable-mbstring --with-password-argon2 --with-sodium=/usr/local --enable-gd --with-openssl \
    --with-mhash --enable-pcntl --enable-sockets --enable-ftp --enable-intl --with-xsl \
    --with-gettext --with-zip=/usr/local --enable-soap --disable-debug
#防止libiconv导致的报错
make ZEND_EXTRA_LIBS="-L/usr/local/libiconv/lib/ -liconv"
make install

如上启用了fpm,mysqli,mysqland,iconv,gd,xml,bcmath,shmop,exif,sysvsem,curl,mbstring,Password hashing,mhash,openssl,pcntl,sockets,ftp,intl,xsl,gettext,zip,soap

根据项目实际需求来启用需要的参数,比如,项目用cli框架swoole或者workman之类的可以不启用fpm