CentOS FAQ

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

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

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

# GCC 4.9 安装

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

# GCC 5.2 安装

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

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

进入目录:

/etc/sysconfig/network-scripts/

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

比如:ifcfg-enoxxxxxx

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

service network restart

# 如何增加桌面环境

KDE

yum groupinstall "KDE Plasma Workspaces"
1

GNOME

yum groupinstall "GNOME Desktop"
1

启动(基于 systemd)

systemctl get-default
systemctl set-default graphical.target
1
2

# Yum 和 RPM 常用命令备忘录

yum history

yum history
yum history list <ID>
yum history info <ID>
yum history undo <ID>
yum history redo <ID>
1
2
3
4
5

yum update

yum clean all
yum makecache
yum update
1
2
3

rpm 安装卸载

rpm -ivh *.rpm
rpm -qa
rpm -qa|grep *
rpm -e *
rpm -e * --nodeps
1
2
3
4
5

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

# 方法一:yum

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

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

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

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

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

sudo yum install yum-plugin-downloadonly
1

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

Command line error: no such option: --downloadonly

# 方法二:Yumdownloader

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

sudo yum install yum-utils
1

下载一个 RPM 包:

sudo yumdownloader <package-name>
1

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

下载 lsof 示例:

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

--resolve 表示为下载依赖

# CentOS Samba 服务器配置

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

# 一、安装前准备

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

UDP 137 UDP 138 TCP 139 TCP 445
# 配置防火墙端口
1
2
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
1
2
3
4
5
6
7
8
9

2、关闭 CentOS6 系统的 SELinux

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

# 二、安装 Samba

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

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
1
2
3
4
5
6

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

[[email protected] www ~] yum install samba
1

2、配置 samba

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
1
2
3
4
5
6
7
[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 用户访问
# 保存配置
1
2
3
4
5
6
7
8
9
10
11
12
13

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

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

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
1
2
3
4
5

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

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

5、重启 Samba 服务器

/etc/init.d/smb restart
1

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

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

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

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

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

service iptables stop
1

# 「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:

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!
1
2

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 中获取主机名异常了

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);
        }
    }
}
1
2
3
4
5
6
7
8
9

处理方法:

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

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

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

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

如 : hostname -> USER-1234

则: 127.0.0.1 USER-1234

程序正常, 定时任务正常