MySQL5.6.12 rpm制作及及自動化部署安裝


轉自:http://blog.itpub.net/29254281/viewspace-1268918/

首先,下載rpmbuild
yum install rpm-build -y
它是Red Hat用於打RPM包的工具.
安裝之后重啟計算機,可以看到/root/rpmbuild目錄下有如下文件夾

這個工具打包的過程大致如下,
編寫spec指定打包的過程
將源碼壓縮包放在SOURCES目錄下,
將源碼解壓縮到BUILD目錄,執行make命令
將make install 的結果放在BUILDROOT目錄下,
最后將BUILDROOT下編譯好的二進制文件制作成RPM包。
並且可以指定在RPM安裝之前,安裝之后,卸載等過程執行的命令

首先,下載源碼包
http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.14.tar.gz
並將其復制到指定的目錄
/root/rpmbuild/SOURCES/mysql-5.6.14.tar.gz

安裝編譯MySQL需要的依賴包
yum -y install make gcc-c++ cmake bison-devel  ncurses-devel

編寫spec腳本
vim mysql.spec

Name:       MySQL
Version:    5.6.14    
Release:    1%{?dist}
Summary:    MySQL-5.6.14 RPM

Group:      applications/database
License:    GPL    
URL:        http://www.mysql.com    
Source0:    mysql-5.6.14.tar.gz
BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires:  cmake

AutoReqProv: no
%description
MySQL 5.6.14

%define MYSQL_USER mysql
%define MYSQL_GROUP mysql

%prep
%setup -n mysql-%{version}

%build
cmake \
-DCMAKE_INSTALL_PREFIX=/home/mysql/mysql-5.6.14 \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make -j `cat /proc/cpuinfo | grep processor| wc -l`


%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}


%pre
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data


%post
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc

%preun
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql

%clean
rm -rf %{buildroot}


%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) /home/mysql/mysql-5.6.14/*


%changelog

這個腳本各個Segment的作用請參考
http://machael.blog.51cto.com/829462/213477

其中
Source0:    mysql-5.6.14.tar.gz
這個壓縮文件需要放在指定的目錄中(/root/rpmbuild/SOURCES)
自動解壓的時候,會在這個指定目錄中找這個文件


AutoReqProv: no
這個參數必須設置,否則在安裝的時候,會顯示有依賴包的缺失.實際上是不需要的。

%setup -n mysql-%{version}
解壓源碼包之后,會進入目錄執行build,它默認是根據%{name}和%{version}拼接的目錄.
以MySQL為例,在spec中寫的name為MySQL,version為5.6.14
那么它會進入MySQL-5.6.14的目錄,
但是源碼包解壓之后的目錄是mysql-5.6.14(小寫)
所以在setup這個段使用-n參數,匹配這個目錄.(就是說默認的設置不靈,需要自己匹配目錄)

make -j `cat /proc/cpuinfo | grep processor| wc -l`
查看計算機有幾個核,然后多線程編譯

這個腳本的過程是這樣的
首先解壓源碼包
%prep
%setup -n mysql-%{version}

然后執行%build的過程,make編譯

然后執行%install
將編譯之后的代碼真實的安裝一遍,
它安裝的目錄是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/home/mysql/mysql-5.6.14/
因為我們指定的安裝目錄是/home/mysql/mysql-5.6.14/,它相當於在一個沙盒中安裝了一遍.
它會將沙盒中安裝之后的文件打成RPM包

%files就是指定哪些沙盒中的文件打入RPM包
%files指定的文件是相對路徑,絕對路徑應該是%{buildroot}/home/mysql/mysql-5.6.14
默認的%{buildroot}就是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/

這個%{buildroot}是由spec文件的BuildRoot設置的
BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

%pre是RPM安裝之前執行的命令
這里主要是創建數據文件的目錄和帳號
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data

%post是RPM安裝之后執行的命令
這里主要是創建數據庫實例,配置服務,配置環境變量
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc

%preun是卸載RPM包執行的命令,主要用於清理
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql

其實編寫spec文件本質上是在寫一個回調函數,rpmbuild根據spec的回調函數,生成一個Shell腳本,打包的過程就是執行Shell腳本的過程。

定制RPM安裝包可以滿足大規模自動化部署的場景
因為它可以
定制配置文件(將配置文件放在ftp或者http上,在%post段下載這個配置文件放在/etc下)
定制安裝目錄和數據文件,日志文件的目錄(生產系統不同的掛載點,底層可能是不同的物理設備)
自動創建帳號,配置服務和環境變量

這些特性在規模很小時微不足道,
比如給研發和測試安裝,人家還嫌你有毛病.明明一個rpm能搞定,你還整這么復雜,不是臭顯擺嗎?
生產環境裝一個庫運行好幾年,再裝的時候,這個RPM估計都忘了放哪里了...
但是一旦規模上來了,一天需要裝個10台8台的,這個自動化安裝的優點就顯現出來了

 

參考:
源碼安裝MySQL
http://www.cnblogs.com/xiongpq/p/3384681.html

rpmbuild spec文件詳解
http://machael.blog.51cto.com/829462/213477
http://www.worldhello.net/2011/04/02/2405.html

AutoReqProv參數的解釋
http://blog.csdn.net/peng_zhou/article/details/3530230


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM