使用 rpmbuild 制作 Nginx 的 RPM 包 (2019 年 11 月 04 日 - 更新 openresty/lua-nginx-module) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wsgzao
V2EX    程序员

使用 rpmbuild 制作 Nginx 的 RPM 包 (2019 年 11 月 04 日 - 更新 openresy/lua-nginx-module)

  •  
  •   wsgzao
    wsgzao 2019-11-05 17:16:37 +08:00 2306 次点击
    这是一个创建于 2167 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基于 openresty 制作 nginx rpm 安装包

    推荐大家向 openresty 转型,我在编译过程中主要遇到以下 4 个小问题

    1. 问题 1 沿用官方的 luajit v2.0.5 编译新版本 lua-nginx-module 应该会提示建议切换至 openresty 的 luajit v2.1 分支
    2. 问题 2 的解决方案是使用低版本 lua-nginx-module v0.10.14 ,使用最新版发现会触发该问题,等待官方修复
    3. 问题 3 的原因是因为 nginx 启动需要一点点时间,而 systemd 在 nginx 完成启动前就去读取 pid file 造成读取 pid 失败
    4. 问题 4 的 libluajit-5.1.so.2 问题跟着我的步骤执行应该不会出现,不需要执行 ln 软链接等操作
    [root@gop-sg-192-168-56-103 wangao]# tailf /var/log/nginx/error.log # 问题 1 2019/11/04 11:59:56 [alert] 2749#2749: detected a LuaJIT version which is not OpenResty's; many optimizations will be disabled and performance will be compromised (see https://github.com/openresty/luajit2 for OpenResty's LuaJIT or, even better, consider using the OpenResty releases from https://openresty.org/en/download.html) # 问题 2 2019/11/04 11:59:56 [alert] 2749#2749: failed to load the 'resty.core' module ( https://github.com/openresty/lua-resty-core); ensure you are using an OpenResty release from https://openresty.org/en/download.html (reason: module 'resty.core' not found: no field package.preload['resty.core'] no file './resty/core.lua' no file '/usr/local/share/luajit-2.0.5/resty/core.lua' no file '/usr/local/share/lua/5.1/resty/core.lua' no file '/usr/local/share/lua/5.1/resty/core/init.lua' no file './resty/core.so' no file '/usr/local/lib/lua/5.1/resty/core.so' no file '/usr/local/lib/lua/5.1/loadall.so' no file './resty.so' no file '/usr/local/lib/lua/5.1/resty.so' no file '/usr/local/lib/lua/5.1/loadall.so') in /etc/nginx/nginx.conf:117 # 问题 3 [root@gop-sg-192-168-56-103 wangao]# systemctl status nginx ● nginx.service - The NGINX HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-08-19 01:36:46 +08; 2 months 17 days ago Process: 1105 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 1071 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Main PID: 1111 (nginx) Tasks: 2 CGroup: /system.slice/nginx.service ├─1111 nginx: master process /usr/sbin/nginx └─1112 nginx: worker process Aug 19 01:36:46 gop-sg-192-168-56-103 systemd[1]: Starting The NGINX HTTP and reverse proxy server... Aug 19 01:36:46 gop-sg-192-168-56-103 nginx[1071]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Aug 19 01:36:46 gop-sg-192-168-56-103 nginx[1071]: nginx: configuration file /etc/nginx/nginx.conf test is successful Aug 19 01:36:46 gop-sg-192-168-56-103 systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument Aug 19 01:36:46 gop-sg-192-168-56-103 systemd[1]: Started The NGINX HTTP and reverse proxy server. # 问题 4 nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory 

    环境初始化

    # check current os version and kernel cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) uname -r 3.10.0-862.el7.x86_64 # yum yum install -y gcc pam-devel git rpm-build pcre-devel openssl openssl-devel geoip-devel # mkdir mkdir -p /root/rpmbuild/SOURCES/ mkdir -p /root/rpmbuild/SPECS/ mkdir -p /root/rpmbuild/RPMS/noarch # download openssl cd /usr/local/src wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2t.tar.gz tar xf OpenSSL_1_0_2t.tar.gz mv openssl-OpenSSL_1_0_2t/ openssl-1_0_2t # install lua sh luajit2.sh # confirm these files are correct [root@gop-sg-192-168-56-103 ~]# tree nginx-rpmbuild-centos7/ nginx-rpmbuild-centos7/ ├── build.sh ├── conf_build │ ├── conf │ │ ├── django_fastcgi_params │ │ ├── fastcgi.conf │ │ ├── fastcgi_params │ │ ├── koi-utf │ │ ├── koi-win │ │ ├── mime.types │ │ ├── naxsi_core.rules │ │ ├── nginx.conf │ │ ├── scgi_params │ │ ├── sites-available │ │ │ └── 000_stub_status │ │ ├── uwsgi_params │ │ └── win-utf │ ├── logrotate.d │ │ └── nginx │ ├── nginx.conf │ └── nginx.service ├── luajit2.sh ├── luajit.sh ├── nginx-spec └── nginx-template ├── conf │ ├── django_fastcgi_params │ ├── naxsi_core.rules │ ├── nginx.conf │ └── sites-available │ └── 000_stub_status ├── logrotate.d │ └── nginx ├── nginx.conf └── nginx.service 8 directories, 26 files 

    luajit2.sh

    # https://github.com/openresty/luajit2/releases LUAVER="v2.1-20190912" WKDIR="/root/rpmbuild/SOURCES" cd $WKDIR wget https://github.com/openresty/luajit2/archive/$LUAVER.tar.gz tar zxf $LUAVER.tar.gz rm -f $LUAVER.tar.gz cd luajit2* make BUILDMODE=static make install export LUAJIT_LIB=/usr/local/lib export LUAJIT_INC=/usr/local/include/luajit-2.1 # ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2 # https://github.com/openresty/lua-nginx-module/issues/8 

    build.sh

     NGX_VER=1.16.1 BDDIR="/root/rpmbuild/BUILD" WKDIR="/root/rpmbuild/SOURCES" CURRENTDIR=`dirname $(readlink -f "$0")` echo $CURRENTDIR export LUAJIT_LIB=/usr/local/lib # export LUAJIT_INC=/usr/local/include/luajit-2.0 export LUAJIT_INC=/usr/local/include/luajit-2.1 cd $BDDIR rm -rf * cd $WKDIR rm -rf * wget http://nginx.org/download/nginx-$NGX_VER.tar.gz tar xzf nginx-$NGX_VER.tar.gz rm -f nginx-$NGX_VER.tar.gz mv nginx-$NGX_VER nginx-garena-$NGX_VER cd nginx-garena-$NGX_VER/ mkdir -p contrib cd contrib/ git clone git://github.com/openresty/headers-more-nginx-module.git git clone git://github.com/openresty/echo-nginx-module.git git clone git://github.com/simplresty/ngx_devel_kit.git # git clone git://github.com/openresty/lua-nginx-module wget https://github.com/openresty/lua-nginx-module/archive/v0.10.14.tar.gz tar xf v0.10.14.tar.gz mv lua-nginx-module-0.10.14 lua-nginx-module git clone git://github.com/nbs-system/naxsi.git rm -rf */.git rm -rf *.tar* cd .. cp -r $CURRENTDIR/nginx-template/* $WKDIR/nginx-garena-$NGX_VER/ cp $CURRENTDIR/nginx-spec /root/rpmbuild/SPECS/ # cp /root/rules $WKDIR/nginx-garena-$NGX_VER/debian/ cd $WKDIR tar zcf nginx-garena-$NGX_VER.tar.gz nginx-garena-$NGX_VER/ cd /root/rpmbuild/SPECS/ rpmbuild -ba nginx-spec cd /root/rpmbuild/RPMS/noarch 

    nginx-spec

     Name: nginx-garena Version: 1.16.1 Release: 0 Summary: nginx garena rpm Source0: nginx-garena-%{version}.tar.gz License: GPL Group: Rahul BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-buildroot %description Garena self-build Nginx. %define _binaries_in_noarch_packages_terminate_build 0 %prep %setup -q %{name}-%{version} %build CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr/share/nginx/ \ --with-ld-opt="-Wl,-rpath,/usr/local/lib" \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/acess.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --http-client-body-temp-path=/var/lib/nginx/body \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --http-scgi-temp-path=/var/lib/nginx/scgi \ --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ --with-pcre-jit \ --with-http_flv_module \ --with-http_mp4_module \ --with-file-aio \ --with-http_v2_module \ --with-stream \ --with-stream_ssl_module \ --with-http_auth_request_module \ --with-http_slice_module \ --with-threads \ --with-http_gunzip_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_geoip_module \ --with-http_ssl_module \ --with-openssl=/usr/local/src/openssl-1_0_2t \ --with-http_addition_module \ --with-http_geoip_module \ --with-http_gzip_static_module \ --with-http_realip_module \ --with-ipv6 \ --without-mail_pop3_module \ --without-mail_imap_module \ --without-mail_smtp_module \ --add-module=contrib/headers-more-nginx-module \ --add-module=contrib/echo-nginx-module \ --add-module=contrib/ngx_devel_kit \ --add-module=contrib/lua-nginx-module \ --add-module=contrib/naxsi/naxsi_src make -j8 %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install install -m 0755 -d $RPM_BUILD_ROOT/etc/nginx/sites-enabled install -m 0755 -d $RPM_BUILD_ROOT/etc/nginx/sites-available install -m 0755 -d $RPM_BUILD_ROOT/var/log/nginx install -m 0755 -d $RPM_BUILD_ROOT/var/lib/nginx install -D -m 644 conf/sites-available/000_stub_status $RPM_BUILD_ROOT/etc/nginx/sites-available/000_stub_status install -D -m 644 conf/django_fastcgi_params $RPM_BUILD_ROOT/etc/nginx/django_fastcgi_params install -D -m 644 conf/naxsi_core.rules $RPM_BUILD_ROOT/etc/nginx/naxsi_core.rules install -D -m 644 conf/sites-available/000_stub_status $RPM_BUILD_ROOT/etc/nginx/sites-enabled/000_stub_status install -D -m 644 logrotate.d/nginx $RPM_BUILD_ROOT/etc/logrotate.d/nginx install -D -m 644 nginx.service $RPM_BUILD_ROOT/usr/lib/systemd/system/nginx.service %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %post useradd -s /sbin/nologin -d /var/www www-data chown -R www-data.www-data /var/log/nginx /var/lib/nginx systemctl enable nginx echo %{name}-%{version} is successfully installed. systemctl start nginx %files %defattr(-,root,root) %dir /etc/nginx /etc/nginx/* %dir /usr/src/debug/nginx-garena-%{version} /usr/src/debug/nginx-garena-%{version}/* /usr/sbin/nginx %dir /usr/share/nginx /usr/share/nginx/* /etc/logrotate.d/nginx /usr/lib/systemd/system/nginx.service /usr/lib/debug/* /usr/lib/debug/.build-id/* %dir /var/log/nginx %dir /var/lib/nginx %config(noreplace) /etc/nginx/nginx.conf 

    logrotate.d/nginx

     /var/log/nginx/*.log /var/log/nginx/*/*.log{ daily missingok rotate 14 compress delaycompress notifempty create 640 root adm sharedscripts postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` endscript } 

    nginx.conf

     user www-data; worker_processes auto; #worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; worker_rlimit_nofile 655650; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 10240; } http { # include /etc/nginx/naxsi_core.rules; include mime.types; default_type application/octet-stream; log_format garena '$remote_addr - $remote_user [$time_iso8601] "$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $request_time $upstream_response_time "$http_x_forwarded_for" "$geoip_country_code" "$host"'; log_format garena_post '$remote_addr - $remote_user [$time_iso8601] "$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $request_time $upstream_response_time "$http_x_forwarded_for" "$geoip_country_code" "$host" "$request_body"'; log_format compact '$time_iso8601|$remote_addr|$geoip_country_code|$http_x_forwarded_for|$status|$request_time|$upstream_response_time|$request_length|$body_bytes_sent|$host|$request|$http_referer|$http_user_agent'; log_format compact_post '$time_iso8601|$remote_addr|$geoip_country_code|$http_x_forwarded_for|$status|$request_time|$upstream_response_time|$request_length|$body_bytes_sent|$host|$request|$http_referer|$http_user_agent|$request_body'; # access_log logs/access.log main; sendfile on; # tcp_nopush on; keepalive_timeout 30; fastcgi_keep_conn on; tcp_nodelay on; gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_proxied any; gzip_buffers 16 8k; gzip_types text/plain application/Javascript application/x-Javascript text/Javascript text/xml text/css application/json; gzip_vary on; include /etc/nginx/sites-enabled/*; set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; # real_ip_recursive on; # geoip_country /usr/share/GeoIP/GeoIP.dat; server_tokens off; # returns "Server: nginx" more_clear_headers Server; # doesn't return "Server: " header at all } 

    nginx.service

    https://www.nginx.com/resources/wiki/start/topics/examples/initscripts/

    [Unit] Description=The nginx HTTP and reverse proxy server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID KillMode=process KillSignal=SIGQUIT TimeoutStopSec=5 PrivateTmp=true [Install] WantedBy=multi-user.target 

    编译生成 nginx rpm

    1. 编辑 build.sh 和 nginx-spec 定义 NGX_VER=1.16.1
    2. 如果需要改变 contrib 的 module 也是修改上述两处位置
    sh build.sh extracting debug info from /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64/usr/sbin/nginx dwz: Too few files for multifile optimization /usr/lib/rpm/sepdebugcrcfix: Updated 1 CRC32s, 0 CRC32s did match. 12776 blocks + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-compress + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/lib/rpm/redhat/brp-java-repack-jars Processing files: nginx-garena-1.16.1-0.noarch warning: File listed twice: /etc/nginx/nginx.conf Provides: config(nginx-garena) = 1.16.1-0 nginx-garena = 1.16.1-0 Requires(interp): /bin/sh Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires(post): /bin/sh Requires: libGeoIP.so.1()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.10)(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libcrypt.so.1()(64bit) libcrypt.so.1(GLIBC_2.2.5)(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_3.3)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpcre.so.1()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) libz.so.1()(64bit) rtld(GNU_HASH) warning: Arch dependent binaries in noarch package Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64 Wrote: /root/rpmbuild/SRPMS/nginx-garena-1.16.1-0.src.rpm Wrote: /root/rpmbuild/RPMS/noarch/nginx-garena-1.16.1-0.noarch.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.Qc7JbE + umask 022 + cd /root/rpmbuild/BUILD + cd nginx-garena-1.16.1 + '[' /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64 '!=' / ']' + rm -rf /root/rpmbuild/BUILDROOT/nginx-garena-1.16.1-0.x86_64 + exit 0 
    [root@sg-gop-10-71-49-5 wangao]# nginx -V nginx version: nginx/1.16.1 built with OpenSSL 1.0.2t 10 Sep 2019 TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx/ --with-ld-opt=-Wl,-rpath,/usr/local/lib --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-pcre-jit --with-http_flv_module --with-http_mp4_module --with-file-aio --with-http_v2_module --with-stream --with-stream_ssl_module --with-http_auth_request_module --with-http_slice_module --with-threads --with-http_gunzip_module --with-http_random_index_module --with-http_secure_link_module --with-http_geoip_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1_0_2t --with-http_addition_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-ipv6 --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --add-module=contrib/headers-more-nginx-module --add-module=contrib/echo-nginx-module --add-module=contrib/ngx_devel_kit --add-module=contrib/lua-nginx-module --add-module=contrib/naxsi/naxsi_src # Prettier https://serverfault.com/questions/223509/how-can-i-see-which-flags-nginx-was-compiled-with [root@sg-gop-10-71-49-5 wangao]# 2>&1 nginx -V | xargs -n1 nginx version: nginx/1.16.1 built with OpenSSL 1.0.2t 10 Sep 2019 TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx/ --with-ld-opt=-Wl,-rpath,/usr/local/lib --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-pcre-jit --with-http_flv_module --with-http_mp4_module --with-file-aio --with-http_v2_module --with-stream --with-stream_ssl_module --with-http_auth_request_module --with-http_slice_module --with-threads --with-http_gunzip_module --with-http_random_index_module --with-http_secure_link_module --with-http_geoip_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1_0_2t --with-http_addition_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-ipv6 --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --add-module=contrib/headers-more-nginx-module --add-module=contrib/echo-nginx-module --add-module=contrib/ngx_devel_kit --add-module=contrib/lua-nginx-module --add-module=contrib/naxsi/naxsi_src [root@sg-gop-10-71-49-5 wangao]# 2>&1 nginx -V | xargs -n1 | grep ssl --with-stream_ssl_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1_0_2t [root@sg-gop-10-71-49-5 wangao]# 2>&1 nginx -V | xargs -n1 | grep lua --add-module=contrib/lua-nginx-module 

    更新历史

    2019 年 11 月 04 日 - 更新 openresty/lua-nginx-module

    2019 年 01 月 16 日 - 初稿

    阅读原文 - https://wsgzao.github.io/post/rpmbuild/

    重复的内容就不再发了,需要了解基础知识可以浏览原文

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2181 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:50 PVG 08:50 LAX 17:50 JFK 20:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86