Ubuntu下迁移通过apt安装的MySQL数据库文件目录

用Ubuntu的apt包管理工具安装的MySQL数据库,默认将数据库文件保存在/var/lib/mysql目录下,时间久了数据库越来越大,所以准备挂载个新的硬盘专门存放mysql数据库。

1、确定mysql数据库文件存放目录

一般默认是在/var/lib/mysql目录下。先登录自己的mysql数据库,比如我用root账户登录,然后使用下面查询语句查询:

show variables like ‘%dir%’;

得到数据库文件配置信息:

未分类

可以看到其中datadir的值为/var/lib/mysql/即为当前数据库文件存放目录。

另外一个basedir参数表示mysql数据库的安装位置,迁移数据库文件位置不需要改动这个参数。

2、迁移数据库文件到新的目录下

先使用下面命令将mysql数据库服务停止:

[plain] view plain copy

sudo /etc/init.d/mysql stop

我新的数据盘挂载在/mnt/data目录下,因此要将数据库迁移到/mnt/data。

2.1 可以使用mv命令将原数据库目录文件移动到新的目录,好处是不会简单,不会修改原数据库文件的权限,以及用户和用户组归属:

[plain] view plain copy

sudo mv /var/lib/mysql /mnt/data/

2.2 也可以使用cp复制命令将原数据库目录文件复制到新的目录,好处是。。万一迁移失败,恢复工作相对简单一点,等确认迁移成功再来删掉原数据库目录文件也不迟。为了不影响复制过来数据库目录文件权限和用户用户组归属问题,使用cp命令时要加上-a参数:

[plain] view plain copy

sudo cp -a /var/lib/mysql /mnt/data/

注:由于/var/lib/mysql目录归属于mysql数据库创建的mysql用户和mysql用户组,所以迁移文件的时候需要使用root权限,命令要使用sudo

迁移成功后,可以看到/mnt/data/目录下已经将mysql数据库文件迁移过来了,并且目录文件的用户用户组归属还是mysql,没有变化:

未分类

3、修改配置文件

一共有三个配置文件需要修改:

3.1 my.cnf文件

mysql数据库会按顺序优先级从/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf、~/.my.cnf四个位置找my.cnf配置文件,一旦找到就不再继续往下找。Ubuntu默认将my.cnf配置文件放在/etc/mysql/my.cnf位置,所以在/etc/my.cnf位置没有找到这个配置文件。

选择自己使用的文本编辑器编辑my.cnf配置文件,我用vim,所以sudo vim /etc/mysql/my.cnf。一样需要sudo,使用root权限编辑。将其中[mysqld]标签下的datadir属性值改为新数据库目录路径/mnt/data/mysql,如图:

未分类

修改后保存并退出。

3.2 usr.bin.mysqld文件

由于Ubuntu使用了apparmor安全模块,就是类似于沙盒运行的一种机制,它可以限制软件在运行时的一些行为,比如对哪些目录和文件可以读写加锁等等。

由于修改了数据库文件路径,所以要修改mysql数据库的apparmor配置文件,在其中将新数据库文件目录和文件的读写及加锁权限添加上去,同时可以删除或者注释掉原先/var/lib/mysql数据库文件目录的权限。mysql数据库的apparmor配置文件路径在/etc/apparmor.d/usr.sbin.mysqld。使用下面命令编辑这个配置文件:

sudo vim /etc/apparmor.d/usr.sbin.mysqld

找到其中的

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

两行权限声明,可以在前面加上#好注释掉。然后对照格式,加入新路径的权限声明:

/mnt/data/mysql/ r,
/mnt/data/mysql/** rwk,

结果如图:

未分类

保存并关闭。

3.3 abstractions/mysql文件

由于usr.bin.mysqld文件中引用了abstractions/mysql文件,也就是会将abstractions/mysql文件中的权限声明导入进来。因此,也修改下这个文件:

sudo vim /etc/apparmor.d/abstractions/mysql

同样也是将新数据库文件路径中的socket文件权限添加进去,同时可以删除或者注释掉全路径中申请的权限,效果如图:

未分类

保存后退出。

4、重启数据库

配置文件修改成功后就可以重启数据库,重启数据库之前需要先重新载入apparmor配置文件,使用下面命令重新载入:

[plain] view plain copy

sudo /etc/init.d/apparmor restart

重载成功就可以使用下面命令启动数据库:

[plain] view plain copy

sudo /etc/init.d/mysql start

5、权限问题

经过上诉步骤之后,你有可能数据库无法启动。忽略继续登录数据库出现下面关于sock的错误:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

查看数据库的启动错误日志,sudo vim /var/log/mysql/error.log,还能看到Table ‘plugin’ is read only这样的错误:

未分类

出现这种情况的原因还是在于新数据库文件目录的权限。

mysql数据库启动的时候需要以mysql用户的身份执行,所以mysql用户需要具备能读写数据库文件目录的权限。虽然上面迁移数据库文件的时候无论是使用mv还是cp -a命令都没有更改mysql目录的用户和用户组,上面也看到了/mnt/data/mysql所属的用户和用户组都还是mysql。因此可以肯定mysql用户具备读写/mnt/data/mysql的权限,但是这并没有保证上级目录/mnt/data和上上级目录/mnt也具备让mysql用户读取的权限。如果mysql用户不具备上级目录/mnt/data和上上级目录/mnt的读取权限,mysql用户一样读写不了自己的/mnt/data/mysql目录,因此就会出现上面的问题。

可以过头来看看原本数据库文件目录/var/lib/mysql的结构:

未分类

可以看出原本数据库文件目录/var/lib/mysql的上级目录/var/lib属于虽然属于root用户,但是它为同组用户和其它组用户都开放了’r’和‘x’权限,所以即使上级目录不属于mysql用户,mysql用户同样也能正常进入并访问到自己的数据库文件。

解决这个问题的方法说起来就是这么简单,只要保证mysql用户具备最终数据库文件目录的所有上级目录的‘r’和‘x’权限就可以了。

例如,使用下面命令修改本文中/mnt/data的权限:

sudo chmod 755 /mnt/data

再上级目录/mnt是系统目录,归属于root用户,root用户默认的目录的权限都是755,所以不用修改。

权限修改后再次启动数据库sudo /etc/init.d/mysql start,应该就能成功启动了。

进入数据库,查看当前路径配置信息:

未分类

数据库已经正常启动, 并且数据库文件路径也已经替换到/mnt/data/mysql目标路径,数据库文件迁移成功。

CentOS 7系统安装Redmine项目管理软件

Redmine 是一个网页界面的项目管理与缺陷跟踪管理系统的自由及开放源代码软件工具。它集成了项目管理所需的各项功能:日历、燃尽图和甘特图 以协助可视化表现项目与时间限制,问题跟踪和版本控制。此外,Redmine也可以同时处理多个项目。

第一步:安装Ruby

$ wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
$ tar -zxvf ruby-2.4.1.tar.gz   #解压
$ cd ./ruby-2.4.1
$ ./configure
$ make
$ make install

第二步:安装Rails 4.2

$ gem update --system #更新gem
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/ #切换至国内源
$ gem install rails -v 4.2

第三步:下载Redmine

$ wget http://www.redmine.org/releases/redmine-3.4.2.tar.gz
$ tar -zxvf redmine-3.4.2.tar.gz
$ mv redmine-3.4.2.tar.gz /usr/local/redmine

第四步:创建数据库

$ mysql -uroot -p
$ CREATE DATABASE redmine CHARACTER SET utf8;
$ CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';
$ GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

第五步:修改配置文件

$ cp /usr/local/redmine/config/database.yml.example /usr/local/redmine/config/database.yml
$ vi database.yml
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: my_password

第六步:安装依赖程序

$ gem install bundler
$ bundle config mirror.https://rubygems.org https://gems.ruby-china.org
$ bundle install --without development test

第七步:创建数据库表及默认设置

$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production REDMINE_LANG=zh bundle exec rake redmine:load_default_data

第八步:创建相关目录及权限设置

$ mkdir -p tmp tmp/pdf public/plugin_assets
$ chown -R apache:apache files log tmp public/plugin_assets
$ chmod -R 755 files log tmp public/plugin_assets

第九步:启动Redmine

$ bundle exec rails server webrick -e production

本机访问 http://localhost:3000

遇到的问题:

执行”bundle install –without development test”时报错

An error occurred while installing rmagick (2.16.0), and Bundler cannot
continue.
Make sure that `gem install rmagick -v ‘2.16.0’` succeeds before bundling.

解决方法:

$ yum install ImageMagick ImageMagick-devel

centos 7系统编译安装python3.5

到python官网找到下载路径, 用wget下载

wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz

编译环境准备

准备一下编译环境,防止出现安装错误

[yangzai@oldsyang ~]$ yum groupinstall 'Development Tools'
[yangzai@oldsyang ~]$ yum install zlib-devel bzip2-devel openssl-devel ncurese-devel

解压tgz包和编译

#解压
[root@oldsyang mysoft]# tar -zxvf Python-3.5.1.tgz
...
#配置安装目录
[root@oldsyang mysoft]# cd Python-3.5.1
[root@oldsyang mysoft]# ./configure --prefix=/usr/local/python3
#编译并安装
[root@oldsyang mysoft]# make && make install

Python3.5.1 安装编译安装时会默认安装 pip 如果出现:

Ignoring ensurepip failure: pip 1.5.6 requires SSL/TLS

未安装编译环境,重新安装该编译环境并重新编译
Python3.5.1

[yangzai@oldsyang ~]$ yum install zlib-devel bzip2-devel openssl-devel ncurese-devel

添加全局变量

#打开配置文件
[yangzai@oldsyang ~]$ vim /etc/profile
#随便找个地址添加PATH,并保存退出
PATH=/usr/local/Python3/bin:$PATH
export PATH
#退出当前登录终端,重新进入
[yangzai@oldsyang ~]$ python3
Python 3.5.1 (default, Jun 12 2017, 20:31:31)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

更换系统默认 Python 版本

#备份旧版本 Python
mv /usr/bin/python /usr/bin/python2.7
#新建指向新版本 Python 以及 pip 的软连接
ln -s /usr/local/python3/bin/python3.5 /usr/bin/python
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
#检验 Python 及 pip 版本
python -V
pip -V

更新 yum 相关设置

因 yum 的功能依赖 Python2 更改默认 Python版本后会导致 yum无法正常工作

执行以下命令:

vi /usr/bin/yum

打开文件,修改第一行为:

#!/usr/bin/python2.7

若执行 yum 时出现以下错误:

File "/usr/libexec/urlgrabber-ext-down", line 28

执行以下更改,打开该文件并修改首行为:

#!/usr/bin/python2.7

执行 yum 时,若出现以下 Error:

Error: Delta RPMs disabled because /usr/bin/applydeltarpm not installed.

执行以下安装可解决:

yum install deltarpm

centos 7安装redis及php-redis扩展

首先,下载安装redis服务端+客户端

下载,解压,编译:

$ wget http://download.redis.io/releases/redis-3.2.9.tar.gz
$ tar xzf redis-3.2.9.tar.gz
$ cd redis-3.2.9$ make

#二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:

$ src/redis-server
#你可以使用内置的客户端命令redis-cli进行使用:

$ src/redis-cli
    redis> set foo bar
    OK
redis> get foo"bar"

下载安装php-redis扩展: 地址:https://github.com/phpredis/phpredis/

$ wget http://pecl.php.net/get/redis-3.1.2.tgz
$ tar xzf redis-3.1.2.tgz 
$ cd redis-3.1.2/
$ phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config
#这里的php-config路径 根据自己实际情况而定
$  make && make install

#出现
#Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
#即为安装成功。
#打开php.in文件,并添加 extension=redis.so,保存退出即可
$ vim /usr/local/php/etc/php.ini
  #文件末尾添加 extension=redis.so
  #保存退出,

重启php+nginx服务,phpinfo中将会出现redis扩展信息

测试:

启动redis服务,

$ cd redis-3.1.2
$ src/redis-server

编辑test.php测试文件

<?php
$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

$redis->set("name", "nango");
echo $redis->get('name');
?>

升级Centos 7/6内核版本到4.12.4的方法

公司打算上Docker服务,目前需要安装运行环境,Docker新的功能除了需要Centos 7系统之外,内核的版本高低也决定着使用的效果,所以在此记录下系统内核版本升级过程。

注:对于线上环境的内核版本还需要根据实际情况谨慎选择,越新的版本未来可能遇到的问题越多,此文只是记录升级方法而已。

关于内核版本的定义:

版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm)

版本命名格式为 “A.B.C”:

数字 A 是内核版本号:版本号只有在代码和内核的概念有重大改变的时候才会改变,历史上有两次变化:
第一次是1994年的 1.0 版,第二次是1996年的 2.0 版,第三次是2011年的 3.0 版发布,但这次在内核的概念上并没有发生大的变化
数字 B 是内核主版本号:主版本号根据传统的奇-偶系统版本编号来分配:奇数为开发版,偶数为稳定版
数字 C 是内核次版本号:次版本号是无论在内核增加安全补丁、修复bug、实现新的特性或者驱动时都会改变

一、查看那系统内核版本

# uname -r
3.10.0-514.el7.x86_64
# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core)

二、升级内核

Centos 6和Centos 7的升级方法类似,只不过就是选择的YUM源或者rpm包不同罢了,下面主要是Centos 7的安装方法,中间也会有对于Centos 6 升级的方法提示。

方法一:

Centos 6 YUM源:http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
Centos 7 YUM源:http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

升级内核需要先导入elrepo的key,然后安装elrepo的yum源:

# rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

仓库启用后,你可以使用下面的命令列出可用的内核相关包,如下图:

# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

未分类

上图可以看出,长期维护版本lt为4.4,最新主线稳定版ml为4.12,我们需要安装最新的主线稳定内核,使用如下命令:(以后这台机器升级内核直接运行这句就可升级为最新稳定版)

# yum -y --enablerepo=elrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64 

方法二:

对于一些无法上网的服务器,或者需要安装指定版本内核的需求,我们可以把kernel image的rpm包下载下来安装,下载地址如下:

下载指定版本 kernel: http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=3&dl=40&search=kernel

下载指定版本 kernel-devel:http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=3&dl=40&search=kernel-devel

官方 Centos 6: http://elrepo.org/linux/kernel/el6/x86_64/RPMS/

官方 Centos 7: http://elrepo.org/linux/kernel/el7/x86_64/RPMS/

未分类

将rpm包下载上传到服务器上,使用下面的命令安装即可:

# yum -y install kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm 
# yum -y install kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm

方法三:

还可以通过源码包编译安装,这种方式可定制性强,但也比较复杂,有需要的可自行查找资料安装,下面只给出各系统版本内核源码包的下载地址:https://www.kernel.org/pub/linux/kernel/

三、修改grub中默认的内核版本

内核升级完毕后,目前内核还是默认的版本,如果此时直接执行reboot命令,重启后使用的内核版本还是默认的3.10,不会使用新的4.12.4,首先,我们可以通过命令查看默认启动顺序:

# awk -F' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.12.4-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-a43cc2091b4557f1fd10a52ccffa5db2) 7 (Core)

由上面可以看出新内核(4.12.4)目前位置在0,原来的内核(3.10.0)目前位置在1,所以如果想生效最新的内核,还需要我们修改内核的启动顺序为0:

# vim /etc/default/grub

未分类

注:Centos 6 更改的文件相同,使用命令确定新内核位置后,然后将参数default更改为0即可。

接着运行grub2-mkconfig命令来重新创建内核配置,如下:

# grub2-mkconfig -o /boot/grub2/grub.cfg

四、重启系统并查看系统内核

# reboot

系统启动完毕后,可以通过命令查看系统的内核版本,如下:

# uname -r
4.12.4-1.el7.elrepo.x86_64

到此,Centos 7内核升级完毕。

CentOS 7系统安装配置Apache ActiveMQ

Apache ActiveMQ是一个免费的开源消息代理和集成模式服务器。 它支持许多来自JAVA,C ++,C,Python,Perl,PHP等的跨语言客户端和协议。它提供了许多功能,如消息组,虚拟目的地,通配符和复合目的地等。它可以轻松集成到弹簧应用程序。

在本教程中,我们将在CentOS 7服务器上安装Apache ActiveMQ。

条件

  • 最小CentOS 7服务器
  • 根权限 本指南以root用户身份编写,如果以sudo用户身份登录,请运行sudo -i 。

更新基本系统

在安装任何软件包之前,建议您使用以下命令更新软件包和存储库。

yum -y update

更新系统后,继续安装JAVA。

安装JAVA

ActiveMQ支持OpenJDK和Oracle JAVA,在本教程中,我们将安装最新版本的Oracle Java到服务器。 运行以下命令下载RPM包。

wget –no-cookies –no-check-certificate –header “Cookie:oraclelicense=accept-securebackup-cookie” “http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm”

如果没有安装wget ,可以运行yum -y install wget来安装wget。 现在使用以下命令安装下载的RPM。

yum -y localinstall jdk-8u131-linux-x64.rpm

现在可以使用以下命令检查Java版本。

java -version

您将得到以下输出。

[root@liptan-pc ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

您还需要检查是否设置了JAVA_HOME环境变量。 运行以下命令相同。

echo $JAVA_HOME

如果获得空或空白输出,则需要手动设置JAVA_HOME变量。 使用您喜欢的编辑器编辑.bash_profile文件。 在本教程中,我们将使用nano编辑器。 运行以下命令使用nano编辑.bash_profile 。

nano ~/.bash_profile

现在在文件的末尾添加以下行。

export JAVA_HOME=/usr/java/jdk1.8.0_131/
export JRE_HOME=/usr/java/jdk1.8.0_131/jre

现在使用以下命令来源文件。

source ~/.bash_profile

现在可以再次运行echo $ JAVA_HOME命令来检查环境变量是否设置。

[root@pc ~]# echo $JAVA_HOME 
/usr/java/jdk1.8.0_131/

安装ActiveMQ

ActiveMQ为预编译并可直接使用的Unix系统提供二进制文件。 唯一必需的依赖是将JAVA安装到系统中。 我们已经安装了JAVA,我们可以进一步下载ActiveMQ。

wget http://www-eu.apache.org/dist//activemq/5.15.0/apache-activemq-5.15.0-bin.tar.gz

如果你没有安装wget ,可以运行yum -y install wget 。 您可以随时在ActiveMQ下载页面上找到最新版本的链接。

使用以下命令提取存档。

tar -zxvf apache-activemq-*-bin.tar.gz -C /var

为了简单起见,通过运行来更改ActiveMQ目录的名称。

mv /var/apache-activemq-*/ /var/activemq/

ActiveMQ现在安装在您的系统上。

启动ActiveMQ

将当前目录更改为ActiveMQ安装目录。

cd /var/activemq

您可以通过运行以下命令立即启动ActiveMQ作为前台进程。

./bin/activemq console

要启动ActiveMQ作为后台进程,请运行:

./bin/activemq start

如果启动成功,您应该得到以下输出。

[root@pc activemq]# ./bin/activemq start
INFO: Loading '/var/activemq//bin/env'
INFO: Using java '/usr/java/jdk1.8.0_131//bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/var/activemq//data/activemq.pid' (pid '27680')

要停止ActiveMQ,可以运行以下命令。

./bin/activemq stop

创建Systemd服务

虽然您可以使用上述命令轻松运行ActiveMQ,但建议您使用systemd服务来管理ActiveMQ进程。 使用Systemd服务将确保ActiveMQ将在启动时自动启动和失败。

使用您喜欢的文本编辑器创建一个systemd服务文件。 在本教程中,我们将使用nano编辑器。 如果没有安装nano ,可以运行yum -y安装nano 。

nano /etc/systemd/system/activemq.service

现在使用以下内容填充该文件。

[Unit]
Description=ActiveMQ service
After=network.target

[Service]
Type=forking
ExecStart=/var/activemq/bin/activemq start
ExecStop=/var/activemq/bin/activemq stop
User=root
Group=root
Restart=always
RestartSec=9
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=activemq

[Install]
WantedBy=multi-user.target

现在您可以使用以下方式启动ActiveMQ:

systemctl start activemq

要配置ActiveMQ在启动时自动启动,请使用。

systemctl enable activemq

要检查ActiveMQ服务是否正确启动,可以运行以下命令来检查ActiveMQ服务的状态。

systemctl status activemq

您应该得到类似于以下所示的输出。

? activemq.service - ActiveMQ service
   Loaded: loaded (/etc/systemd/system/activemq.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-07-15 17:05:24 UTC; 6s ago
  Process: 28815 ExecStart=/var/activemq/bin/activemq start (code=exited, status=0/SUCCESS)
 Main PID: 28867 (java)
   CGroup: /system.slice/activemq.service
           ??28867 /usr/bin/java -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth...

Jul 15 17:05:24 centos systemd[1]: Starting ActiveMQ service...
Jul 15 17:05:24 centos activemq[28815]: INFO: Loading '/var/activemq//bin/env'
Jul 15 17:05:24 centos activemq[28815]: INFO: Using java '/usr/bin/java'
Jul 15 17:05:24 centos activemq[28815]: INFO: Starting - inspect logfiles specified in logging.propertie...tails
Jul 15 17:05:24 centos activemq[28815]: INFO: pidfile created : '/var/activemq//data/activemq.pid' (pid '28867')
Jul 15 17:05:24 centos systemd[1]: Started ActiveMQ service.

使用管理Web面板

要访问ActiveMQ的管理面板,请启动ActiveMQ服务。 使用您最喜爱的Web浏览器,打开以下URL。

http://Your_Server_IP:8161/admin

如果您已安装防火墙 ,则必须允许端口8161通过防火墙。 运行以下命令相同。

firewall-cmd –zone=public –permanent –add-port=8161/tcp
firewall-cmd –reload

Apache ActiveMQ的初始用户名和密码是admin和admin 。

您应该在登录后立即更改密码。

结论

您现在可以使用Apache ActiveMQ服务器来管理多个客户端和服务器之间的通信。 您可以通过访问ActiveMQ站点了解有关Apache ActiveMQ的更多信息。

Debian编译安装最新版本vim

vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年 vi 编辑器的加强版。同时,vim 也是我们使用 Linux 系统不可或缺的工具。
在 7.4 发行三年后,vim 在 2016.9.12 推出了 8.0 版本,而 Debian9 仓库中默认的 vim 正是 2016 的那个版本。在 2017.4.23,vim 又推出了正式 8.0 版本,本文介绍的正是编译安装最新版本的 vim。

1. 安装编译环境

$ sudo apt install -y build-essential

2. 安装依赖包

$ sudo apt install libncurses5-dev

3. 移除原有的 vim

$ sudo apt remove vim-commen vim-tiny

4. 下载 vim 二进制包

$ wget http://ftp.vim.org/ftp/ftp/vim/unix/vim-8.0.tar.bz2
$ tar xvf vim-8.0.tar.bz2
$ cd vim80/

5. 编译安装

$ ./configure --with-features=huge --enable-pythoninterp=yes --enable-cscope --enable-fontset --enable-perlinterp --enable-rubyinterp --with-python-config-dir=/usr/lib/python3.5/plat-x86_64-linux-gnu/ --prefix=/usr
$ make && sudo make install

6. 查看 vim 版本

$ vim --version

现在,最新版的 vim 已经安装到你的环境了,如果以后要编译新版本的 vim,下载最新的包,重复步骤五即可。

linux vim的基本用法介绍

前言

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。

Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。

vim基本模式

三种主要模式:

  • 命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
  • 插入(Insert)或编辑模式:修改文本
  • 扩展命令(extended command )模式:保存,退出等
  • Esc键 退出当前模式
  • Esc键 Esc键 总是返回到命令模式

vim的打开方式

 vim  [OPTION]…  FILE… 
    +#:  打开文件后,让光标处于第#行的行首
    + 默认行尾 
    +/PATTERN:打开文件后,直接让光标处于最后一个被 PATTERN匹配到的行的行首 
    –b file  二进制方式打开文件 
    –d file1 file2 …  比较多个文件 
    -m file  只读打开文件 

    -ex  file 或 vim –e  直接进入ex模式  

    如果该文件存在,文件被打开并显示内容 
    如果该文件不存在,当编辑后第一次存盘时创建它

vim插入模式

  • i: insert, 在光标所在处输入
  • I:在当前光标所在行的行首输入
  • a: append, 在光标所在处后面输入
  • A:在当前光标所在行的行尾输入
  • o: 在当前光标所在行的下方打开一个新行
  • O:在当前光标所在行的上方打开一个新行

vim命令模式

字符间跳转:

h: 左   l: 右   j: 下   k: 上 
#COMMAND:跳转由#指定的个数的字符 

单词间跳转:

  • w:下一个单词的词首
  • e:当前或下一单词的词尾
  • b:当前或前一个单词的词首
  • #COMMAND:由#指定一次跳转的单词数

当前页跳转:

  • H:页首
  • M:页中间行
  • L:页底

行首行尾跳转:

  • ^: 跳转至行首的第一个非空白字符
  • 0: 跳转至行首
  • $: 跳转至行尾

行间移动:

  • #G、扩展模式:
  • # :跳转至由#指定行
  • G:最后一行
  • 1G, gg: 第一行

句间移动:

  • ) :下一句
  • ( :上一句

段落间移动:

  • } :下一段
  • { :上一段

  • Ctrl+f: 向文件尾部翻一屏

  • Ctrl+b: 向文件首部翻一屏
  • Ctrl+d: 向文件尾部翻半屏
  • Ctrl+u:向文件首部翻半屏

字符编辑:

  • x: 删除光标处的字符
  • #x: 删除光标处起始的#个字符
  • xp: 交换光标所在处的字符及其后面字符的位置
  • ~:转换大小写
  • J:删除当前行后的换行符

替换命令(r, replace)

  • r: 替换光标所在处的字符(单个字符)
  • R:切换成REPLACE模式(覆盖模式)

删除命令:

  • d: 删除命令,可结合光标跳转字符,实现范围删除
  • d$: 删除到行尾
  • d^:删除到非空行首
  • d0:删除到行首
  • dw: 删除单个单词到行首
  • de: 从当前删除到词尾
  • db: 从当前删除到词首
  • #COMMAND
  • dd: 删除光标所在的行
  • #dd:多行删除
  • D:从当前光标位置一直删除到行尾,留空行,等同于d$

复制命令(y, yank):

  • y: 复制,行为相似于d命令
  • y$
  • y0
  • y^
  • ye 当前到词尾
  • yw 当前到词尾
  • yb 当前到词首 3个都包括数字
  • #COMMAND
  • yy:复制行
  • #yy: 复制多行
  • y: 复制整行

粘贴命令(p, paste):

  • p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;
    否则,则粘贴至当前光标所在处的后面
  • P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;
    否则,则粘贴至当前光标所在处的前面

**改变命令(c, change) **

  • c: 修改后切换成插入模式

vim扩展模式

  • w 写(存)磁盘文件
  • wq 写入并退出
  • x 写入并退出
  • q 退出
  • q! 不存盘退出,即使更改都将丢失
  • r filename 读文件内容到当前文件中
  • w filename 将当前文件内容写入另一个文件
  • !command 执行命令
  • r!command 读入命令的输出

地址定界

:start_pos,end_pos 
  # 具体第#行,例如2表示第2行 
  #,# 从左侧#表示起始行,到右侧#表示结尾行 
  #,+#  从左侧#表示的起始行,加上右侧#表示的行数 
  :2,+3  表示2到5行 
. 当前行 
$ 最后一行 
.,$-1 当前行到倒数第二行 
% 全文, 相当于1,$

/pat1/,/pat2/

从第一次被pat1模式匹配到的行开始,一直到第一次被 pat2匹配到的行结束

#,/pat/ /pat/,$ 
使用方式:后跟一个编辑命令 
d 
y 
w file: 将范围内的行另存至指定文件中 
r file:在指定位置插入指定文件中的所有内容

查找

  • /PATTERN:从当前光标所在处向文件尾部查找
  • ?PATTERN:从当前光标所在处向文件首部查找
  • n:与命令同方向
  • N:与命令反方向

s: 在扩展模式下完成查找替换操作

  • 格式:s/要查找的内容/替换为的内容/修饰符
  • 要查找的内容:可使用模式
  • 替换为的内容:不能使用模式,但可以使用1, 2, …
  • 等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容

修饰符:

  • i: 忽略大小写
  • g: 全局替换;默认情况下,每一行只替换第一次出现
  • gc:全局替换,每次替换前询问
  • 查找替换中的分隔符/可替换为其它字符

例如 注:在命令模式中要格式正确,有%号(% 代表全文)

  • :%s@/etc@/var@g
  • :%s#/boot#/#i

u 撤销最近的更改

  • #u 撤销之前多次更改
  • U 撤消光标落在这行后所有此行的更改 (同行看,换到其它行就不行了)
    按Ctrl – r重做最后的“撤消”更改
  • . 重复前一个操作
  • n. 重复前一个操作n次

有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享

寄存器名称a,b,…,z,格式:“寄存器 放在数字和命令之间
如:

  • 3″tyy 表示复制3行到t寄存器中
  • “tp 表示将t寄存器内容粘贴
  • 未指定,将使用无命名寄存器

– – 相当于windows当中剪切版一样

有10个数字寄存器,用0,1,…,9表示,0存放最近复制内容 ,
1存放最近删除内容。当新的文本变更和删除时,1转存到2 ,2转存到3,
以此类推。数字寄存器不能在不同会话间共享

以二进制方式打开文件

vim –b binaryfile  

扩展命令模式下,利用xxd命令转换为可读的十六进制

:%!xxd  

编辑二进制文件

扩展命令模式下,利用xxd命令转换回二进制

:%!xxd –r 

保存退出

可视化模式

  • 允许选择的文本块
  • v 面向字符
  • V 面向行
  • ctrl-v 面向块
  • 可视化键可用于与移动键结合使用: w ) } 箭头等

  • 突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

多文件模式

  • vim FILE1 FILE2 FILE3 …
  • :next 下一个
  • :prev 前一个
  • :first 第一个
  • :last 最后一个
  • :wall 保存所有
  • :qall 退出所有
  • :wqall

使用多个窗口 多文件分割

  • vim -o|-O FILE1 FILE2 …
  • -o: 水平分割
  • -O: 垂直分割
  • 在窗口间切换:Ctrl+w, Arrow

单文件窗口分割

  • Ctrl+w,s: split, 水平分割
  • Ctrl+w,v: vertical, 垂直分割
  • ctrl+w,q:取消相邻窗口
  • ctrl+w,o:取消全部窗口
  • :wqall 退出

定制vim的工作特性

  • 配置文件:永久有效
  • 全局:/etc/vimrc
  • 个人:~/.vimrc

扩展模式:当前vim进程有效

(1) 行号 显示:set number, 简写为set nu
取消显示:set nonumber, 简写为set nonu

(2) 括号成对匹配 匹配:set showmatch,
简写为set sm 取消:set nosm

(3) 自动缩进 启用:set ai 自动对齐,换行
禁用:set noai

(4) 高亮搜索 启用:set hlsearch
禁用:set nohlsearch

(5) 语法高亮 启用:syntax on
禁用:syntax off

(6) 忽略字符的大小写 启用:set ic
不忽略:set noic

(7) 文件格式 启用windows格式 :set fileformat=dos
启用unix格式 :set fileformat=unix

(8) 设置文本宽度 :set textwidth=65 (vim only)
:set wrapmargin=15
:setall 查看所有的选项
vimtutor 命令:查看vim的相关使用

Ansible Config Playbook和Task介绍

Config

Ansible 的配置一般不需要更改,如果需要定制,自定义配置也很简单,在 Ansible 中,寻找配置按照如下顺序:

  • ANSIBLE_CONFIG (一个环境变量)
  • ansible.cfg (位于当前目录中)
  • .ansible.cfg (位于家目录中)
  • /etc/ansible/ansible.cfg

因此只需要按照文档自定义配置即可:http://ansible-tran.readthedocs.io/en/latest/docs/intro_configuration.html

Playbook

为了方便保存执行的操作,Ansible 使用了 Playbook 剧本。剧本使用 yml 格式,来避免成为了一种新语言或者脚本。

Playbook 是有 play 组成的,每个 play 包含了 host,user,tasks。

比如一个 playbook:

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service: name=httpd state=started
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

host 便是指定的 hosts 文件中的主机,可以通过 remote_user 指定在远程使用的用户,也可以用 sudo 为远程操作添加 root 权限。

Task

作为远程部署工具,task 是整个 playbook 的重点。每个 task 都会在指定的所有远程主机执行,如果有执行失败的主机,将会被跳过。

每个 task 目标在于执行一个幂等(moudle)的操作,因此即使是多次执行也会很安全。一个 task 类似于下面的格式:

tasks:
  - name: make sure apache is running
    service: name=httpd state=running

一个 task 包含了名称,model,以及参数。

使用fpm工具制作nginx的rpm包

fpm定制化RPM包之nginx rpm包的制作

1. 安装ruby模块

# yum -y install ruby rubygems ruby-devel

2. 添加阿里云的Rubygems仓库,国外资源会影响下载速度

gem sources -a http://mirrors.aliyun.com/rubygems/ 
http://mirrors.aliyun.com/rubygems/ added to sources

移除原生的ruby仓库

gem sources --remove http://rubygems.org/

3. 安装fpm

centos6:
gem install json -v 1.8.3
gem install fpm -v 1.3.3

centos7直接使用如下命令:

[root@slave02 ~]# gem install fpm

Fetching: cabin-0.9.0.gem (100%)
Successfully installed cabin-0.9.0
Fetching: backports-3.8.0.gem (100%)
Successfully installed backports-3.8.0
Fetching: arr-pm-0.0.10.gem (100%)
Successfully installed arr-pm-0.0.10
Fetching: clamp-1.0.1.gem (100%)
Successfully installed clamp-1.0.1
Fetching: ffi-1.9.18.gem (100%)
Building native extensions. This could take a while...
Successfully installed ffi-1.9.18
Fetching: childprocess-0.7.0.gem (100%)
Successfully installed childprocess-0.7.0
Fetching: archive-tar-minitar-0.5.2.gem (100%)
Successfully installed archive-tar-minitar-0.5.2
Fetching: io-like-0.3.0.gem (100%)
Successfully installed io-like-0.3.0
Fetching: ruby-xz-0.2.3.gem (100%)
Successfully installed ruby-xz-0.2.3
Fetching: stud-0.0.22.gem (100%)
Successfully installed stud-0.0.22
Fetching: mustache-0.99.8.gem (100%)
Successfully installed mustache-0.99.8
Fetching: insist-1.0.0.gem (100%)
Successfully installed insist-1.0.0
Fetching: dotenv-2.2.1.gem (100%)
Successfully installed dotenv-2.2.1
Fetching: pleaserun-0.0.29.gem (100%)
Successfully installed pleaserun-0.0.29
Fetching: fpm-1.8.1.gem (100%)
Successfully installed fpm-1.8.1
Parsing documentation for cabin-0.9.0
Installing ri documentation for cabin-0.9.0
Parsing documentation for backports-3.8.0
Installing ri documentation for backports-3.8.0
Parsing documentation for arr-pm-0.0.10
Installing ri documentation for arr-pm-0.0.10
Parsing documentation for clamp-1.0.1
Installing ri documentation for clamp-1.0.1
Parsing documentation for ffi-1.9.18
Installing ri documentation for ffi-1.9.18
Parsing documentation for childprocess-0.7.0
Installing ri documentation for childprocess-0.7.0
Parsing documentation for archive-tar-minitar-0.5.2
Installing ri documentation for archive-tar-minitar-0.5.2
Parsing documentation for io-like-0.3.0
Installing ri documentation for io-like-0.3.0
Parsing documentation for ruby-xz-0.2.3
Installing ri documentation for ruby-xz-0.2.3
Parsing documentation for stud-0.0.22
Installing ri documentation for stud-0.0.22
Parsing documentation for mustache-0.99.8
Installing ri documentation for mustache-0.99.8
Parsing documentation for insist-1.0.0
Installing ri documentation for insist-1.0.0
Parsing documentation for dotenv-2.2.1
Installing ri documentation for dotenv-2.2.1
Parsing documentation for pleaserun-0.0.29
Installing ri documentation for pleaserun-0.0.29
Parsing documentation for fpm-1.8.1
Installing ri documentation for fpm-1.8.1
15 gems installed

4.在打包机器上先安装一次nginx

yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre pcre-devel glib glib-devel
useradd nginx -M -s /sbin/nologin
tar xf nginx-1.12.0.tar.gz

cd nginx-1.12.0

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module --with-pcre

make && make install

5. 编写脚本

软件包卸载前、卸载后的脚本,可以根据情况是否编写,不编写问题也不大。但是rpm安装后的脚本是必须的。

mkdir /data/scripts/ -p
cd /data/scripts/

编写一个rpm安装后需要执行的脚本
vim nginx_post_install.sh

#!/bin/bash

useradd nginx -M -s /sbin/nologin
chmod +x /etc/init.d/nginx
chkconfig --add nginx
echo 'PATH=/user/local/nginx/sbin:$PATH'>> /etc/profile.d/nginx.sh

卸载nginx后需要执行的脚本

# cat after_remove.sh 
#!/bin/bash
rm -rf /usr/local/nginx
rm -f /etc/rc.d/init.d/nginx

准备个启动脚本,如下:

vim /etc/init.d/nginx

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse 
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=([^ ]*).*/1/g' -`
   if [ -z "`grep $user /etc/passwd`" ]; then
       useradd -M -s /bin/nologin $user
   fi
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    $nginx -s reload
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

6. 打包(打包的过程其实就是将我们编译安装好的文件、目录打包,/data/scripts/是本次的打包工作目录)

将nginx启动脚本和注意的配置及启动文件拷贝到打包目录

mkdir -p /data/scripts/etc/rc.d/init.d
cp /etc/init.d/nginx /data/scripts/etc/rc.d/init.d/

mkdir -p /data/scripts/usr/local/nginx/
cp -r /usr/local/nginx/ /data/scripts/usr/local/nginx/

/data/scripts目录结构

[root@master scripts]# tree

.
├── after_remove.sh
├── etc
│   └── rc.d
│   └── init.d
│   └── nginx
├── nginx-1.12.0-1.el6.x86_64.rpm
├── nginx_post_install.sh
└── usr
└── local
└── nginx
├── client_body_temp
├── conf
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── etc
│   └── rc.d
│   └── init.d
│   └── nginx
├── fastcgi_temp
├── html
│   ├── 50x.html
│   └── index.html
├── logs
│   ├── access.log
│   ├── error.log
│   └── nginx.pid
├── proxy_temp
├── sbin
│   └── nginx
├── scgi_temp
└── uwsgi_temp

打包,即将准备好的文件打包成rpm

# fpm -f -s dir -t rpm -n nginx --epoch 0 -v 1.12.0 --iteration 1.el6 -C /data/scripts/ -d 'pcre-devel,openssl-devel,autoconf,glib-devel' --post-uninstall /data/scripts/nginx_post_install.sh --post-uninstall /data/scripts/after_remove.sh --workdir /data/scripts/ etc usr
Created package {:path=>"nginx-1.12.0-1.el6.x86_64.rpm"}

报错:

Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}

解决:

yum install rpm-build -y

注意:我们可以操作前修改下主机名,这样打包出来的Build Host就会跟着改变。

7. 安装rpm包

yum命令安装rpm包

yum -y localinstall nginx-1.12.0-1.x86_64.rpm

这个命令会自动先安装rpm包的依赖,然后再安装rpm包。

FPM常用参数:

  • -f :强制覆盖[覆盖同名rpm包]
  • -n :指定的rpm包名
  • -p :指定的rpm包文件放置位置
  • -v :指定的rpm包版本
  • -d :指定依赖的软件 ( [-d ‘name’] or [-d ‘name > version’] 例子: -d ‘libstdc++ >= 4.4.3’)
  • -a :指定系统架构,如果是noarch则为’-a all’ 或者 ‘-a native’ [x86_64] 当软件不区分64位或32位的时候可以 noarch
  • -s :指定INPUT的数据类型 ([“-s dir”] 省略数据类型)
  • -m :指定打包人员[Packager] ([ -m ‘user’])
  • -C :指定打包的相对路径,类似于buildroot. 譬如-C /tmp/apr/ 而打包机器的数据包路径是/tmp/apr/{opt,usr,etc} 那安装这个rpm包后,在本地的数据就是/opt/,/usr/,/etc/
  • -t :指定需要制作成什么包,可选项有(deb,rpm,solaris,etc)

支持的源类型::

"dir" "rpm" "gem" "python" "empty" "tar" "deb" "cpan" "npm" "osxpkg" "pear" "pkgin" "virtualenv" "zip"

支持的目标类型:

"rpm" "deb" "solaris" "puppet" "dir" "osxpkg" "p5p" "puppet" "sh" "solaris" "tar" "zip"
--description         :软件包描述
--conflicts         :指定冲突软件
--url                 :指定站点[惯例都是添加软件的官网 例如: --url "http://www.cnblog.com/roach57" ]
--verbose             :安装过程详细打印
--after-install     :包安装之后执行的脚本 也可写作 --post-install FILE
--before-install     :包安装之前执行的脚本 
--after-remove         :包卸载之后执行的脚本
--before-remove     :包卸载之前执行的脚本
--after-upgrade     :包更新之后执行的脚本[仅支持 deb 和 rpm 这两种包]
--before-upgrade     :包更新之前执行的脚本
--iteration         :发布序号[就是rpm包里面的release]
--epoch             :纪元  [不知道干嘛用的]
--no-rpm-sign        :不使用rpm签名   Signature
--license             :证书许可 [可选项有 'BSD(开源软件)' 'GPLv2(自由软件)' 'MIT' 'Public Domain(公共域)' 'Distributable(贡献)' 'commercial(商业)' 'Share(共享)等',一般的开发都写'BSD'或'GPL']
--vendor             :供应商名称 [ --vendor '[email protected]']
--no-depends         :代表没有任何依赖包,和-d是对立的,不能共用
--config-files         :指定配置文件,可以指定目录[递归]
--directories         :指定包目录
--category             :软件所属的类别[这是个什么软件]下面有个对应的表格:
    [参考这个文件 /usr/share/doc/rpm-x.x.x/GROUPS ]
    Amusements/Games [娱乐/游戏]
    Amusements/Graphics [娱乐/图形]
    Applications/Archiving [应用/文档]
    Applications/Communications [应用/通讯]
    Applications/Databases [应用/数据库]
    Applications/Editors [应用/编辑器]
    Applications/Emulators [应用/仿真器]
    Applications/Engineering [应用/工程]
    Applications/File [应用/文件]
    Applications/Internet [应用/因特网]
    Applications/Multimedia [应用/多媒体]
    Applications/Productivity [应用/产品]
    Applications/Publishing [应用/印刷]
    Applications/System [应用/系统]
    Applications/Text [应用/文本]
    Development/Debuggers [开发/调试器]
    Development/Languages [开发/语言]
    Development/Libraries [开发/函数库]
    Development/System [开发/系统]
    Development/Tools [开发/工具]
    Documentation [文档]
    System Environment/Base [系统环境/基础]
    System Environment/Daemons [系统环境/守护]
    System Environment/Kernel [系统环境/内核]
    System Environment/Libraries [系统环境/函数库]
    System Environment/Shells [系统环境/接口]
    User Interface/Desktops [用户界面/桌面]
    User Interface/X [用户界面/X窗口]
    User Interface/X Hardware Support [用户界面/X硬件支持]

RPM包的组成格式:

roach-1.0.1-57.el6.x86_64.rpm
  |    |     |       |     |
软件名称|     |       |     |
     版本号   |       |    |
           发布号     |      |
                   硬件平台  |
                            扩展名

例子备注:

  • roach :软件名称
  • 1.0.1 :软件版本号
  • 57.el6 :发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化,el6指的是rhel6系统中发布
  • x86_64 :指64位的PC架构,另外还有’i386′ ‘i686’ 等32位的PC架构,noarch是指不区分硬件架构
  • rpm :扩展名