2014年9月5日星期五

制作nginx的spec分享

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
制作nginx的spec分享  阅读原文»

制作nginx的spec分享

再跟大家分享一个我在奇虎这边做的一个nginxrpm包的spec文件。后面我再分享一下php和mysql等大家用的比较普遍的软件的spec。大家在做rpm包的时候可以参考我的这个文档,后面还包含了一些针对内核的优化的一些参数特别是tcp的快速释放和重利用等,遇到问题我们可以一起讨论。可以加这个qq325525293。下面我针对里面比较重要的内容做了解释。

%define _topdir /qihoo/Centos/

%define _specdir %{_topdir}/SPEC

%define _rpmdir %{_topdir}/

%define _srcrpmdir %{_topdir}/SRPMS

%define _sourcedir %{_topdir}/SOURCES

%define _tmppath %{_topdir}/tmp

%define _builddir %{_topdir}/BUILD

%define _prefix /usr/local/nginx

%define _docroot_dir /usr/local/nginx/html

Summary: qihoo custom nginx package

Name: qihoo-ops-nginx #生成rpm的名称叫什么

Version: 1.6.1

Release: 1_qihoo.el6

Vendor: gehailong <gehailong@360.cn>

Source: nginx-%{version}.tar.gz #source主要是引用一下自己定义好的脚本,配置文件之类的内容。

Source1: nginx.conf #nginx在主配置文件里面做了很多优化,包括cpu抢占,各种缓存策略,tcp,进程数等。

Source2: sysctl.conf

Source3: root.tar.gz

#Source4: nginx-module.tar.gz

Source5: nginx.logrotate #为了防止nginx日志文件逐渐增大,影响读写效率,对nginx日志定期进行切割。

Source6: nginx.init

Source7: fastcgi.conf

URL: http://w2.addops.bjt.qihoo.net:8360

License: GPL

Group: Applications/Internet

Buildroot:%{_tmppath}/%{name}-%{version}-root/

Requires: bash openssl-devel curl-develpcre pcre-devel openssl #主要定义了nginx依赖的一些rpm包。就是在yum装的时候依赖的包。

Autoreq: no

%description

qihoo custom nginx RPM

%prep

%setup -q -n nginx-%{version}

%build#这个阶段就是configure阶段。

./configure \

--prefix=%{_prefix} \

--with-http_stub_status_module \

--with-http_ssl_module \

make %{?_smp_mflags} #make阶段

%install#make install阶段

[ $RPM_BUILD_ROOT != "/" ]&& rm -rf $RPM_BUILD_ROOT

make DESTDIR=$RPM_BUILD_ROOT install #下面是来指定我要生成什么样的目录和文件等。

mkdir -p$RPM_BUILD_ROOT/usr%{_prefix}/conf/vhosts

mkdir -p${RPM_BUILD_ROOT}%{_prefix}/modules

mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/pid

mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/conf/include

mkdir -p ${RPM_BUILD_ROOT}%{_docroot_dir}

%{__tar} -zxvf %{SOURCE3} -C$RPM_BUILD_ROOT%{_docroot_dir}

mkdir -p ${RPM_BUILD_ROOT}/home/q/php

mkdir -p ${RPM_BUILD_ROOT}/home/q/system

#%{__tar} -zxvf %{SOURCE4} -C${RPM_BUILD_ROOT}%{_prefix}/modules/

[ -f${RPM_BUILD_ROOT}%{_prefix}/conf/nginx.conf ] && \

rm -fr${RPM_BUILD_ROOT}%{_prefix}/conf/nginx.conf

cp -rf %{SOURCE1}${RPM_BUILD_ROOT}%{_prefix}/conf/

mkdir -p ${RPM_BUILD_ROOT}/etc/logrotate.d/

cp -rf %{SOURCE5}${RPM_BUILD_ROOT}/etc/logrotate.d/nginx

mkdir -p ${RPM_BUILD_ROOT}/etc/init.d/

cp -fr %SOURCE6${RPM_BUILD_ROOT}/etc/init.d/nginx

rm -fr${RPM_BUILD_ROOT}%{_prefix}/conf/fastcgi.conf

cp -rf %{SOURCE7}${RPM_BUILD_ROOT}%{_prefix}/conf/

mkdir$RPM_BUILD_ROOT%{_prefix}/conf/vhosts/

touch$RPM_BUILD_ROOT%{_prefix}/conf/vhosts/blank.conf

rm -fr $RPM_BUILD_ROOT%{_prefix}/*temp

%files #注意这个阶段是把前面已经编译好的内容要打包了,其中exclude是指要排除什么不打包进来。

%defattr(-,root,root,755)

%{_prefix}

%{_docroot_dir}

%attr(0655,root,root) %config %{_sysconfdir}/init.d/nginx

%attr(0655,root,root) %config %{_sysconfdir}/logrotate.d/nginx

/home

%exclude %dir /home

%pre#pre是指在安装前要做什么操作,也就是先把nginx用户建立好。

if [ "$1" -eq "1" ];then

/usr/sbin/useradd -c "nginx" \

-s /sbin/nologin -r -d %{_docroot_dir} nginx 2> /dev/null || :

fi

%post#是指安装完成后的操作包括哪些操作。

if [ "$1" -eq "1"];then

/sbin/chkconfig --add nginx

/sbin/chkconfig --level 35 nginx on

chown -R nginx:nginx %{_docroot_dir} %{_prefix}

echo '# Add #下面主要是内核参数的优化,包括tcp的快速释放和重利用等。

net.ipv4.tcp_max_syn_backlog = 65536

net.core.netdev_max_backlog = 32768

net.core.somaxconn = 32768

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 2 <

2. 用Ubuntu Server架设基于独立硬盘的Windows文件共享和FTP服务器(配置工作)  阅读原文»

2. 用Ubuntu Server架设基于独立硬盘的Windows文件共享和FTP服务器(配置工作)

本章内容大致包括Ubuntu Server的环境配置和新硬盘添加及设置。

1)Ubuntu Server的安装和配置

安装就不细说了,只提一点,在过程中可以选择服务器角色的时候,记得勾选OpenSSH Server和Samba File Server。实在忘记了,或者已经安装好但不记得是否装了这两项的,也没有关系,根据下面两行指令就可以安装。

apt-getinstallopenssh-server
sudoapt-getinstallsamba

这里还不需要配置,具体配置在后边。SSH其实也非必要,只是没有这个东西操作起来很不方便(不能远程,不能在Windows下用Putty)。

wKiom1QIhxriNd7sAAG-jp4wwNM063.jpg

上面准备工作完成后,接下来是给服务器添加硬盘。

2)Mount新硬盘

我测试用的虚拟机配置为8GB系统硬盘+20GB存储硬盘。之所以把存储硬盘单独分出来,好处在于今后拆解、更换、拓展什么的都方便。个人强烈不建议用一块大硬盘把系统、存储都放在一起。

加入一块新硬盘后,我们要做的第一件事就是初始化、格式化它,然后mount到Ubuntu系统下(Linux下没有盘符的概念,所以就是创建一个文件夹,然后让这个文件夹和硬盘关联起来)。

具体操作:

a)执行以下指令

该指令会列出当前所有系统盘符和侦测到的硬盘,执行后结果如下:
/dev/sda/dev/sda1/dev/sda2/dev/sda5/dev/sdb
其中,/dev/sdb是新添加硬盘,前面的都是一个硬盘情况下系统默认配置。这里我们记住"sdb"这个关键词。

b) 执行以下指令

sudofdisk/dev/sdb
注意,上面的/dev/sdb就是前面对应的新硬盘。执行该指令后,会出现一段描述,最下面要求输入命令代码:
Command(mforhelp):
Command(mforhelp):p
回车后会看到一些有关新硬盘的信息,如容量等等,并要求再次输入指令,这一次我们输入n:
Command(mforhelp):n
然后会询问分区类型和分区数量等,我这里都采用默认设置,即直接按回车就好,以下为截图:

wKiom1QIkJnCf63iAAAgdVYBeYE827.png

上面的参数是把整块新硬盘设置为一个大的分区,但这些设置尚未生效,我们还要在最后确认一次

Command(mforhelp):w
w指令是把内存中的参数设定写入到硬盘上。输入w后回车,会看到
Thepartitiontablehasbeenaltered!
然后系统命令行会返回到bash

c) 执行ls /dev/sd*检查一下:

/dev/sda/dev/sda1/dev/sda2/dev/sda5/dev/sdb/dev/sdb1

多出一个/dev/sdb1,分区成功!

d) 接下来要对新分区进行格式化

sudomkfs.ext3-L/storage/dev/sdb1

这里的/storage是可以更改的,就是对分区的一个命名而已,相当于Windows下盘符的命名。

/dev/sdb1对应的是新分区,前面我们检查时看过了。

根据硬盘大小不同,以上指令完成的时间会不同。大硬盘,尤其是TB级别会需要相当时间,请耐心等待。

完成后会看到:

wKiom1QIk4DzGXn1AAANDoN8ojk405.png

e) 再接着我们要把新格式化好的分区mount到Ubuntu系统下

sudomkdir/storage
前面说了,Linux没有盘符的概念,分区对应的就是系统下一个文件夹,所以我在根目录下创建一个storage文件夹。
这个硬盘不是移动硬盘,是需要每次重启后自动mount的,所以我们需要修改/etc/fstab的内容
sudonano/etc/fstab
/dev/sdb1/storageautodefaults00

阅读更多内容

没有评论:

发表评论