一、概念

1.rpm是什么?在帮助文档里我们可以看到,rpm的名字是rpm package manage 的缩写, 从名字上看就可以知道rpm就是一个包管理工具。简单说rpm包就是把一些程序编译成二进制,和一些配置文件以及帮助文档等一些程序所依赖库打包在一起,这样形成的一个包。rpm大大的简化用户在Linux上安装软件的复杂度。

2.rpm仓库是什么?从字面理解,仓库就是集中存放东西的地方,同样rpm仓库就是集中存放rpm包的一个地方。这里说的‘地方’就是服务器。把很多rpm包放在一个特定的服务器的特定目录里, 再由比如http、nfs、ftp、file这些协议是用来提供给其他服务器下载rpm包的服务器,我们把这样的服务器称为rpm仓库服务器。

3.yum是什么?yum是Yellowdog Updater Modified 的缩写,翻译过来就是Yellowdog 更新修改,完全没有搞懂这个翻译到底是什么意思,查下百度百科吧!yum是一个在Fedora、Redhat以及CentOS中的shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自下载rpm包并且安装,可以自动处理包依赖关系,并且能够一次安装所有所依赖的软件包,无需频繁的一次次下载安装。看了百度的解释,我们应该知道yum是什么了吧!简单说就是基于rpm包的前端管理工具,它可以帮我们解决包与包的依赖关系。

4.yum的工作机制。yum是c/s架构的工作机制,服务端提供rpm仓库,客户端根据服务端提供的仓库,通过特定协议去服务端下载所需要的包来进行安装。第一次去服务端,它会把服务端的仓库元数据缓存到本地,这样就不需要每次下载都去服务端查询。所谓仓库的元数据就是记录着该仓库有哪些包,包名,包与包的依赖关系等一些数据。每次要装包的时候,yum会去看看本地缓存的元数据,有没有需要的包的信息,如果有,他们会把相应的包以及所依赖的包一并去服务端下载下来,一并安装。

二、仓库的搭建

了解了以上的基本概念,下面我们开始来搭建rpm仓库吧

1.创建目录结构

  1. [root@test ~]$mkdir -pv /rpm/centos/{,}/os/x86_64
  2. mkdir: created directory `/rpm'
  3. mkdir: created directory `/rpm/centos'
  4. mkdir: created directory `/rpm/centos/'
  5. mkdir: created directory `/rpm/centos//os'
  6. mkdir: created directory `/rpm/centos//os/x86_64'
  7. mkdir: created directory `/rpm/centos/'
  8. mkdir: created directory `/rpm/centos//os'
  9. mkdir: created directory `/rpm/centos//os/x86_64'

说明:本次实验是在centos6或centos7平台架构是x86_64的系统上来创建的目录

2.上传包

  1. [root@test ~]$cd /rpm/centos//os/x86_64/
  2. [root@test x86_64]$pwd
  3. /rpm/centos//os/x86_64
  4. [root@test x86_64]$mv /root/samba-3.6.-.el6.x86_64.rpm /root/vsftpd-2.2.-.el6.x86_64.rpm .
  5. [root@test x86_64]$cd ../../..//os/x86_64/
  6. [root@test x86_64]$pwd
  7. /rpm/centos//os/x86_64
  8. [root@test x86_64]$mv /root/tomcat-7.0.-.el7.noarch.rpm /root/samba-4.6.-.el7.x86_64.rpm .

说明: 上传了4个包,在/rpm/centos/6/os/x86_64/ 放了samba-3.6.23-41.el6.x86_64.rpm和vsftpd-2.2.2-24.el6.x86_64.rpm两个包,在/rpm/centos/7/os/x86_64放了samba-4.6.2-8.el7.x86_64.rpm和tomcat-7.0.76-2.el7.noarch.rpm两个包,本人先是把包传到服务器,然后移动到相应的目录里。

3.创建元数据

首先要检查自己的服务器有没有装createrepo这个工具

  1. [root@test x86_64]$rpm -q createrepo
  2. package createrepo is not installed

如果没有就安装

  1. [root@test x86_64]$yum install -y createrepo

创建仓库元数据

  1. [root@test ~]$createrepo /rpm/centos//os/x86_64/
  2. Spawning worker with pkgs
  3. Workers Finished
  4. Gathering worker results
  5.  
  6. Saving Primary metadata
  7. Saving file lists metadata
  8. Saving other metadata
  9. Generating sqlite DBs
  10. Sqlite DBs complete
  11. [root@test ~]$createrepo /rpm/centos//os/x86_64/
  12. Spawning worker with pkgs
  13. Workers Finished
  14. Gathering worker results
  15.  
  16. Saving Primary metadata
  17. Saving file lists metadata
  18. Saving other metadata
  19. Generating sqlite DBs
  20. Sqlite DBs complete
  21. [root@test ~]$ll /rpm/centos//os/x86_64/
  22. total
  23. drwxr-xr-x root root Sep : repodata
  24. -rw-r--r--+ root root Sep : samba-3.6.-.el6.x86_64.rpm
  25. -rw-r--r--+ root root Sep : vsftpd-2.2.-.el6.x86_64.rpm
  26. [root@test ~]$ll /rpm/centos//os/x86_64/
  27. total
  28. drwxr-xr-x root root Sep : repodata
  29. -rw-r--r--+ root root Sep : samba-4.6.-.el7.x86_64.rpm
  30. -rw-r--r--+ root root Sep : tomcat-7.0.-.el7.noarch.rpm

说明:可以看到在两个仓库下各自生成了一个repodata的目录,这里说一下,要确定仓库的路径就是要看repodata这个目录的父目录是什么,repodata目录所在的父目录就是仓库的路径。

4.在客户端编写repo配置文件

  1. [root@test ~]$cd /etc/yum.repos.d/
  2. [root@test yum.repos.d]$ls
  3. CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo epel.repo epel-testing.repo
  4. [root@test yum.repos.d]$mkdir repo_bak
  5. [root@test yum.repos.d]$mv *.repo repo_bak
  6. [root@test yum.repos.d]$ls
  7. repo_bak

说明:本人采用的是客户端服务端在同一台设备上,为了不受其他repo配置文件的干扰,我们把以前的repo文件全部移动到另外一个备份目录里,然后在/etc/yum.repo.d/ 下创建一个repo文件。

  1. [my_base]
  2. name=this is test repo
  3. baseurl=file:///rpm/centos/$releasever/os/$basearch
  4. gpgcheck=

说明:创建一个.repo的文件,将以上内容添加到该文件,解释一下这个文件的内容,第一个中括号里表示仓库的名字,通常这个名字可以顺便起,一般不建议里面带空格,name=表示仓库的简要说明,baseurl= 表示仓库的路径,也就是repodata所在的目录的父目录,gpgcheck=0表示不检查包的gpg验证,若gpgcheck=1表示要验证。添加以上内容我们客户端就可以根据以上定义的baseurl去服务器仓库里找相应的包。

5.在客户端清除yum缓存,查看仓库列表

  1. [root@test yum.repos.d]$yum clean all
  2. Loaded plugins: fastestmirror, security
  3. Cleaning repos: my_base
  4. Cleaning up Everything
  5. Cleaning up list of fastest mirrors
  6. [root@test yum.repos.d]$yum repolist
  7. Loaded plugins: fastestmirror, security
  8. Determining fastest mirrors
  9. my_base | 2.9 kB : ...
  10. my_base/primary_db | 6.0 kB : ...
  11. repo id repo name status
  12. my_base this is test repo
  13. repolist:

说明:可以看到我们刚才配置的仓库信息,repo id 就是我们刚才在repo文件中写的,也可看到里面有2个包。看到以上信息就表示rpm仓库在客户端上的配置成功了。

6.装包验证

  1. [root@test yum.repos.d]$yum install vsftpd
  2. Loaded plugins: fastestmirror, security
  3. Setting up Install Process
  4. Loading mirror speeds from cached hostfile
  5. Resolving Dependencies
  6. --> Running transaction check
  7. ---> Package vsftpd.x86_64 :2.2.-.el6 will be installed
  8. --> Finished Dependency Resolution
  9.  
  10. Dependencies Resolved
  11.  
  12. ===================================================================================================================================
  13. Package Arch Version Repository Size
  14. ===================================================================================================================================
  15. Installing:
  16. vsftpd x86_64 2.2.-.el6 my_base k
  17.  
  18. Transaction Summary
  19. ===================================================================================================================================
  20. Install Package(s)
  21.  
  22. Total download size: k
  23. Installed size: k
  24. Is this ok [y/N]: y
  25. Downloading Packages:
  26. Running rpm_check_debug
  27. Running Transaction Test
  28. Transaction Test Succeeded
  29. Running Transaction
  30. Installing : vsftpd-2.2.-.el6.x86_64 /
  31. Verifying : vsftpd-2.2.-.el6.x86_64 /
  32.  
  33. Installed:
  34. vsftpd.x86_64 :2.2.-.el6
  35.  
  36. Complete!

说明:本人以两个包作为例子来演示搭建rpm的过程,可能装这个包还有其他依赖包,但是仓库里面没有其他依赖,可能会出现报错的情况。

以上就是本地搭建repo仓库的过程。

下面我再说下如何搭建网络rpm仓库

1.先安装httpd web服务器

  1. [root@test yum.repos.d]$yum install httpd -y
  2. Loaded plugins: fastestmirror, security
  3. Setting up Install Process
  4. Determining fastest mirrors
  5. * base: mirrors.aliyun.com
  6. * extras: mirrors.aliyun.com
  7. * updates: mirrors.aliyun.com
  8. base | 3.7 kB :
  9. base/primary_db | 4.7 MB :
  10. epel | 5.3 kB :
  11. epel/primary_db | 6.1 MB :
  12. extras | 3.4 kB :
  13. extras/primary_db | kB :
  14. updates | 3.4 kB :
  15. updates/primary_db | 5.7 MB :
  16. Resolving Dependencies
  17. --> Running transaction check
  18. ---> Package httpd.x86_64 :2.2.-.el6.centos will be installed
  19. --> Finished Dependency Resolution
  20.  
  21. Dependencies Resolved
  22.  
  23. ===================================================================================================================================
  24. Package Arch Version Repository Size
  25. ===================================================================================================================================
  26. Installing:
  27. httpd x86_64 2.2.-.el6.centos base k
  28.  
  29. Transaction Summary
  30. ===================================================================================================================================
  31. Install Package(s)
  32.  
  33. Total download size: k
  34. Installed size: 3.0 M
  35. Downloading Packages:
  36. httpd-2.2.-.el6.centos.x86_64.rpm | kB :
  37. Running rpm_check_debug
  38. Running Transaction Test
  39. Transaction Test Succeeded
  40. Running Transaction
  41. Installing : httpd-2.2.-.el6.centos.x86_64 /
  42. Verifying : httpd-2.2.-.el6.centos.x86_64 /
  43.  
  44. Installed:
  45. httpd.x86_64 :2.2.-.el6.centos
  46.  
  47. Complete!

说明:httpd默认工作路径在/var/www/html/ 下,也就是放html网页代码的地方。

2.在httpd 的工作路径下 创建目录结构

  1. [root@test ~]$mkdir -pv /var/www/html/centos/{,}/os/x86_64
  2. mkdir: created directory `/var/www/html/centos'
  3. mkdir: created directory `/var/www/html/centos/'
  4. mkdir: created directory `/var/www/html/centos//os'
  5. mkdir: created directory `/var/www/html/centos//os/x86_64'
  6. mkdir: created directory `/var/www/html/centos/'
  7. mkdir: created directory `/var/www/html/centos//os'
  8. mkdir: created directory `/var/www/html/centos//os/x86_64'

3.挂载安装光盘到相应的位置

  1. [root@test ~]$mount /dev/sr0 /var/www/html/centos//os/x86_64/
  2. mount: block device /dev/sr0 is write-protected, mounting read-only

说明:我这里只挂载了centos6的一个安装光盘,centos7下面的目录也可以使用同样的方式挂载centos7的安装光盘,这里用centos6作为演示。这里还要说一下安装光盘本身就有repodata目录,我们这里就不需要再创建元数据信息。

4.开启httpd

  1. [root@test ~]$/etc/init.d/httpd start
  2. Starting httpd: httpd: apr_sockaddr_info_get() failed for test
  3. httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
  4. [ OK ]

5.客户端配置repo文件

  1. [my_base]
  2. name=this is test repo
  3. baseurl=http://127.0.0.1/centos/$releasever/os/$basearch
  4. gpgcheck=

说明:这里只需要把仓库的路径改成以http的协议方式去获取,当然为了不受其他yum源的影响,本次实验我们也要把其他的repo文件放在一个备份目录。

6.客户端清除yum缓存,并查看仓库列表

  1. [root@test x86_64]$yum clean all
  2. Loaded plugins: fastestmirror, security
  3. Cleaning repos: my_base
  4. Cleaning up Everything
  5. [root@test x86_64]$yum repolist
  6. Loaded plugins: fastestmirror, security
  7. Determining fastest mirrors
  8. my_base | 4.0 kB :
  9. my_base/primary_db | 4.6 MB :
  10. repo id repo name status
  11. my_base this is test repo ,
  12. repolist: ,

说明:可以看到刚才搭建的仓库成功的出现在仓库列表中了。

7.安装一个包,验证仓库

  1. [root@test ~]$yum install java -y
  2. Loaded plugins: fastestmirror, security
  3. Setting up Install Process
  4. Loading mirror speeds from cached hostfile
  5. Resolving Dependencies
  6. --> Running transaction check
  7. ---> Package java-1.8.-openjdk.x86_64 :1.8.0.45-.b13.el6 will be installed
  8. --> Processing Dependency: java-1.8.-openjdk-headless = :1.8.0.45-.b13.el6 for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  9. --> Processing Dependency: xorg-x11-fonts-Type1 for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  10. --> Processing Dependency: libjvm.so(SUNWprivate_1.)(64bit) for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  11. --> Processing Dependency: libjli.so(SUNWprivate_1.)(64bit) for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  12. --> Processing Dependency: libjava.so(SUNWprivate_1.)(64bit) for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  13. --> Processing Dependency: libjli.so()(64bit) for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  14. --> Processing Dependency: libjava.so()(64bit) for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  15. --> Processing Dependency: libgif.so.()(64bit) for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  16. --> Processing Dependency: libawt.so()(64bit) for package: :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64
  17. --> Running transaction check
  18. ---> Package giflib.x86_64 :4.1.-3.1.el6 will be installed
  19. ---> Package java-1.8.-openjdk-headless.x86_64 :1.8.0.45-.b13.el6 will be installed
  20. --> Processing Dependency: tzdata-java >= 2014f- for package: :java-1.8.-openjdk-headless-1.8.0.45-.b13.el6.x86_64
  21. --> Processing Dependency: jpackage-utils for package: :java-1.8.-openjdk-headless-1.8.0.45-.b13.el6.x86_64
  22. ---> Package xorg-x11-fonts-Type1.noarch :7.2-.el6 will be installed
  23. --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.2-.el6.noarch
  24. --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.2-.el6.noarch
  25. --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.2-.el6.noarch
  26. --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.2-.el6.noarch
  27. --> Running transaction check
  28. ---> Package jpackage-utils.noarch :1.7.-3.14.el6 will be installed
  29. ---> Package ttmkfdir.x86_64 :3.0.-32.1.el6 will be installed
  30. ---> Package tzdata-java.noarch :2015e-.el6 will be installed
  31. ---> Package xorg-x11-font-utils.x86_64 :7.2-.el6 will be installed
  32. --> Processing Dependency: libfontenc.so.()(64bit) for package: :xorg-x11-font-utils-7.2-.el6.x86_64
  33. --> Processing Dependency: libXfont.so.()(64bit) for package: :xorg-x11-font-utils-7.2-.el6.x86_64
  34. --> Running transaction check
  35. ---> Package libXfont.x86_64 :1.4.-.el6_6 will be installed
  36. ---> Package libfontenc.x86_64 :1.0.-.el6 will be installed
  37. --> Finished Dependency Resolution
  38.  
  39. Dependencies Resolved
  40.  
  41. ===========================================================================================================================================================================
  42. Package Arch Version Repository Size
  43. ===========================================================================================================================================================================
  44. Installing:
  45. java-1.8.-openjdk x86_64 :1.8.0.45-.b13.el6 my_base k
  46. Installing for dependencies:
  47. giflib x86_64 4.1.-3.1.el6 my_base k
  48. java-1.8.-openjdk-headless x86_64 :1.8.0.45-.b13.el6 my_base M
  49. jpackage-utils noarch 1.7.-3.14.el6 my_base k
  50. libXfont x86_64 1.4.-.el6_6 my_base k
  51. libfontenc x86_64 1.0.-.el6 my_base k
  52. ttmkfdir x86_64 3.0.-32.1.el6 my_base k
  53. tzdata-java noarch 2015e-.el6 my_base k
  54. xorg-x11-font-utils x86_64 :7.2-.el6 my_base k
  55. xorg-x11-fonts-Type1 noarch 7.2-.el6 my_base k
  56.  
  57. Transaction Summary
  58. ===========================================================================================================================================================================
  59. Install Package(s)
  60.  
  61. Total download size: M
  62. Installed size: M
  63. Downloading Packages:
  64. (/): ttmkfdir-3.0.-32.1.el6.x86_64.rpm | kB :
  65. (/): java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64.rpm | kB :
  66. (/): jpackage-utils-1.7.-3.14.el6.noarch.rpm | kB :
  67. (/): tzdata-java-2015e-.el6.noarch.rpm | kB :
  68. (/): java-1.8.-openjdk-headless-1.8.0.45-.b13.el6.x86_64.rpm | MB :
  69. (/): xorg-x11-font-utils-7.2-.el6.x86_64.rpm | kB :
  70. (/): libXfont-1.4.-.el6_6.x86_64.rpm | kB :
  71. (/): xorg-x11-fonts-Type1-7.2-.el6.noarch.rpm | kB :
  72. (/): giflib-4.1.-3.1.el6.x86_64.rpm | kB :
  73. (/): libfontenc-1.0.-.el6.x86_64.rpm | kB :
  74. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  75. Total MB/s | MB :
  76. Running rpm_check_debug
  77. Running Transaction Test
  78. Transaction Test Succeeded
  79. Running Transaction
  80. Installing : libfontenc-1.0.-.el6.x86_64 /
  81. Installing : libXfont-1.4.-.el6_6.x86_64 /
  82. Installing : :xorg-x11-font-utils-7.2-.el6.x86_64 /
  83. Installing : giflib-4.1.-3.1.el6.x86_64 /
  84. Installing : tzdata-java-2015e-.el6.noarch /
  85. Installing : jpackage-utils-1.7.-3.14.el6.noarch /
  86. Installing : :java-1.8.-openjdk-headless-1.8.0.45-.b13.el6.x86_64 /
  87. Installing : ttmkfdir-3.0.-32.1.el6.x86_64 /
  88. Installing : xorg-x11-fonts-Type1-7.2-.el6.noarch /
  89. Installing : :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64 /
  90. Verifying : ttmkfdir-3.0.-32.1.el6.x86_64 /
  91. Verifying : :java-1.8.-openjdk-1.8.0.45-.b13.el6.x86_64 /
  92. Verifying : jpackage-utils-1.7.-3.14.el6.noarch /
  93. Verifying : tzdata-java-2015e-.el6.noarch /
  94. Verifying : :java-1.8.-openjdk-headless-1.8.0.45-.b13.el6.x86_64 /
  95. Verifying : :xorg-x11-font-utils-7.2-.el6.x86_64 /
  96. Verifying : libXfont-1.4.-.el6_6.x86_64 /
  97. Verifying : xorg-x11-fonts-Type1-7.2-.el6.noarch /
  98. Verifying : giflib-4.1.-3.1.el6.x86_64 /
  99. Verifying : libfontenc-1.0.-.el6.x86_64 /
  100.  
  101. Installed:
  102. java-1.8.-openjdk.x86_64 :1.8.0.45-.b13.el6
  103.  
  104. Dependency Installed:
  105. giflib.x86_64 :4.1.-3.1.el6 java-1.8.-openjdk-headless.x86_64 :1.8.0.45-.b13.el6 jpackage-utils.noarch :1.7.-3.14.el6
  106. libXfont.x86_64 :1.4.-.el6_6 libfontenc.x86_64 :1.0.-.el6 ttmkfdir.x86_64 :3.0.-32.1.el6
  107. tzdata-java.noarch :2015e-.el6 xorg-x11-font-utils.x86_64 :7.2-.el6 xorg-x11-fonts-Type1.noarch :7.2-.el6
  108.  
  109. Complete!

到此网络rpm仓库就搭建完毕!!

Linux下rpm仓库搭建的更多相关文章

  1. Linux下RPM包的安装

    Linux下RPM包安装 二进制包(RPM包.系统默认包) RPM安装 rpm -ivh 包全名(查询依赖网址:http://www.rpmfind.net) -i(install):安装 -v(ve ...

  2. Linux下RPM软件包的安装及卸载

    http://os.51cto.com/art/201001/177866.htm 在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装.卸载及管理等操作.RPM 的全称为Redhat P ...

  3. [转]Linux下RPM软件包的安装及卸载 yum操作

    在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装.卸载及管理等操作.RPM 的全称为Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下 ...

  4. linux下rpm包安装、配置和卸载mysql

    WIN10下虚拟机:VMware workstation 12 PRO 安装 # 1.查看系统版本 [root@vm-xiluhua][/home/xiluhua]$ cat /etc/redhat- ...

  5. 64位linux下rpm安装mysql的5.5.55版本

    昨天同事开了个阿里云环境,让我帮他安装mysql数据库,本想着很简单的一件事,结果还是折腾了一番.坑很多,一路趟过,一个接一个,只能硬着头皮冲. 首先是下载压缩包,因为采用了rpm安装方式,所以下载的 ...

  6. Linux下rpm及yum安装jdk

    笔者使用的Linux操作系统为CentOS7,Linux中有三种安装jdk的方式,在这里笔者主要介绍两种方式,即rpm和yum安装及卸载jdk,还有一种是直接从官网下载 tar.gz 压缩文件上传到L ...

  7. linux下rpm包安装、配置和卸载mysq

    l   WIN10下虚拟机:VMware workstation 12 PRO 安装 # 1.查看系统版本 [root@vm-xiluhua][/home/xiluhua]$ cat /etc/red ...

  8. Linux下RPM、tar.gz、DEB格式软件包的区别

      初接解Linux的朋友一定对软件的安装特别头疼,同样都是for Linux,但RPM.tar.gz.DEB包还是有很大区别的,这种区别很有可能使你的安装过程进行不下去.那我们应该下载什么格式的包呢 ...

  9. Linux 下RPM打包制作流程

    原文地址:https://www.cnblogs.com/postgres/p/5726339.html 开始前的准备 安装rpmbuild软件包 yum -y install rpm-build 生 ...

随机推荐

  1. 如何在Linux服务器上部署Mysql

    一.安装mysql 1.通过文件上传工具,将mysql安装包上传到linux服务器上 2.卸载mariadb包,由于系统中存在mariadb包会导致mysql安装时报错mariadb-libs被mys ...

  2. flask 微电影网站

    flask简介 轻量级web应用框架 WSGI工具箱才用Werkzeug 模版引擎则使用Jinja2 Flask使用BSD授权 1.virtualenv的使用 (1)创建虚拟环境:virtualenv ...

  3. 浏览器渗透框架BeEF使用笔记(二)

    0x03 常用模块 1-信息收集 可以收集到例如 浏览器名称版本 浏览器用户版本 插件(包括Java,ActiveX,VBS,Flash……) 窗口大小 1)details面板收集 (2)插件收集信息 ...

  4. 运用第一性原理探寻AI本质

    摘要:使用第一性原理探讨理解AI本质. 文章来源:宜信技术学院|宜信支付结算团队技术分享第二期-支付结算机器学习技术团队负责人 刘创 分享<AI与第一性原理> 分享者:宜信支付结算机器学习 ...

  5. luogu P3380 【模板】二逼平衡树(分块实现)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询 \(k\) 在区间内的排名 查询区间内排名为 \(k\) 的值 修改某一位值上的数值 查询 \(k\ ...

  6. 使用git如何规范地向主线提交代码

    使用git向主干分支合并代码通常采用两种方式:第一种是merge,第二种是利用BeyondCompare等工具进行比对,将差异合并到主干: 通过merge合并代码出现冲突时,并不清楚谁的修改和谁的修改 ...

  7. 张高兴的 .NET Core IoT 入门指南:(五)PWM 信号输出

    什么是 PWM 在解释 PWM 之前首先来了解一下电路中信号的概念,其中包括模拟信号和数字信号.模拟信号是一种连续的信号,与连续函数类似,在图形上表现为一条不间断的连续曲线.数字信号为只能取有限个数值 ...

  8. 中国大学MOOC-数据结构与算法实战 P6 括号匹配 (15 分)

    检查一段C语言代码的小括号( ). 中括号 [ ] 和大括号{ } 是否匹配. 输入格式: 在一行中输入一段C语言代码,长度不超过1000个字符(行末以换行符结束). 输出格式: 第一行输出左括号的数 ...

  9. R的安装

    更新时间:2019.09.23 1. 序言 之前曾经用过一段时间的R(一直忍受着原生R那个超级"简洁"的界面),但是后来重装了系统并且学习了Python,就没有再怎么碰过R了.然而 ...

  10. django-模板之extends(三)

    /book/base.html <!DOCTYPE html> <html lang="en"> <head> <meta charset ...