CentOS7 安装配置笔记 v2

1.通过镜像安装 CentOS7
2.安装 wget 下载工具
3.修改镜像地址
4.安装 nano 文本编辑工具
5.安装 dotnet core
6.安装vsftpd
7.设置 firewalld
8.为 dotnet 创建守护进程 Supervisor
9.安装 MariaDB(兼容MySQL)
10.安装 MySQL
11.安装 FreeSWITCH
12.常用命令
13.net core 跨平台
14.制作 RPM 安装包
15.安装 .deb 文件(转换为 rpm 后安装)
16.安装 mono
17.安装 docker
18.开机自启动
19.安装 ffmpeg
20.SVN
21.安装 nodejs/npm
22.设置http代理
23.单网卡绑定双IP
24.双网卡设置
25.读取MAC地址
26.格式化挂载磁盘
27.tar打包与gzip压缩
28.挂载 iso 定制镜像文件
29.nginx 配置问题
30.修改网卡名称
31.crontab 定时任务
32.ntp 服务
33.查询依赖
34.gitlab 数据备份与还原


1.通过镜像安装 CentOS7
==============================
* 使用 UltraISO 9.7 或者 rufus-3.5p 制作ISO的启动U盘

运行安装前最好配置 IPv4 地址和 DNS, 注意要启用以太网卡
否则安装后,需要手动启用网卡和配置IP和DNS
/etc/sysconfig/network-scripts/ifcfg-xxxx
#修改
BOOTPROTO=static #将dhcp换成ststic
ONBOOT=yes          #将no换成yes
#新增
IPADDR=192.168.85.100 #静态IP
GATEWAY=192.168.85.2  #默认网关
NETMASK=255.255.255.0 #子网掩码

/etc/resolv.conf
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器

保存退出后,重启(reboot)或者重启网络服务
service network restart



2.安装 wget 下载工具
==============================
* 不是必须的

yum -y install wget



3.修改镜像地址
==============================
* 不是必须的

cd /etc/yum.repos.d/
mv CentOS7-Base.repo CentOS7-Base.repo.buckup
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum makecache
yum -y update



4.安装 nano 文本编辑工具
==============================
yum install nano



5.安装 dotnet core
==============================
//2.0 时代
//添加dotnet产品Feed
//rpm --import https://packages.microsoft.com/keys/microsoft.asc
//yum update
//安装.NET Core所需的组件
//yum install libunwind libicu

■安装 dotnet core SDK
//2.2 官方指导
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
yum update
yum install dotnet-sdk-2.2
//如果须安装指定版本, 请通过 https://dotnet.microsoft.com/download/dotnet-core/2.2 查找 Package Manager Instructions 定位到特定版本
yum install dotnet-sdk-2.2-2.2.107-1
yum install dotnet-sdk-2.2-2.2.300-1

■安装 runtime
//Add the dotnet product feed, 参见 https://dotnet.microsoft.com/download/linux-package-manager/centos/runtime-current
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
yum update
//如果安装 dotnet-core & aspnet-core(57M)
yum install aspnetcore-runtime-2.2
//如果仅安装 dotnet-core(27M)
yum install dotnet-runtime-2.2

//如果须安装指定版本, 请通过 https://dotnet.microsoft.com/download/dotnet-core/2.2 查找 Package Manager Instructions 定位到特定版本
yum install dotnet-runtime-2.2.5-1
yum install aspnetcore-runtime-2.2.5-1

//如果遇到报告 package xxx.rpm is not signed 在安装包时加参数 --nogpgcheck 即可
//安装完毕后可通过 dotnet --info 验证

* dotnet core 跨平台注意规避路径拼接 "/" 和 "\" 字符的问题,尽量使用 IO.Path.Combin()
** 手动下载和安装特定版本的 dotnet core 参见<CentOS 7 下安装部署.NET Core多版本环境>


6.安装vsftpd
==============================
yum -y install vsftpd
//创建新用户总是登录失败,暂时直接用 root 账号登录

修改 /etc/vsftpd/vsftpd.conf
anonymous_enable=NO

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

pasv_enabld=YES
pasv_min_port=30000
pasv_min_port=30999

allow_writeable_chroot=YES
修改 /etc/vsftpd/ftpusers, 注释掉 root
修改 /etc/vsftpd/user_list, 注释掉 root

//配置下selinux
getsebool -a | grepftp //查看 selinux 配置
setsebool -P ftpd_full_access on
setsebool -P tftp_home_dir on

reboot
systemctl stop firewalld //暂时关闭防火墙

systemctl start vsftpd

//其他命令
systemctl restart vsftpd //重启vsftpd
systemctl enable vsftpd    //开机启用ftp
systemctl disable firewalld //开机不启用防火墙


7.设置 firewalld
==============================
放行 TCP 8080, UDP 2020

//启用某个服务/端口
firewall-cmd --zone=public --add-service=https                 #临时
firewall-cmd --zone=public --add-port=8080-8081/tcp         #临时
firewall-cmd --permanent --zone=public --add-service=https         #永久
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp #永久
//如果是要删除,直接修改成remove-service或者remove-port

//修改配置文件后 使用命令重新加载
firewall-cmd --reload

//查看开启的端口和服务
firewall-cmd --permanent --zone=public --list-services     #服务空格隔开 例如 dhcpv6-client https ss
firewall-cmd --permanent --zone=public --list-ports     #端口空格隔开 例如 8080-8081
//在每次修改 端口和服务后 /etc/firewalld/zones/public.xml 文件就会被修改。


防火墙预定义的服务配置文件是xml文件,目录在 /usr/lib/firewalld/services/;
在 /etc/firewalld/services/ 这个目录中也有配置文件,但是 /etc/firewalld/services/ 目录优先于 /usr/lib/firewalld/services/ 目录。



8.为 dotnet 创建守护进程 Supervisor
==============================
//安装 supervisor
yum install epel-release
yum install -y supervisor
systemctl enable supervisord # 开机自启动
systemctl start supervisord # 启动supervisord服务
systemctl status supervisord # 查看supervisord服务状态
ps -ef|grep supervisord # 查看是否存在supervisord进程

//安装完成之后,如果不存在 /etc/supervisord.conf 则初始化配置
echo_supervisord_conf > /etc/supervisord.conf

■ Supervisor UI 管理台
Supervisor 默认给我们提供了一个图形界面来供我们管理进程和任务,在 Linux 中我们需要手动开启一下。打开位于/etc/supervisord.conf文件,去掉 inet_http_server 节点的注释
[inet_http_server]
port=*:9001

然后可通过 http://IP:9001 来查看运行的进程了,记得防火墙放行 tcp 9001

//创建 /etc/supervisor 目录
mkdir /etc/supervisor
在 /etc/supervisor/config.d/ 目录下新建一个配置文件
mkdir /etc/supervisor/config.d/
touch cmscore.conf

//编辑 cmscorewas.conf
[program:cmscorewas]
command=dotnet CmsCoreWAS.dll
directory=/home/cmdcorewas/
environment=ASPNETCORE_ENVIRONMENT=Production
autostart=true
autorestart=true
;startsecs=1
stopsignal=INT
user=root
stderr_logfile=/var/log/CmsCoreWAS.err.log
;stdout_logfile=/var/log/CmsCoreWAS.out.log

//还要修改 /etc/supervisord.conf, 去掉对 include 节点的注释,指定应用的配置路径
[include]
files=/etc/supervisor/config.d/*.conf

//保存退出后,需要重新加载一下配置
supervisorctl reload



9.安装 MariaDB(兼容MySQL)
==============================
//安装 GPG-Key
rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
//安装 MariaDB
yum -y install MariaDB-server MariaDB-client

//安装成功之后启动MariaDB服务,并设为开机自启, 记得开放 tcp 3306
systemctl start mariadb #启动服务
systemctl enable mariadb #设置开机启动
systemctl restart mariadb #重新启动
systemctl stop mariadb.service #停止MariaDB
//登录数据库,缺省口令为空
mysql -uroot -p

//MariaDB的相关简单配置
mysql_secure_installation
---------------------
//首先是设置密码,会提示先输入密码
Enter current password for root (enter for none):<–初次运行直接回车
 
//设置密码
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
 
//其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
 
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车(后面授权配置)
 
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
 
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
---------------------

//配置MariaDB的字符集
//使用vim /etc/my.cnf.d/server.cnf命令编辑server.cnf文件,在[mysqld]标签下添加:
---------------------
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
---------------------

//配置初始化完成,重启Mariadb。
systemctl restart mariadb

//创建用户命令(用户名,密码请自行修改),先登录 MariaDB
create user username@localhost identified by 'password';
//授予外网登陆权限
grant all privileges on *.* to username@'%' identified by 'password';
flush privileges;

//如果启用了防火墙
firewall-cmd --permanent --zone=public --add-service=mariadb

10. 安装 MySQL
================
//下载了安装用的yum Repository,大概25KB的样子
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
//开始安装MySQL服务器
yum -y install mysql-community-server

//修改大小写敏感设置
nano /etc/my.cnf
在最后添加一行
lower_case_table_names=1
说明
0=区分大小写
1=不区分大小写

skip-name-resolve //不做主机名解析, 可加快客户端连接速度

//启动MySQL
systemctl start mysqld
//启动失败  [ERROR] –initialize specified but the data directory has files in it. Aborting.
//mv /var/lib/mysql/mysql /var/lib/mysql/mysql.bak 后重新启动服务

//查看MySQL运行状态
systemctl status mysqld
//重启动MySQL
systemctl restart mysqld


//找出此时root用户的密码
grep "password" /var/log/mysqld.log
//找到的密码可能已过期,如果无法登陆mysql,需要重置密码
mysql_secure_installation

//进入mysql
mysql-uroot -p

//查看密码策略
mysql> SHOW VARIABLES LIKE 'validate_password%';
//修改密码策略
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=4;
//上述修改时临时性的,服务重启即失效
//要持久化密码策略,需要修改 /etc/my.cnf, 添加
validate_password_policy=0
validate_password_length=4

//修改密码
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
mysql>FLUSH PRIVILEGES;

//导入数据库脚本
mysql -uroot -p<dbInit.sql

//因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉
yum -y remove mysql57-community-release-el7-11.noarch

//授予外网登陆权限
grant all privileges on *.* to username@'%' identified by 'password';
flush privileges;
//如果启用了防火墙
firewall-cmd --permanent --zone=public --add-service=mysql


###################
#手动下载rpm安装包#
到mysql网站或者其他镜像站点下载rpm包,共5个rpm包
http://mirror.centos.org/altarch/7/os/aarch64/Packages/libaio-0.3.109-13.el7.aarch64.rpm
http://mysql.mirror.kangaroot.net/Downloads/MySQL-5.7/mysql-community-server-5.7.25-1.el7.x86_64.rpm
http://mysql.mirror.kangaroot.net/Downloads/MySQL-5.7/mysql-community-libs-5.7.25-1.el7.x86_64.rpm
http://mysql.mirror.kangaroot.net/Downloads/MySQL-5.7/mysql-community-common-5.7.25-1.el7.x86_64.rpm
http://mysql.mirror.kangaroot.net/Downloads/MySQL-5.7/mysql-community-client-5.7.25-1.el7.x86_64.rpm

mysql-community-libs会与maridb-libs包冲突
卸载
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

libaio可以直接yum安装,也可以下载安装
安装mysql5.7,可以rpm -ivh一个一个安装,也可以一条命令全部安装。
安装时注意按照上面给出的软件顺序安装

启动
systemctl start mysqld

查找临时密码
grep "password" /var/log/mysqld.log
2018-09-24T09:30:44.743765Z 1 [Note] A temporary password is generated for root@localhost: g9bbd.r?Cj40
登录
mysql -uroot -pg9bbd.r?Cj40
修改密码
mysql> set password=password("Mysql@657");
######################

* FX4.0 同时支持 4.1-5.7 的 MySQL.Data.dll 版本为 v6.2.5.0

11.安装 FreeSWITCH
==============================
推荐版本 1.6.10
http://files.freeswitch.org/releases/freeswitch/

要支持 WebRTC 推荐 CentOS8 下安装 1.10.6

客户端注册异常, 可尝试删除 db/ 下所有文件后重启服务


12.常用命令
==============================
rpm -qa|grep xxxx    查询已安装的rpm列表 (q表示query,a表示查询所有,grep表示过滤)
rpm -e xxxx         删除 xxxx 软件包
rpm -ivh xxxx.rpm    安装rpm包  (i=install 安装, v=verbose 提示, h=hash 进度条)
rpm -e xxxx            卸载rpm包

ps -ef|grep        要查找的进程关键字
netstat -nap | grep 进程pid    #查看pid占用端口

cat             要查看的文件
mkdir             创建目录
rm                 删除文件
mv                 移动文件
cp                 复制文件
ls
ls -l             查看软链接
systemctl {start|stop|status|restart|quit}
ip addr         查询本机IP
firewall-cmd

磁盘相关命令:

df -hl             查看磁盘剩余空间
df -h             查看每个根路径的分区大小
du -sh [目录名] 返回该目录的大小
du -sm [文件夹] 返回该文件夹总M数
du -h [目录名]     查看指定文件夹下的所有文件大小(包含子文件夹)
du -lh --max-depth=1     看下一级各文件夹大小

查看硬盘的分区 #sudo fdisk -l
查看IDE硬盘信息 #sudo hdparm -i /dev/hda
查看STAT硬盘信息 #sudo hdparm -I /dev/sda

#sudo apt-get install blktool
#sudo blktool /dev/sda id

查看硬盘剩余空间 #df -h #df -H
查看目录占用空间 #du -hs {目录名}
优盘没法卸载 #sync fuser -km /media/usbdisk

允许所有用户运行权限    #chmod 777 {文件名}
禁止所有用户运行权限     #chmod a-x {文件名}
查看文件属性             #lsattr {文件名}
修改文件属性,禁止只读  #chsattr -i {文件名}

Linux下通过 rm -rf 删除大量文件时报错:Argument list too long
#ls |[grep {关键字}|] xargs -n 10 rm -fr

文件硬/软链接    #ln [-s] {源文件} {目标文件链接}

文件夹软链接(--不允许给文件夹创建硬连接)    #ln -s {源文件夹}/ {目的文件夹软链接}
如将 zlmedia 的 record 目录迁移到 1T大硬盘
#cd /usr/local/tehike/thmediaserver/www
#mv ./record /data/tehike/
#ln -s /data/tehike/record ./record

注意:在删除时软连接时,软连接后面不要加ls / , 加了 / 相当于删除源文件夹的所有内容。
可以直接在软连接下创建文件 就相当于在原文件夹下创建了文件。删除了软连接,源文件夹的内容不会变。
你对连接的任何操作几乎都是在操作源文件

修改时区
#timedatectl status
#timedatectl set-timezone "Asia/Shanghai"
修改日期时间
#date -R
#date -s MMDDhhmmYYYY.ss //月日时分年.秒

查找文件, 排除 Nfc 目录
find . -path ./Nfc -prune -o -type f -name *.mk -print

13.net core 跨平台
==============================
方案1.使用 ZKWeb.System.Drawing 并将 将项目中所有“System.Drawing”改为“System.DrawingCore”
方案2.使用 System.Drawing.Common 或者 Mono.System.Drawing
方案1或2都依赖 libgdiplus,安装步骤

yum install -y epel-release
yum makecache fast
yum install -y libgdiplus-devel
####################

解决绘制验证码时 Arial 字体乱码
fc-list //CentOS中查看当前系统已安装的字体列表
//如果不存在此命令,请使用下面的命令安装:
yum -y install fontconfig
//然后从Windows系统的C:\Windows\Fonts目录中,复制出arial.ttf,并上传到CentOS主机中的/usr/share/fonts/lyx目录下,然后更新字体缓存
fc-cache



14. 制作 RPM 安装包
==============================
安装工具程序
yum install rpm-build
yum install rpmdevtools

创建工作目录树
cd
rpmdev-setuptree

生成6个目录 BUILD,RPMS,SOURCES,SPECS,SRPMS


创建或修改 *.spec 文件
cd SPECS
nano cmscorewas.spec
===================== cmscorewas.spec 示例 ===================
Name:        cmscorewas
Version:    1.2.5
Release:    20200512
Summary:    The "CmsCoreWAS" program
License:    GPLv3+


%define _prefix   /usr/local/tehike/cmscorewas


%description

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_prefix}
cp -r /mnt/e/Projects/VSPCore/CmsCoreWAS/bin/Release/netcoreapp2.2/publish/*  %{buildroot}%{_prefix}

%post
rm -f /etc/supervisord.d/cmscorewas.ini
cp %{_prefix}/install/cmscorewas.ini  /etc/supervisord.d/

%preun

%postun
rm -rf %{_prefix}
rm -f /etc/supervisord.d/cmscorewas.ini

%files
%defattr(-,root,root,-)
%{_prefix}/*


%changelog
==============================================================

执行打包命令
rpmbuild -bb  ./rpmbuild/SPECS/*.spec
或者在SPECS目录下直接
rpmbuild -bb *.spec



15.安装 .deb 文件(转换为 rpm 后安装)
==============================
下载alien(yum源中没有alien可用包)
wget http://linux4you.in/alien-8.81-2.noarch.rpm

安装 epel
yum install epel-release

安装alien
yum install alien

转换为rpm
alien xxx.deb generated

16.安装 mono
==============================
配置安装mono程序的yum来源
参考文献:
https://www.mono-project.com/download/stable/#download-lin-centos
https://www.monodevelop.com/download/#fndtn-download-lin-centos

1. > rpm --import "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
2. > curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo
step 2也可以使用以下命令代替:
> yum-config-manager --add-repo https://download.mono-project.com/repo/centos/

安装monodevelop 这是一个开发工具。
yum install monodevelop -y

已知问题:
monodevelop 在 linux 安装后 debug 报错 Debugger operation failed, 不同的版本报错不一样, 有的显示了文件名,有的不显示,是文件找不到的错误。归根结底是找不到这个文件:gnome-terminal-server。

故障原因:
It was because the folder "gnome-terminal-server" had moved from /usr/lib/gnome-terminal/ to /usr/libexec/

解决方案:
cd /usr/lib
sudo mkdir gnome-terminal
cd gnome-terminal
sudo ln -s /usr/libexec/gnome-terminal-server

已知问题:
yum 上的版本 7.8.4(build2) 支持3.1, 不支持 net5


17.安装 docker
==============================
参考文献:
https://blog.csdn.net/weixin_46091818/article/details/110446614

1. 卸载旧版本 docker
> yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-engine
2. 安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库
> yum install -y yum-utils

> yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3. 安装docker
> yum install docker-ce docker-ce-cli containerd.io

4. 启动docker并设置开机启动
> systemctl start docker #启动docker
> systemctl enable docker #设置开机启动docker

5. 测试
> docker version #查看一下docker版本
> docker run hello-world #运行hello-world,验证docker是否安装成功
> docker ps --all #查看执行过的docker进程
> docker stop 容器id #停止
> docker rm 容器id #删除

18. 开机自启动
==============================
1.赋予脚本可执行权限(/opt/script/autostart.sh是你的脚本路径)
>chmod +x /opt/script/autostart.sh1

2、打开/etc/rc.d/rc/local文件,在末尾增加如下内容

/opt/script/autostart.sh

3、在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限
>chmod +x /etc/rc.d/rc.local


19. 安装 ffmpeg
==============================
由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源完成此工作。
1. Nux Dextop 源. v2.8.15
CentOS 7
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install ffmpeg ffmpeg-devel -y

2. okay 源, v3.2.4
参见 https://okay.com.mx/blog-news/rpm-repositories-for-centos-6-and-7.html
yum install epel-release
rpm -ivh http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-5.el7.noarch.rpm
yum install ffmpeg

安装完成后可运行 ffmpeg 测试


20. SVN
==============================
连不上 SVN, 检查 /etc/sysconfig/svnserve
[root@source ~]# cat /etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /home/svn/repos/"

看服务是否正常
systemctl status svnserve
systemctl start svnserve

SVN不能打开文件,权限不够的问题解决方式
配置selinux

[root@make_blog ~]# cat /etc/sysconfig/selinux
 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.(关闭selinux)
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

##最后,再重启即可.


21.安装 nodejs/npm
==============================
yum 官方源的版本太老, okay 源的新一点,但是下载很慢
因此从官网 https://nodejs.org/en/download/ 下载LTS二进制文件 Linux Binaries(x64)

cd ~
wget https://nodejs.org/dist/v14.17.5/node-v14.17.5-linux-x64.tar.xz
xz -d node-v14.17.5-linux-x64.tar.xz
tar -xvf node-v14.17.5-linux-x64.tar
mv node-v14.17.5-linux-x64 /usr/local/node

#v14.15.4
wget https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz
xz -d node-v14.15.4-linux-x64.tar.xz
tar -xvf node-v14.15.4-linux-x64.tar
mv node-v14.15.4-linux-x64 /usr/local/node

到此为止,nodejs 就算是安装好了一半,可以执行如下命令测试:
cd /usr/local/node/bin
node -v
npm -v

加入环境变量,让npm和node命令全局生效
nano /etc/profile

在文件末尾增加配置
# set for nodejs
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH

执行命令使配置文件生效
source /etc/profile

也可以采用软链接方式(推荐)
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/

另外也可以通过 nvm 来安装和管理,方便在多个版本之间切换
#curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh | bash
或者
#wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh | bash
之后
#source ~/.bashrc
PS:通常不要用root权限安装软件,因为线上任何服务部署都不允许用root,其他软件用root安装了,很可能导致部署的时候各种日志文件为root权限

如果出现 SSL connect error, 有可能ssl证书可能过期了, 解决方案
#yum update -y nss curl libcurl

安装node
#nvm install stable #安装最新稳定版
#nvm install v14.15.4 #安装指定版本

查看
#nvm list

切换版本
#nvm use 版本号


22.设置http代理
==============================
export http_proxy=your.proxy.address:10809
export https_proxy=your.proxy.address:10809


23.单网卡绑定双IP
==============================
临时配置
#ifconfig ens33:0 192.168.1.200 netmask 255.255.255.0 up

PS:如果手动ifconfig ens33:0 down, 重新使用ifconfig ens33:0 up就会报错。
由于MAC地址重复了,解决方法是手动分配一个MAC地址
#ifconfig ens33:0 hw ether xx:xx:xx:xx:xx:xx
#ifconfig ens33:0 up

永久配置
#cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0
#nano /etc/sysconfig/network-scripts/ifcfg-ens33:0
修改以下内容
----
NAME="ens33:0"
DEVICE="ens33:0"
IPADDR="192.168.1.200"
PREFIX="24"
GATEWAY="192.168.1.254"
----
注意如果为第二个IP指定了网关,生效后会影响原来IP的通信,需要手动添加静态路由解决

临时配置
#ip route add 19.0.0.0/22 via 19.0.2.200 dev ens33

永久配置
#nano /etc/sysconfig/network-scripts/route-ens33
----
19.0.0.0/22 via 19.0.2.200 dev ens33
----
保存后重启网络
#systemctl restart network



24.双网卡配置
==============================
CentOS7 参照单网卡多IP,设置启用网卡2后,为网卡1添加静态路由
CentOS8 连静态路由都不需要添加,自适应了


25.读取MAC地址
==============================
/sys/class/net/ens33/address

ens33 为对应网卡的名称



26.格式化挂载磁盘
==============================
查看分区
lsblk -f

格式化整个磁盘为一个分区
mkfs -t ext3 /dev/sdb

mkdir /data && mkdir /data/tehike
mount /dev/sdb /data/tehike
mv /usr/local/tehike/photos/ /data/tehike/
ln -s /data/tehike/photos /usr/local/tehike/photos
chmod 666 /data/tehike/photos

打开 /etc/fstab 添加一行开机自动挂载
/dev/sdb /data/tehike ext3 defaults 0 0

备份数据后,重新格式化为 xfs 格式,先卸载
umount /dev/sdb
加 -f 重写原有 ext3 格式分区
mkfs -t xfs -f /dev/sdb
修改 /etc/fstab
/dev/sdb /data/tehike xfs defaults 0 0



27.tar打包与gzip压缩
==============================
打包
tar -c ./backup > backup.tar

tar -cf backup.tar ./backup/

压缩
gzip backup.tar
生成压缩文件 backup.tar.gz

解压
gzip -d ./backup.tar.gz

解包
tar -xf ./backup.tar

打包并压缩
tar -czvf ./backup.tar.gz ./backup/

解压并拆包
tar -xzvf ./backup.tar.gz


分卷打包的 xxx.tar.001 xxx.tar.002 解包
cat xxx.tar.*|tar -zxv

zip 压缩 /xxx/xx 为 xxx.zip
zip -r xxx.zip /xxx/xx

unzip 解压缩 xxx.zip 到 /yyy
unzip -d /yyy ./xxx.zip


28.挂载 iso 定制镜像文件
==============================
复制 iso 文件到 /opt 目录下
mkdir -p  /mnt/media
挂载 iso
mount -o loop /opt/CentOS-7-x86_64-Minimal-1804.iso /mnt/media

#挂载光盘 光驱一般为 sr0...
mount /dev/sr0 /mnt/media


安装制作发行版的工具
yum -y install createrepo mkisofs isomd5sum rsync

同步/media下的文件到/ISO路径下,除了Packages和repodata文件夹
mkdir /ISO
/usr/bin/rsync -a --exclude=Packages/ --exclude=repodata/ /mnt/media/ /ISO/
# 在/ISO/文件夹下新建Packages和repodata文件夹
mkdir -p /ISO/{Packages,repodata}

生成已安装的 rpm 清单
rpm -qa >> /root/install.log

复制已安装的 rpm 包
awk '{print $0}'  /root/install.log |xargs -i cp /mnt/media/Packages/{}.rpm /ISO/Packages/

配置yum下载指定软件包列表(rpms_list.txt)的所有依赖包
将需要安装的包及其依赖写入 rpms_list.txt,如上面通过 iso 复制失败,需要通过网络安装的 rpm 包
vim download_rpms.sh
=============
#!/bin/sh   
for line in `cat /root/rpms_list.txt`
  do
    echo "download file>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>and it's denpendies" $line
    #本机已安装无法使用 yum install -y --downloadonly --downloaddir=/root/test/ $line
    #先安装 yum -y install yum-utils 再进行下载
    yumdownloader $line  --resolve --destdir=/root/test
  done
=============
chmod +x download_rpms
./download_rpms

#拷贝包到指定目录
cp /root/test/* /ISO/Packages/

#修改 isolinux.cfg 文件

#编辑comps文件, 添加定制rpm包到 group/packagelist , 添加定制的groupid到 environment
参见https://www.cxymm.net/article/honglicu123/115856485#_rpm_35

#生成新的 repodata 数据
cd /ISO
createrepo -g repodata/comps.xml ./

#生成 ISO, 选项 -V 就是上面提及的 inst.stage2=hd:LABEL=CentOS\x207\x20x86_64,带有空格(\x20)的需要加上双引号,比如 -V "CentOS 7 x86_64"
cd /ISO
genisoimage -joliet-long -V "CentOS 7 x86_64" -o CentOS-7-5-VSP3000SR.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -cache-inodes -T -eltorito-alt-boot -e images/efiboot.img -no-emul-boot /ISO

#制作镜像MD5值
implantisomd5 /ISO/CentOS-7-5-VSP3000SR.iso


buildiso.sh
=======
cd /ISO &&
    rm -f /ISO/CentOS-7-5-VSP3000SR.iso &&
    rm -f /ISO/repodata/*.* &&
    createrepo -g c7-minimal-x86_64-comps.xml ./ &&
    genisoimage -joliet-long -V "CentOS 7 x86_64" -o CentOS-7-5-VSP3000SR.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -cache-inodes -T -eltorito-alt-boot -e images/efiboot.img -no-emul-boot /ISO &&
    implantisomd5 /ISO/CentOS-7-5-VSP3000SR.iso



29.nginx 配置问题
==============================
如果列文件目录返回 HTTP 403,修改 /etc/nignx/nginx.conf
在对应的目录配置下增加
autoindex on;

如果要为目录指定默认页返回 HTTP 403,确认页面文件已存在则依次添加
index index.htm;index.php;/index.htm
并修改对应目录的权限, 如
chmod -R 755 /usr/share/tehike/yum/

4=read
2=write
1=execute

当前用户|同组用户|所有用户

如反向代理 返回 502 Bad Gateway
先查询
getsebool httpd_can_network_connect
若返回 httpd_can_network_connect --> off
则启用该开关
setsebool -P httpd_can_network_connect 1

若返回 SELinux is disabled, 已关闭selinux, 无需后续操作


启动服务失败,显示
nginx: [emerg] bind() to 0.0.0.0:10241 failed (13: Permission denied)
一般这种情况都是因为防火墙或者selinux限制
getenforce
显示为Enforcing
解决方案:设置selinux
setenforce 0
getenforce
显示为Permissive
重启nginx服务

若 getenforce 返回 Disabled, 已关闭selinux, 无需后续操作



30.修改网卡名称
==============================
修改 ens32 为 enp1s0

#cd /etc/sysconfig/network-scripts/
#nano ifcfg-ens32
将NAME DEVICE 的 ens32 修改为 enp1s0
#mv ifcfg-ens32 ifcfg-enp1s0

#nano /etc/default/grub
在 GRUB_CMDLINE_LINUX= 后添加 net.ifnames=0  biosdevname=0
#grub2-mkconfig -o /boot/grub2/grub.cfg

#reboot

如果重启后不生效,ifconfig 查看网卡名变成为 eth0, 自动获取了IP地址(如果有DHCP服务器)
需要在/etc/udev/rules.d目录中创建一个网卡规则文件。
touch /etc/udev/rules.d/70-persistent-net.rules
在文件中写入以下参数:
ACTION=="add",SUBSYSTEM=="net",DRIVERS=="?*",ATTR{address}=="需要修改名称的网卡MAC地址",ATTR{type}=="1",KERNEL=="eth*",NAME="enp1s0"etc

00:0c:29:0c:8a:c2


31.crontab 定时任务
==============================
crontab [[ -u user ] 日程表文件 | -l | -r]

日程时间格式如下:
f1  f2   f3   f4   f5 program
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12)
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推

示例
每一分钟执行一次 /bin/ls:
* * * * * /bin/ls

每两个小时重启一次apache:
0 */2 * * * /sbin/service httpd restart  

每天7:50开启ssh服务
50 7 * * * /sbin/service sshd start  

每天22:50关闭ssh服务
50 22 * * * /sbin/service sshd stop  

每月1号和15号检查/home 磁盘
0 0 1,15 * * fsck /home  

每小时的第一分执行 /home/bruce/backup这个文件
1 * * * * /home/bruce/backup  

每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  

每月的1、11、21、31日的6:30执行一次ls命令
30 6 */10 * * ls  

当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容
若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1

如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。
解决方法:

1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
2、在 shell 脚本开头使用以下代码:

#!/bin/sh
. /etc/profile
. ~/.bash_profile

3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh


32.ntp 服务
==============================
ntp服务器默认端口是123

#安装服务
yum install ntp
#开机自启动
systemctl enable ntpd
#启动服务
systemctl start ntpd


修改/etc/ntp.conf 配置
----
#拒绝 IPv4 的用户
restrict default kod nomodify notrap nopeer noquery
#拒绝 IPv6 的用户
restrict -6 default kod nomodify notrap nopeer noquery
#放行本机来源
restrict 127.0.0.1
restrict ::1

# 放行当前节点IP地址
restrict 192.168.6.3 nomodify notrap nopeer noquery          

# 放行所在网段的网关(Gateway),子网掩码(Genmask)
restrict 192.168.6.2 mask 255.255.255.0 nomodify notrap  

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
#默认的一个内部时钟数据,用在没有外部 NTP 服务器时,使用它为局域网用户提供服务:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
----

#设定主机来源
server ntp1.aliyun.com prefer
server ntp2.aliyun.com
server 192.168.6.4
fudge 192.168.6.4 stratum 10



#手工发起时间同步
ntpdate ntp1.aliyun.com

#查看 ntp 状态
ntpstat

#与上层ntp的状态
ntpq -p

#观察ntp服务是否生效(NTP enabled: yes|no)
timedatectl

#使ntp服务生效
timedatectl set-ntp yes



33.查询依赖
==============================
objdump -x xxx.so |grep NEEDED
objdump -x 可执行文件 |grep NEEDED

#查看缺少的库
ldd xxx.so

#如果某个依赖库不存在,会输出"xxx.so not found"



34.gitlab 数据备份与还原
==============================
# 首先备份配置文件 /etc/gitlab/ 下所有文件,其中
/etc/gitlab/gitlab.rb:主配置文件,包含外部URL、仓库目录、备份目录等
/etc/gitlab/gitlab-secrets.json:(执行gitlab-ctl reconfigure命令行后生成),包含各类密钥的加密信息

# 使用vi修改 gitlab.rb 中的备注设置

  gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"  # 备份的目录
  gitlab_rails['backup_archive_permissions'] = 0644  # 备份包(tar格式压缩包)的权限
  gitlab_rails['backup_pg_schema'] = 'public' # 不知道啥用,顺手改的
  gitlab_rails['backup_keep_time'] = 604800  # 备份的保留时间,单位是秒

# 重载配置,使之生效
gitlab-ctl reconfigure
......
......
......
Running handlers:
Running handlers complete
Chef Client finished, 9/730 resources updated in 46 seconds
gitlab Reconfigured!

# 查看备份目录
ll /var/opt/gitlab/backups/
total 0

# 备份数据
gitlab-rake gitlab:backup:create

# 查看备份解结果
# ll /var/opt/gitlab/backups/
total 172
-rw-r--r-- 1 git git 174080 Nov 27 16:12 1574842330_2019_11_27_12.5.0_gitlab_backup.tar

# 还原数据,首先务必确认备份配置、备份目录和备份文件
gitlab-rake gitlab:backup:restore BACKUP=1574842330_2019_11_27_12.5.0

# 然后重启服务
gitlab-ctl restart

# 建议检查 GitLab 所有组件是否运行正常
gitlab-rake gitlab:check SANITZE=true

posted @   树欲静·而风不止  阅读(92)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示