Skip to content

CentOS 7 FAQ

本来一直用的 ArchLinux,不过 Arch 其实不适合作为服务器使用,因为其滚动更新的特性使得服务器不稳定。

CentOS 如何安装最新版本的 GCC 编译器

默认没做任何设置的情况下,yum 安装的 GCC 版本比较陈旧。如果想安装较新的版本,需要如下操作:

GCC 4.9 安装

bash
yum install centos-release-scl -y
yum install devtoolset-3-toolchain -y
scl enable devtoolset-3 bash
gcc -v
yum install centos-release-scl -y
yum install devtoolset-3-toolchain -y
scl enable devtoolset-3 bash
gcc -v

GCC 5.2 安装

bash
yum install centos-release-scl -y
yum install devtoolset-4-toolchain -y
scl enable devtoolset-4 bash
gcc --version
yum install centos-release-scl -y
yum install devtoolset-4-toolchain -y
scl enable devtoolset-4 bash
gcc --version

Centos7 安装完毕后无法联网的解决方法

进入目录:

/etc/sysconfig/network-scripts/

ls 命令查看网卡配置文件名(在 CENTOS7 中网卡名貌似变成了随机数字,所以每台机器的网卡名并不相同)

比如:ifcfg-enoxxxxxx

将最后一行的 ONBOOT=no 改为 ONBOOT=yes, 如图 最后输入:wq 保存并退出,再重启一下 network:

service network restart

如何增加桌面环境

KDE

bash
yum groupinstall "KDE Plasma Workspaces"
yum groupinstall "KDE Plasma Workspaces"

GNOME

bash
yum groupinstall "GNOME Desktop"
yum groupinstall "GNOME Desktop"

启动(基于 systemd)

bash
systemctl get-default
systemctl set-default graphical.target
systemctl get-default
systemctl set-default graphical.target

Yum 和 RPM 常用命令备忘录

yum history

bash
yum history
yum history list <ID>
yum history info <ID>
yum history undo <ID>
yum history redo <ID>
yum history
yum history list <ID>
yum history info <ID>
yum history undo <ID>
yum history redo <ID>

yum update

bash
yum clean all
yum makecache
yum update
yum clean all
yum makecache
yum update

rpm 安装卸载

bash
rpm -ivh *.rpm
rpm -qa
rpm -qa|grep *
rpm -e *
rpm -e * --nodeps
rpm -ivh *.rpm
rpm -qa
rpm -qa|grep *
rpm -e *
rpm -e * --nodeps

如何从 Yum 库下载 rpm 包但不安装

方法一:yum

bash
sudo yum install --downloadonly <package-name>
sudo yum install --downloadonly <package-name>

默认情况下,一个下载的 RPM 包会保存在下面的目录中: /var/cache/yum/x86_64/[centos/fedora-version]/[repository]/packages 以上的 [repository] 表示下载包的来源仓库的名称(例如:base、fedora、updates)

如果你想要将一个包下载到一个指定的目录(如 /tmp):

bash
sudo yum install --downloadonly --downloaddir=/tmp <package-name>
sudo yum install --downloadonly --downloaddir=/tmp <package-name>

注意,如果下载的包包含了任何没有满足的依赖关系,yum 将会把所有的依赖关系包下载,但是都不会被安装。 另外一个重要的事情是,在 CentOS/RHEL 6 或更早期的版本中,你需要安装一个单独 yum 插件(名称为 yum-plugin-downloadonly) 才能使用 --downloadonly 命令选项:

bash
sudo yum install yum-plugin-downloadonly
sudo yum install yum-plugin-downloadonly

如果没有该插件,你会在使用 yum 时得到以下错误:

Command line error: no such option: --downloadonly

方法二:Yumdownloader

另外一个下载 RPM 包的方法就是通过一个专门的包下载工具 --yumdownloader。 这个工具是 yum 工具包(包含了用来进行 yum 包管理的帮助工具套件) 的子集。

bash
sudo yum install yum-utils
sudo yum install yum-utils

下载一个 RPM 包:

bash
sudo yumdownloader <package-name>
sudo yumdownloader <package-name>

下载的包会被保存在当前目录中。你需要使用 root 权限,因为 yumdownloader 会在下载过程中更新包索引文件。与 yum 命令不同的是,任何依赖包不会被下载。

下载 lsof 示例:

bash
sudo yumdownloader lsof --resolve --destdir=/data/mydepot/
sudo yumdownloader lsof --resolve --destdir=/data/mydepot/

--resolve 表示为下载依赖

CentOS Samba 服务器配置

Samba 是 SMB 的一种实现方法,主要用来实现 Linux 系统的文件和打印服务。Linux 用户通过配置使用 Samba 服务器可以实现与 Windows 用户的资源共享。守护进程 smbd 和 nmbd 是 Samba 的核心,在全部时间内运行。nmbd 程序使得通过企图计算机可以浏览 Linux 服务器。

一、安装前准备

1、 使用 Samba 服务器需要防火墙开放以下端口

bash
UDP 137 UDP 138 TCP 139 TCP 445
## 配置防火墙端口
UDP 137 UDP 138 TCP 139 TCP 445
## 配置防火墙端口
bash
vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT

## 重启防火墙,使规则生效
/etc/rc.d/init.d/iptables restart
vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT

## 重启防火墙,使规则生效
/etc/rc.d/init.d/iptables restart

2、关闭 CentOS6 系统的 SELinux

bash
vi /etc/selinux/config
## SELINUX=enforcing     #注释掉
## SELINUXTYPE=targeted  #注释掉
SELINUX=disabled       #增加
## :wq  保存。
## 重启系统
shutdown -r now  或者 init 6
vi /etc/selinux/config
## SELINUX=enforcing     #注释掉
## SELINUXTYPE=targeted  #注释掉
SELINUX=disabled       #增加
## :wq  保存。
## 重启系统
shutdown -r now  或者 init 6

二、安装 Samba

1 、检查 Samba 服务包是否已安装

bash
rpm -qa | grep samba
    samba-3.5.4-68.el6.x86_64
    samba-common-3.5.4-68.el6.x86_64
    samba-client-3.5.4-68.el6.x86_64
    samba4-libs-4.0.0-23.alpha11.el6.x86_64
    samba-winbind-clients-3.5.4-68.el6.x86_64
rpm -qa | grep samba
    samba-3.5.4-68.el6.x86_64
    samba-common-3.5.4-68.el6.x86_64
    samba-client-3.5.4-68.el6.x86_64
    samba4-libs-4.0.0-23.alpha11.el6.x86_64
    samba-winbind-clients-3.5.4-68.el6.x86_64

说明 samba 已经安装,如果没有安装,运行下面命令安装

bash
[root@ www ~] yum install samba
[root@ www ~] yum install samba

2、配置 samba

bash
chkconfig smb on  ## 设置 Samba 开机自动启动
service smb start       ## 启动 Samba 服务
/etc/init.d/smb restart  ## 重启
/etc/init.d/smb stop     ## 停止
cp /etc/samba/smb.conf   /etc/samba/bak_smb.conf_bak   ## 备份
cp /etc/samba/bak_smb.conf_bak  /etc/samba/smb.conf   ## 恢复
vi /etc/samba/smb.conf
chkconfig smb on  ## 设置 Samba 开机自动启动
service smb start       ## 启动 Samba 服务
/etc/init.d/smb restart  ## 重启
/etc/init.d/smb stop     ## 停止
cp /etc/samba/smb.conf   /etc/samba/bak_smb.conf_bak   ## 备份
cp /etc/samba/bak_smb.conf_bak  /etc/samba/smb.conf   ## 恢复
vi /etc/samba/smb.conf
bash
[global]                           ## 找到这一行(全局设置标签),在此行下面添加如下行:
workgroup = WORKGROUP          ## 工作组名称改为 Windows 网络所定义的工作组名
server string = Samba Server   ## 设置 samba 服务器的主机名称
security = user                ## 设置 samba 服务器安全级别为 user,即以账号和口令访问
netbios name = SambaServer     ## 设置 Samba 服务器访问别名
#在配置文件的末尾添加以下自定义内容
[SambaServer]                      ## 在 Windows 网上邻居中看到的共享目录的名字
    comment = SambaServer          ## 在 Windows 网上邻居中看到的共享目录的备注信息
    path = /home/SambaServer       ## 共享目录在系统中的位置
    public = no                    ## 不公开目录
    writable = yes                 ## 共享目录可以读写
    valid users=SambaServer        ## 只允许 SambaServer 用户访问
## 保存配置
[global]                           ## 找到这一行(全局设置标签),在此行下面添加如下行:
workgroup = WORKGROUP          ## 工作组名称改为 Windows 网络所定义的工作组名
server string = Samba Server   ## 设置 samba 服务器的主机名称
security = user                ## 设置 samba 服务器安全级别为 user,即以账号和口令访问
netbios name = SambaServer     ## 设置 Samba 服务器访问别名
#在配置文件的末尾添加以下自定义内容
[SambaServer]                      ## 在 Windows 网上邻居中看到的共享目录的名字
    comment = SambaServer          ## 在 Windows 网上邻居中看到的共享目录的备注信息
    path = /home/SambaServer       ## 共享目录在系统中的位置
    public = no                    ## 不公开目录
    writable = yes                 ## 共享目录可以读写
    valid users=SambaServer        ## 只允许 SambaServer 用户访问
## 保存配置

3、添加访问 linux 共享目录的账号 SambaServer

用户家目录为 /home/SambaServer, 用户登录终端设为 /bin/false(即使之不能登录系统)

bash
mkdir -p /home/SambaServer #建立 SambaServer 文件夹
cd /home/SambaServer
touch  samba.txt    #创建测试文件 samba.txt
useradd SambaServer -d /home/SambaServer -s /bin/false
chown SambaServer:SambaServer /home/SambaServer -R
mkdir -p /home/SambaServer #建立 SambaServer 文件夹
cd /home/SambaServer
touch  samba.txt    #创建测试文件 samba.txt
useradd SambaServer -d /home/SambaServer -s /bin/false
chown SambaServer:SambaServer /home/SambaServer -R

4、将用户 SambaServer 添加入到 Samba 用户数据库,并设置登录共享目录的密码为:123456

bash
smbpasswd -a SambaServer
   New SMB password: ## 输入该用户用于登录 Samba 的密码
   Retype new SMB password: ## 再次确认输入该密码
   Added user SambaServer.
## 备注:这里设置的密码是 SambaServer 用户登录该机的 Samba 共享的密码,非登陆 OS 的密码;
smbpasswd -a SambaServer
   New SMB password: ## 输入该用户用于登录 Samba 的密码
   Retype new SMB password: ## 再次确认输入该密码
   Added user SambaServer.
## 备注:这里设置的密码是 SambaServer 用户登录该机的 Samba 共享的密码,非登陆 OS 的密码;

5、重启 Samba 服务器

bash
/etc/init.d/smb restart
/etc/init.d/smb restart

6、浏览共享信息 在 Windows 客户端输入 \\ip 或者 \\SambaServer 服务器别名

回车之后,会跳出来登录框,输入账号 SambaServer , 密码 123456 , 即可访问共享目录

至此,CentOS 6 linux samba 服务器配置完成。

服务名:smb 配置目录:/etc/sabma/ 主配置文件:/etc/sabma/smb.conf

问题: 如果无法访问共享目录的内容,请把防火墙停止;

bash
service iptables stop
service iptables stop

「RPM」Error in PREUN scriptlet … file was supposed to be removed but is not

http://www.linux-pages.com/2012/08/error-in-preun-scriptlet-file-was-supposed-to-be-removed-but-is-not/

Sometimes a yum/RPM package would get “stuck” and just won’t go away. Actually usually the package is already gone but yum/rpm fails to update it’s internal DB and still thinks it is there.

The error one usually sees in such cases is something like:

bash
Error in PREUN scriptlet in rpm package stlinux23-sh4_uclibc-which
stlinux23-sh4_uclibc-which-2.16-5.sh4_uclibc was supposed to be removed but is not!
Error in PREUN scriptlet in rpm package stlinux23-sh4_uclibc-which
stlinux23-sh4_uclibc-which-2.16-5.sh4_uclibc was supposed to be removed but is not!

So in my case the package stlinux23-sh4_uclibc-which-2.16-5.sh4_uclibc is causing problems, it will be soemthing different in your case

To fix the problem run:

yum --setopt=tsflags=noscripts remove stlinux23-sh4_uclibc-which.sh4_uclibc

You can add more than one package file to the end of the command.

「Java」org.quartz.SchedulerException: Couldn't get host name!

<https://blog.csdn.net/Lumia10200/article/details/52670231 >

使用 quartz 做集群任务的时候,在本地和测试环境正常,部署上线的时候, 启动异常:org.quartz.SchedulerException: Couldn't get host name!

这个是 org.quartz.simpl.SimpleInstanceIdGenerator 中获取主机名异常了

java
public class SimpleInstanceIdGenerator implements InstanceIdGenerator {
    public String generateInstanceId() throws SchedulerException {
        try {
            return InetAddress.getLocalHost().getHostName() + System.currentTimeMillis();
        } catch (Exception e) {
            throw new SchedulerException("Couldn't get host name!", e);
        }
    }
}
public class SimpleInstanceIdGenerator implements InstanceIdGenerator {
    public String generateInstanceId() throws SchedulerException {
        try {
            return InetAddress.getLocalHost().getHostName() + System.currentTimeMillis();
        } catch (Exception e) {
            throw new SchedulerException("Couldn't get host name!", e);
        }
    }
}

处理方法:

进入线上环境(centOs6.x):

1, 查看主机名(命令) : hostname

2, 打开 hosts 文件: vi /etc/hosts 查看是否有乱码等异常内容

3, 确保有: 127.0.0.1 后跟上面用 hostname 命令查看到的主机名, 如果没有则加上

如 : hostname -> USER-1234

则: 127.0.0.1 USER-1234

程序正常, 定时任务正常

最后编辑时间:

Version 4.0 (framework-1.0.0-rc.20)