Linux入門——如何製作一個刷取網頁訪問量的腳本並打包成rpm軟件包(CentOS)

概述

在Linux下進行腳本開發,以及系統維護大多少不了rpm命令的身影。常見的yum命令更是基於rpm命令之上的,接下來就讓我簡單介紹一下rpm命令,並用rpm命令簡單開發一個刷取訪問量的腳本程序。

rpm命令

rpm命令是RPM軟件包的管理工具,rpm原本是Red Hat Linux發行版專門用來管理Linux各項套件的程序,由於它遵循GPL規則且功能強大方便,因而廣受歡迎並逐漸受到其他發行版的採用。

語法:rpm 【參數】 【包名】

參數 功能
-a 查詢所有套件
-c 只列出組態配置文件,本參數需配合"-l"參數使用
-d 只列出文本文件,本參數需配合"-l"參數使用
-e【套件檔】 刪除指定的套件
-f【文件】+ 查詢擁有指定文件的套件
-h 套件安裝時列出標記
-i 顯示套件的相關信息
-i【套件檔】 安裝指定的套件檔
-l 顯示套件的文件列表
-p【套件檔】+ 查詢指定的RPM套件檔
-q 使用詢問模式,當遇到任何問題時,rpm指令會先詢問用戶
-R 顯示套件的關聯性信息
-s 顯示文件狀態,本參數需配合"-l"參數使用
-U【套件檔】 升級指定的套件檔
-v 顯示指令執行過程
-vv 詳細顯示指令執行過程,便於排錯

示例:
首先找到目標rpm包,然後利用 -i 命令安裝該目標軟件

[root@localhost x86_64]# ls
myhello-1.0-0.el7.x86_64.rpm
[root@localhost x86_64]# rpm -i myhello-1.0-0.el7.x86_64.rpm

通過 -ql 組合命令產看軟件安裝情況,最後用 -e 命令卸載

[root@localhost x86_64]# rpm -ql myhello
/usr/bin/myhello
[root@localhost x86_64]# rpm -e myhello
[root@localhost x86_64]# rpm -ql myhello
package myhello is not installed
[root@localhost x86_64]# 

圖示:
在這裏插入圖片描述

rpm包製作流程

寫目標腳本

將腳本代碼書寫如下:

  1 #!/usr/bin/python3
  2 import requests
  3 import time
  4 url = ['https://blog.csdn.net/qq_42452450/article/details/104617518','https://blog.csdn.net/qq_42452450/article/details    /104719646']    #訪問鏈接可以多個
  5 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3    683.103 Safari/537.36'}
  6 num = 0   #定義刷取次數
  7 countUrl = len(url)   #獲取鏈接數量
  8 while num < 100:
  9     try:
 10         for i in range(countUrl):   #按照鏈接數量訪問
 11             response = requests.get(url[i], headers=headers)
 12             if response.status_code == 200:
 13                 num = num + 1 
 14                 print('成功訪問 ' + str(num), '次')
 15         time.sleep(60)   #由於網站cookie針對同一限制需要隔一段時間(60s)                                                                                                 
 16     except Exception:  
 17         print('訪問失敗請稍後!') 
 18         time.sleep(60)

腳本書寫完畢可以利用 pyinstall -F命令編譯運行,也可以利用chmod u+x增加執行權限運行(編譯運行可執行文件爲爲二進制文件且代碼不可見,增加權限執行爲普通可執行文件且代碼可見)
注:如果運行出現requests模塊未安裝問題請點擊下列鏈接查看https://blog.csdn.net/qq_42452450/article/details/104781623

rpm製作前的準備工作

軟件準備

請利用下列命令安裝下列軟件:

命令 軟件功能
pip3 install pyinstaller 編譯python程序
yum install rpmdevtools 創建rpm製作空間的工具軟件
yum install rpm-bulid 創建rpm包軟件
腳本編譯

首先利用pyinstaller編譯python文件

[root@localhost practicec]# ls
myhello
[root@localhost practicec]# pyinstaller -F myhello 
794 INFO: PyInstaller: 3.6
794 INFO: Python: 3.6.8
814 INFO: Platform: Linux-3.10.0-1062.12.1.el7.x86_64-x86_64-with-centos-7.7.1908-Core
816 INFO: wrote /root/practicec/myhello.spec
820 INFO: UPX is not available.
840 INFO: Extending PYTHONPATH with paths
['/root/practicec', '/root/practicec']
841 INFO: checking Analysis
841 INFO: Building Analysis because Analysis-00.toc is non existent
841 INFO: Initializing module dependency graph...
882 INFO: Caching module graph hooks...
。。。。。。
17458 INFO: Appending archive to ELF section in EXE /root/practicec/dist/myhello
17648 INFO: Building EXE from EXE-00.toc completed successfully.
[root@localhost practicec]# ls
build  dist  myhello  myhello.spec
[root@localhost practicec]# cd dist/
[root@localhost dist]# ls
myhello
[root@localhost dist]# 

編譯後會在原目錄下生成許多附屬文件,編譯後的二進制文件就在disk目錄下

然後我們將編譯後的文件打包備用

[root@localhost practicec]# cd dist/
[root@localhost dist]# ls
myhello
[root@localhost dist]
rpm軟件包製作

首先利用rpmdev-setuptree命令創建rpm製作空間,創作空間就會在用戶home目錄下產生(rpmbuild)

[root@localhost dist]# rpmdev-setuptree 
[root@localhost dist]# cd ~
[root@localhost ~]# ls
anaconda-ks.cfg  get-pip.py  get-pip.py.1  practicec  rpmbuild  Shell  test
[root@localhost ~]# 

進入到rpmbuild目錄下,將剛剛打包好的 . tar文件移動到rpmbuild/SOUECE目錄下

[root@localhost ~]# cd rpmbuild/
[root@localhost rpmbuild]# ls
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
[root@localhost rpmbuild]# cd SOURCES/
root@localhost SOURCES]# mv ../../practicec/dist/myhello.tar ./
[root@localhost SOURCES]# ls
myhello.tar
[root@localhost SOURCES]# 

進入到rpmbuild/SPECS目錄下,創建myhelllo.spec文件

[root@localhost ~]# cd rpmbuild/
[root@localhost rpmbuild]# ls
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
[root@localhost rpmbuild]# cd SPECS/
[root@localhost SPECS]# touch myhello.spec
[root@localhost SPECS]# ls
myhello.spec

在myhello.spec文件裏寫入下列代碼:

  1 Name:myhello
  2 Version:1.0
  3 Release:0%{?dist}
  4 Summary: myhello
  5 Group:myhello
  6 License:GPL
  7 Source0:myhello.tar
  8 BuildRoot:%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
  9 %description -l zh_CN
 10 "this is my first build rpm about myhello"
 11 %prep
 12 echo "hello world!"
 13 %setup -c -n myhello
 14 %install
 15 mkdir -p %{buildroot}/%{_usr}/bin
 16 install myhello %{buildroot}/%{_usr}/bin/myhello
 17 %files
 18 %doc
 19 /%{_usr}/bin/myhello

圖示:
在這裏插入圖片描述
結束了上面的準備工作就可以將軟件打包成rpm包

[root@localhost rpmbuild]# ls
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
[root@localhost rpmbuild]# cd SPECS/
[root@localhost SPECS]# ls
myhello.spec
[root@localhost SPECS]# rpmbuild -ba myhello.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.0B9fPK
+ umask 022
+ cd /root/rpmbuild/BUILD
+ echo 'hello world!'
hello world!
+ cd /root/rpmbuild/BUILD
+ rm -rf myhello
+ /usr/bin/mkdir -p myhello
+ cd myhello
+ /usr/bin/tar -xvvf /root/rpmbuild/SOURCES/myhello.tar
-rwxr-xr-x root/root   7209432 2020-03-15 05:17 myhello
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.xpvVac
+ umask 022
+ cd /root/rpmbuild/BUILD
+ '[' /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64 '!=' / ']'
+ rm -rf /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64
++ dirname /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64
+ mkdir -p /root/rpmbuild/BUILDROOT
+ mkdir /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64
+ cd myhello
+ mkdir -p /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64//usr/bin
+ install myhello /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64//usr/bin/myhello
+ '[' '%{buildarch}' = noarch ']'
+ QA_CHECK_RPATHS=1
+ case "${QA_CHECK_RPATHS:-}" in
+ /usr/lib/rpm/check-rpaths
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /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: myhello-1.0-0.el7.x86_64
Provides: myhello = 1.0-0.el7 myhello(x86-64) = 1.0-0.el7
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libz.so.1()(64bit) rtld(GNU_HASH)
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64
Wrote: /root/rpmbuild/SRPMS/myhello-1.0-0.el7.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/myhello-1.0-0.el7.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.ZrqouK
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd myhello
+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/myhello-1.0-0.el7.x86_64
+ exit 0

圖示:
在這裏插入圖片描述
利用rpm命令安裝剛剛創建的包檢驗成果

[root@localhost SPECS]# cd ..
[root@localhost rpmbuild]# ls
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
[root@localhost rpmbuild]# cd RPMS/
[root@localhost RPMS]# ls
x86_64
[root@localhost RPMS]# cd x86_64/
[root@localhost x86_64]# ls
myhello-1.0-0.el7.x86_64.rpm
[root@localhost x86_64]# rpm -i myhello-1.0-0.el7.x86_64.rpm 
[root@localhost x86_64]# rpm -ql myhello
/usr/bin/myhello
[root@localhost x86_64]# 

安裝完成後嘗試運行

[root@localhost x86_64]# myhello 
成功訪問1 次
成功訪問2 次
成功訪問3 次
成功訪問4 次
成功訪問5 次
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章