centos和ubuntu安装卸载软件(rpm/dpkg)

使用Linux系统,无论是Centos/RHEL/Fedoar系列还是Ubuntu/debian系列,都有独立的包管理体系,在Centos系列,使用rpm包进行软件安装配置管理,在Ubuntu系列,使用deb包进行软件安装配置管理

CentOS:

centos使用yum做自动化包管理,包格式为rpm包,常用命令有:

yum search xxx
yum install xxx
yum groupinstall  "xxx" //以组形式安装软件包组合

直接安装rpm

rpm -ivh xxx.rpm --force (--force表示强制安装)

直接卸载rpm

rpm -e xxx.rpm

查看包内容:

rpm -l xxx.rpm

查看一个文件在哪个rpm包:

rpm -f 文件名

查看系统安装哪些rpm

rpm -qa

Ubuntu:

Ubuntu使用apt做自动化包管理,包格式为deb,常用命令有:

apt-cache search xxx
apt-get install xxx
apt-get remote xxx

直接安装deb包:

dpkg -i xxx.deb

列出包关联:

dpkg -L xxx.deb

显示包版本

dpkg -l xxx.deb

查看系统安装哪些deb包

dpkg -l

卸载包

dpkg -P xxx   //全部卸载,  dpkg -r xxx 只卸载软件,保留配置

显示包信息

dpkg -s xxx

显示包文件

dpkg -L ovmf 
dpkg -c xxx.deb
dpkg-deb -c xxx.deb

查看一个文件在哪个deb包:

dpkg -S 文件

CentOS 7 下编译Nginx并打包成rpm

上次说的,最近喜欢上了折腾Nginx。作为一个Web从业人员,越来越觉得Nginx太强大了。

于是便花了几天时间研究在Debian及CentOS下从源代码开始将Nginx打包成deb/rpm,这篇是记录CentOS 7 下将Nginx打包成rpm。

安装软件之前肯定是先要更新:

yum update

安装编译环境:

yum install gcc gcc-c++ rpm-build

安装Nginx所依赖的包:

yum install -y openssl-devel zlib-devel pcre-devel gd-devel

新建用户:

name=rpmbuild

useradd $name

echo "$name ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

su - $name

进入SOURCES目录:

cd ~/SOURCES/

在新建的用户home目录创建接下来要用到的几个文件夹:

rpmdev-setuptree

这样在rpmbuild的home目录下面有了这几个目录:

BUILD BUILDROOT RPMS SOURCES SPECS SRPMS

到这个地址找到合适的源码包下载: nginx package

下载源码,当前(2016-06-16)最新为nginx-1.10.1-1.el7.ngx.src.rpm:

wget http://nginx.org/packages/centos/7/SRPMS/nginx-1.10.1-1.el7.ngx.src.rpm

解压:

rpm2cpio nginx-1.10.1-1.el7.ngx.src.rpm |cpio -dvi

里面应该有这么些个文件:

[root@790fde35905f SOURCES]# ls
COPYRIGHT nginx-debug.sysconf nginx.sysconf
logrotate nginx.conf nginx.upgrade.sh
nginx-1.10.1 nginx.init.in nginx.vh.default.conf
nginx-1.10.1-1.el7.ngx.src.rpm nginx.service njs-1c50334fbea6.tar.gz
nginx-1.10.1.tar.gz nginx.spec
nginx-debug.service nginx.suse.logrotate

开始编译:

rpmbuild -ba nginx.spec

如果没有意外的话,在~/rpmbuild/RPMS/x86_64下面应该生成了对应的rpm包:

nginx-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-debuginfo-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-geoip-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-image-filter-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-njs-1.10.1.0.0.20160414.1c50334fbea6-1.el7.centos.ngx.x86_64.rpm
nginx-module-perl-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-xslt-1.10.1-1.el7.centos.ngx.x86_64.rpm

上面是按照Nginx默认的configure配置打包成的rpm,既然选择了自主打包而不是使用Nginx官方打包好的rpm,肯定是有些模块Nginx打包的不包含,自主打包也就是想把我们需要的模块加进Nginx而又不想在生产服务器安装一大堆包,所以,为了加进我们所需要的模块,我们可以更改上面哪个nginx.spec文件,加进我们所需要的模块,怎么加进去可以参考我先前的一篇文章Debian 8 下编译Nginx笔记。

进过我实际编译,暂时发现我所需要的两个额外模块Google Filter和PageSpeed中Google Filter可以正常编译进去,但是PageSpeed会报错,暂时没找到解决办法,有时间我再折腾一下。

CentOS 7系统上部署Apache+PHP+MariaDB+xcache使用rpm,php module

在进行部署之前需要确保当前的CentOS系统可以连接到任意一个repo软件仓库——如果网络通畅,直接使用默认repo仓库(最好使用本地yum仓库,速度快),如果无法连接网络使用本地repo仓库通过修改/etc/yum.repo.d/中的配置文件进行配置。

在配置好后使用以下命令安装Apache+PHP+MariaDB:

~]# yum install httpd php php-mysql mariadb* -y

在安装完成之后可以将其设为开机启动:

~]# systemctl start mariadb
~]# systemctl start httpd

使用下面这条命令可以检查一个服务是否设为开机启动:

~]# systemctl is-enabled SERVICE.service

到这里,基本的安装文件已经安装完成,但是从windows中使用浏览器访问此主机IP时还是不能访问,因为被防火墙阻止了,我们可以先将防火墙关闭和selinux,使用以下命令:

~]# iptables -F
~]# setenforce 0

就可以看到以下画面(172.16.7.100是这台主机的IP):

未分类

接下来开始配置两个虚拟主机,目的是当使用不同的网址访问此主机的时候能够返回不同的页面。首先添加一个配置文件到/etc/httpd/conf.d/中,文件中写入以下内容:

~]# vim /etc/httpd/conf.d/vhost-myweb
<VirtualHost *:80>
        ServerName myweb.wordpress.com
        DocumentRoot /myweb/wordpress
        ErrorLog logs/wordpress-error_log
        CustomLog logs/wordpress-access_log combiend
        <Directory "/myweb/wordpress">
                Options None
                AllowOverride   None
                Require all granted
        </Directory>
</VirtualHost>
<VirtualHost *:80>
        ServerName myweb.phpmyadmin.com
        DocumentRoot /myweb/phpmyadmin
        ErrorLog logs/phpmyadmin-error_log
        CustomLog logs/phpmyadmin-access_log combiend
        <Directory "/myweb/phpmyadmin">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
</VirtualHost>

然后创建两个虚拟主机对应的家目录,并重新加载服务:

~]# mkdir -pv /myweb/{wordpress,phpmyadmin}
~]# systemctl reload httpd
~]# echo "<h1>wordpress</h1>"> /myweb/wordpress/index.html
~]# echo "<h1>phpmyadmin</h1>"> /myweb/phpmyadmin/index.html

通过上面两条输出重定向命令创建测试文件分别到各自对应的目录,创建完成之后回到windows中修改hosts配置文件(此文件在C:WindowsSystem32driversetc目录中的hosts文件,这个文件保存了本地的DNS记录),在其中加入这两条(如果提示不能修改,那么鼠标右键此文件,属性→安全→编辑,在下方权限那里将修改权限的勾打上):

172.16.7.100 myweb.wordpress.com
172.16.7.100 myweb.phpmyadmin.com

配置保存之后在浏览器通过访问两个网址即可看到不同的网址:

未分类

未分类

接下来删除这两个测试文件(~]# rm -frv /myweb/*),开始配置wordpress和phpmyadmin,wordpress的配置请参考上一篇博客:http://11142243.blog.51cto.com/11132243/1964468 ,在这里只进行phpmyadmin的配置。

配置好的wordpress:

未分类

下面开始配置phpmyadmin,下载地址:https://files.phpmyadmin.net/phpMyAdmin/3.5.4/phpMyAdmin-3.5.4-all-languages.tar.gz

(在这里一定要注意版本,我因为没有注意版本,下载了一个高版本的,但是它所依赖的其他软件版本没跟上,调试了快一整天才发现这个问题 = =!)

调试的时候将下边的语句写到要调适的php文件开头,将错误输出打开:

    <?php
    ini_set('display_errors','on');
    error_reporting(E_ALL);
    ?>

当软件下载完成之后(可以通过

wget -c https://files.phpmyadmin.net/phpMyAdmin/3.5.4/phpMyAdmin-3.5.4-all-languages.tar.gz

命令下载或者从windows中下载之后导入到linux系统中(使用xshell自带功能或者FileZilla软件))

未分类

 ~]# cd /myweb/phpmyadmin/
 phpmyadmin]# tar -zxvf ~/phpMyAdmin-3.5.4-all-languages.tar.gz -C ./

然后将phpMyAdmin-4.7.4-all-languages/目录中的文件复制到当前目录中:

phpmyadmin]# mv phpMyAdmin-3.5.4-all-languages/* ./

这样,phpMyAdmin远程管理软件即配置完成,我们可以通过远程来管理数据库中的内容:

未分类

但是因为我们只给wordpress账户赋予了远程登陆的权限,所以在这里只能登陆账号“wordpress”(如果想要登陆root账户,只需要按照在数据库中给wordpress账户分配权限的方法给root用户分配远程登陆的权限即可)

未分类

未分类

此时网站已经部署好了,我们接下来需要对其进行测试,可以在另外一台能够连接到这台主机的主机中使用以下命令(同样需要修改hosts文件——/etc/hosts):

echo '172.16.7.100    myweb.phpmyadmin.com myweb.wordpress.com' >> /etc/hosts
~]# ab -c 100 -n 1000 myweb.phpmyadmin.com/index.php

此时,我正好有一台IP为172.16.6.11的主机,ab压力测试结果如下:

未分类

未分类

为了进一步提升访问速度,我们可以安装php的xcache模块:

]# yum install php-xcache

未分类

安装之后使用以下命令就可以看到如下图所示的效果(没有安装的使用这个命令效果如上图)

~]# php -v

未分类

安装成功之后再进行测试,发现速度提升了将近一倍

未分类

未分类

CentOS 6.X RPM安装mysql 5.7.X

准备工作:

下载MySQL:https://dev.mysql.com/downloads/mysql/

下载到/usr/local/src/mysql 目录下(mysql目录是自己创建的,用于存放rpm包)

CentOS 6.X选择版本,如图:

未分类

下载:

  • (mysql-community-server-5.7.19-1.el6.x86_64.rpm)

  • (mysql-community-client-5.7.19-1.el6.x86_64.rpm)

  • (mysql-community-common-5.7.19-1.el6.x86_64.rpm)

  • (mysql-community-libs-5.7.19-1.el6.x86_64.rpm)

或者:

  • (mysql-5.7.19-1.el6.x86_64.rpm-bundle.tar)(里面包括上述所有rpm)

CentOS 7.X选择版本,如图:

未分类

下载:

  • (mysql-community-server-5.7.19-1.el7.x86_64.rpm)

  • (mysql-community-client-5.7.19-1.el7.x86_64.rpm)

  • (mysql-community-common-5.7.19-1.el7.x86_64.rpm)

  • (mysql-community-libs-5.7.19-1.el7.x86_64.rpm)

或者

  • (mysql-5.7.19-1.el7.x86_64.rpm-bundle.tar)(里面包括所有上述rpm)

1、检查是否已安装了MYSQL

rpm -qa | grep -i mysql   //方式1  
yum list installed mysql*   //方式2  

2、删除MYSQL

yum  remove mysql mysql-server mysql-libs compat-mysql51 //删除<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>  
rpm -ev MySQL-server-4.0.14-0 MySQL-client-4.0.14-0    //删除rpm包  

3、查找之前的my.cnf,如果有就删除

whereis my.cnf   //查找方式1  
find / -name my.cnf  //查找方式2  

rm -rf /etc/my.cnf  //删除

3、安装mysql

安装顺序:

  • (mysql-community-common-5.7.19-1.el6.x86_64.rpm)

  • (mysql-community-libs-5.7.19-1.el6.x86_64.rpm)

  • (mysql-community-client-5.7.19-1.el6.x86_64.rpm)

  • (mysql-community-server-5.7.19-1.el6.x86_64.rpm)

cd /usr/local/src/mysql //找到下载的rpm包  
rpm -ivh mysql-community-common-5.7.19-1.el6.x86_64.rpm   
rpm -ivh mysql-community-libs-5.7.19-1.el6.x86_64.rpm   
rpm -ivh mysql-community-client-5.7.19-1.el6.x86_64.rpm   
rpm -ivh mysql-community-server-5.7.19-1.el6.x86_64.rpm  

4、默认安装位置

/var/lib/mysql //数据库目录

/etc/my.cnf //配置文件目录

/usr/bin //相关命令目录

/etc/init.d/mysqld //启动脚本

/usr/sbin/mysqld  //启动脚本

5、启动mysql

service mysqld start   //启动mysql  
service mysqld status  //查看mysql启动状态  

6、找到临时root密码

cat /var/log/mysqld.log |grep password    //查看日志找到密码  
2017-08-08T05:05:55.605159Z 1 [Note] A temporary password is generated for root@localhost: L1kB0wpTo(in  
2017-08-08T05:06:01.287139Z 3 [Note] Access denied for user 'UNKNOWN_MYSQL_USER'@'localhost' (using password: NO)  
2017-08-08T05:10:21.202185Z 4 [Note] Access denied for user 'root'@'localhost' (using password: NO)  
//复制密码  

7、登录MYSQL

mysql -uroot -p   //登录mysql  
alter user 'root'@'localhost' identified by 'Abc@123';  //修改root密码  
//可能会遇到的问题,在5.6后,mysql内置密码增强机制,低强度密码会报错:  
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements  
//修改一个包含大小写及数字的复杂密码即可

8、添加远程用户

use mysql;  
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'abc@123' WITH GRANT OPTION;  
//'%'代表任意地址,也可以指定IP

9、检查用户表,刷新内存权限

select host, user from user;  
FLUSH PRIVILEGES;  

10、设置防火墙

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT   //添加3306端口  
/etc/rc.d/init.d/iptables save       //保存配置  
/etc/init.d/iptables save            //也可保存  
/etc/init.d/iptables restart         //重启防火墙  
//或者直接编辑防火墙配置文件  
vim /etc/sysconfig/iptables          //编辑防火墙配置文件  
//其它操作  
/etc/init.d/iptables status          //查看防火墙状态  
/etc/init.d/iptables stop            //关闭防火墙服务  
chkconfig –level 35 iptables off    //永久关闭防火墙  

11、开机启动

chkconfig --list        //查看开机启动项  
chkconfig mysqld on     //设置开机启动  
chkconfig mysqld off    //关闭开机启动  

Linux环境下RPM方式JDK安装及配置

jdk下载

这个到java的官方网站下载自己需要的版本就好了,这里下载了jdk1.7版本的,选择下载了rpm包jdk-7u79-linux-x64.rpm。

rpm安装

rpm -ivh jdk安装包的目录/jdk-7u79-linux-x64.rpm

解释一下:

  • -i,—install 表示安装软件包 install package(s)
  • -v,—verbose 表示安装过程中输出软件包更多的信息 provide more detailed output
  • -h,—hash 表示显示安装进度 print hash marks as package installs (good with -v)

配置环境变量

vim /etc/profile

在最后添加

export JAVA_HOME=/usr/java/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

保存文件,然后执行以下命令使配置文件生效即可。

source /etc/profile

最后测试一下

# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

至此,安装完成!

使用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 :扩展名

CentOS 7 rpm安装mysql 5.7.18

最近一直使用MySQL,mysql-Linux下安装写了使用其他方式安装mysql,这次主要采用rpm格式来安装,试了一下感觉这种安装模式比较简单。

卸载MariaDB

centos7默认安装MariaDB而不是mysql,可能MariaDB数据库和mysql会冲突,故先卸载MariaDB。

1、查看已安装MariaDB相关的包

rpm -qa | grep mariadb

2、查看已安装的MariaDB相关yum包,包需根据rpm命令的结果判断

yum list mariadb-libs

3、移除已安装的MariaDB相关的yum包,包名需根据yum list命令结果判断,此步骤需要root权限

yum remove mariadb-libs

下载mysql rpm包

下面是官网的下载地址:
https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar

使用rpm安装mysql

下面步骤需要root权限,各个包之间有依赖关系,故rpm命令必须按顺序执行。

mkdir mysql
tar -xv -f mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar -C mysql
cd mysql
rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm

出现的问题:

1、libaio.so.1()(64bit) is needed by MySQL-server

解决方案:

安装libaio-0.3.107-10.el6.x86_64.rpm

①下载地址:

http://mirror.centos.org/centos/6/os/x86_64/Packages/libaio-0.3.107-10.el6.x86_64.rpm

②执行:

rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm

2、net-tools is needed

解决方案:

yum install net-tools

3、perl(Getopt::Long) 被 mysql-community-server-5.7.18-1.el7.x86_64 需要

解决方案:

yum install perl

安装成功后,删除安装文件和临时文件,也可以不删除。

登录mysql,修改初始密码

以下步骤需要root权限。
1、由于一开始并不知道密码,先修改配置文件/etc/my.cnf,让mysql跳过登录时的权限验证。加入一行:

vi /etc.my.cnf
skip-grant-tables 

未分类

2、更改MySQL数据库目录的所属用户及其所属组,然后启动mysql

chown -R mysql:mysql /var/lib/mysql/ 
systemctl start mysqld.service //启动mysql数据库服务 

3、登录

mysql -uroot -p

4、修改密码

use mysql; 
update user set authentication_string =password('你自己的密码') where host ='localhost' and user='mysql';
quit;

5、使用密码重新登录

mysql -uroot -p