一、服务端搭建yum仓库:
这里选择的是nginx 部署的方式(配置文件)
1、安装nginx
yum install -y nginx
systemctl enable --now nginx
2、编写配置文件
cat /etc/nginx/conf.d/yum.openjiajun.com.conf
server {
listen 80;
server_name yum.openjiajun.com;
root /yum/centos7;
access_log /var/log/nginx/yum.access.log main;
error_log /var/log/nginx/yum.error.log notice;
autoindex on; #开启nginx目录浏览功能
autoindex_exact_size off; #文件大小从KB开始显示
autoindex_localtime on; #显示文件修改时间为服务器本地时间
location / {
index index.html;
}
}
#重启nginx,加载配置文件
nginx -t
nginx -s reload
3、初始化yum 仓库的目录
#安装 createrepo 软件,用于生成 yum 仓库数据库的软件
yum -y install createrepo yum-utils
#创建目录并生成repodata索引
mkdir -p /yum/centos7 && cd /yum/centos7
createrepo -pdo /yum/centos7 /yum/centos7
# 每加入一个rpm包就要更新一下
createrepo --update /yum/centos7/
#配置yum缓存
sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
#配置自动推送rpm包
简略版
cat /server/scripts/sync.sh
#!/bin/bash
source /etc/profile #防止定时任务出问题
rsync -av $(find /var/cache/yum/x86_64/7/ -type f -name "*.rpm") /yum/centos7/
crontab -l
#1. sync time
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com &>/dev/null
#2.基于定时任务的增量推送rpm包
*/5 * * * * /bin/bash /server/scripts/sync.sh &>>/dev/null
#自动化优化-思路(留坑)
sersync + rsync
sersync或inotify 监控 /var/cache/yum/x86_64/7/ 目录,并实时同步(其实不太用的到,rpm包没有实时同步的必要性)
4、访问测试
http://yum.openjiajun.com
二、fpm定制rpm包部分
0.两种方法
#可以直接下载的时候就下载新版的ruby
1、下载 Ruby3.3 并安装(这个方法下载好慢我用的是下面的先在下载在升级)
wget https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.gz
#这个下载非常慢我用的是第二种方法
tar -zxvf ruby-3.3.0.tar.gz
cd ruby-3.3.0
./configure
make
make install
查看版本
ruby -v
2、服务端:安装ruby环境和gem,并编译安装cmatrix
yum -y install ruby rubygems ruby-devel
#gem命令是从rubygem仓库安装软件类似yum从yum仓库安装软件:
#查看当前源
gem source list
*** CURRENT SOURCES ***
http://rubygems.org/
#修改ruby源
#添加国内源
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources -a http://mirrors.tencent.com/rubygems/
#移除国外源
gem sources --remove https://rubygems.org/
#安装FPM工具
gem install fpm
#报错:ERROR: Error installing fpm:
dotenv requires Ruby version >= 3.0.
#原因:yum默认安装的是2.0版本 如果需要升级更高版本 可以使用以下方案升级(可直接复制进脚本执行)
#解决方法:
ruby -v #查看当前版本
gem sources -l
*** CURRENT SOURCES ***
http://mirrors.aliyun.com/rubygems/
#安装RAM
RVM(Ruby Version Manager )是一款RAM的命令行工具,可以使用RVM轻松安装,管理Ruby版本。RVM包含了Ruby的版本管理和Gem库管理(gemset)
#可以使用如下命令进行安装RAM:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB (失效了)
或
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
#温馨提示:上面的 RAM安装直接用第二个
curl -sSL https://get.rvm.io | bash -s stable
更新配置文件,使其立马生效:
source /etc/profile.d/rvm.sh
查看RVM版本信息,如果可以代表安装成功
rvm -v
接下来查看Ruby版本
rvm list known
安装Ruby
yum install -y readline-devel-6.2-11.el7.x86_64 libffi-devel-3.0.13-19.el7.x86_64 ncurses-devel-5.9-14.20130511.el7_4.x86_64 sqlite-devel-3.7.17-8.el7_7.1.x86_64
rvm install 3.1.2
#这里等了一会,这个时候可用去编译安装cmatrix
rvm docs generate-ri
#等待
验证
~]# ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
安装fpm命令(ps:终于到了这一步):
gem install fpm
#编译安装cmatrix
1)上传cmatrix 压缩包
rz -E
#压缩包可以去http://yum.openjiajun.com/ 下载
2)解压
tar xf cmatrix-1.2a.tar.gz -C /tmp
/tmp]# ls
cmatrix-1.2a oldboy.txt cmatrix-1.2a.tar.gz sysinfo.txt
3)编译安装
cd cmatrix-1.2a
./configure --prefix=/application/cmatrix-1.2a
make
make install
4)查看编译安装后的命令
/tmp/cmatrix-1.2a]#ls /application/cmatrix-1.2a/bin/
cmatrix
5)运行
/application/cmatrix-1.2a/bin/cmatrix
#打包cmatrix
1)编写打包脚本
/application]# ln -s /application/cmatrix-1.2a/ cmatrix
/application/cmatrix]# cat cmatrix.rpm.sh
#!/bin/bash
ln -s ./cmatrix-1.2a/ cmatrix
cp cmatrix/bin/* /usr/local/bin
2)打包
/application]#fpm -s dir -t rpm -n cmatrix -v 1.2a --post-install \
./cmatrix/cmatrix.rpm.sh .
Created package {:path=>"cmatrix-1.2a-1.x86_64.rpm"} #说明创建成功
3)查看包内内容
rpm -qlp cmatrix-1.2a-1.x86_64.rpm
#fpm 打包报错:
1.Need executable ‘rpmbuild’ to convert dir to rpm {:level=>:error}
#解决方法:
yum install -y rpm-build
#fpm 常用参数
-s:指定源类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字
-v:指定包的版本号
-C:指定打包的相对路径
-d:指定依赖于哪些包
-f:第二次包时目录下如果有同名安装包存在,则覆盖它
-p:输出的安装包的目录,不想放在当前目录下就需要指定
--post-install:软件包安装完成之后所要运行的脚本;同--offer-install
--pre-install:软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove
参考链接:腾讯云centos7、centos8、opencloudos8.x ruby 3.x环境配置-腾讯云开发者社区-腾讯云
参考链接: yum仓库搭建及定制rpm包_yum包制作-CSDN博客
三、测试部分
服务端:
#把rpm包移动到 yum 仓库目录
/application]# mv cmatrix-1.2a-1.x86_64.rpm /yum/centos7/
打包后移动到目录发现有一下rpm包
客服端:
#注释掉所有的yum源
gzip /etc/yum.repos.d/*.repo
#编写repo文件
cat /etc/yum.repos.d/cmatrix.repo
[cmatrix]
name=this is built by myself
baseurl=http://yum.openjiajun.com/
enabled=1
gpgcheck=0
------------------------------
#gpgcheck=1 不关闭 报错
Package cmatrix-1.2a.rpm is not signed
下载不了
yum repolist #如下
yum list
...
yum install -y cmatrix.x86_64
报错
Package cmatrix-1.2a-1.x86_64.rpm is not signed
解决方法:
/etc/yum.conf 下的 gpgcheck=1 为 gpgcheck=0
安装成功
cmatrix
四、接下来就可以定制tengine 和 mysql 等 软件的 rpm 包,方便以后使用(留坑)
五、未解决故障(求助)
远程yum 仓库更新了 rpm包后,发现本地不会同步
createrepo update 未生效 ??