好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 創建RPM包的同時構建Docker鏡像的方法

創建RPM包的同時構建Docker鏡像的方法

熱門標簽:地圖標注用小紅旗 成都人工外呼系統平臺 外呼系統工作推進 索契地圖標注app 電話外呼系統線路哪家公司做得好 地圖標注員項目 免費高德地圖標注 巴東單位怎么做地圖標注 儋州電銷機器人廠家

RPM(Red Hat Package Manager)是用于 Linux 分發版的最常見的軟件包管理器。因為它允許分發已編譯的軟件,所以用戶只用一個命令就可以安裝軟件。而RPM包的構建相當繁瑣,并且對環境的要求比較高, 本文作者介紹了如何借助Docker來構建可以適用多個平臺的RPM包。

在一個內部項目中,我一直在思考如何通過非CI工具/流程生成RPM包,我想手動生成RPM包,這樣我可以測試它們是否能正常安裝,并用于正常的冒煙測試(譯者注:冒煙測試就是在每日構建完成后,對系統的基本功能進行簡單的測試。這種測試強調功能的覆蓋率,而不對功能的正確性進行驗證)。

在我們的CI流程中,Docker算是個全能手,所以我也在想能否將Docker鏡像和RPM結合起來。理想的情況下,讓RPM與Docker集成, 這樣,創建RPM包的過程其實就是在構建一個Docker鏡像。基本上,RPM包的%prep部分的構建可以在一個特殊的Docker鏡像中快速完成,然 后將生成的RPM包返回給主機。

這種方式的的優點在于,你的RPM包是在一個相對封閉且可再生的環境中構建的,所以你可以快速的為CentOS、Fedora、RHEL等其它系統構建RPM包。

我相信還有其它的一些變通方法也可以完成這樣的工作,比如chroot之類的。但如果在RPM中內建這種打包機制(通過chroot/Docker或者別的容器技術抽象而來的系統來完成打包工作)的話,我想會更好。

由于我的項目還沒有完成,所以我只是對我的想法進行了驗證:簡單構建一個包含依賴的鏡像。

這是一個使用PBR生成版本 的Python項目。 首先我在build目錄中生成一個tarball,然后得到生成的版本號,緊接著修改spec文件中的版本號,然后開始用新的tar包和spec文件構建 鏡像。最后運行鏡像,并掛載卷(Volume)到本地目錄。當運行容器中的start.sh腳本之后,鏡像就運行起來了。

start.sh相當簡單。 它構建好RPM包后,以root身份把它拷貝到卷目錄下, 還可以從主機上將它拷貝到output目錄。我沒有將它拷貝或者說更新到類似swift之類的對象存儲系統,因為我還要在CI中使用它,所以就使用本地文件拷貝了。

在SPECS/project.spec以及 SOURCES/* 是標準RPM包需要的spec文件,源文件和patch文件。需要做的唯一一件事是定義%define_version宏,并在spec文件中使用它。下面是我的一些腳本。

主腳本build.sh。 可以從CI中運行。


復制代碼
代碼如下:
#!/bin/bash
set -exf
PROJECT=myproject/p> p>CURDIR=$(dirname $(readlink -f $0))
TOPDIR=$(git rev-parse --show-topklevel 2>/dev/null)/p> p>rm -rf ${CURDIR}/.build/rpm
mkdir -p ${CURDIR}/.build/rpm/{BUILD,SRPMS,SPECS,RPMS/noarch}
cp -r ${CURDIR}/SOURCES ${CURDIR}/.build/rpm/p> p>pushd ${TOPDIR} >/dev/null
python setup.py sdist --dist-dir ${CURDIR}/.build/rpm/SOURCES/
SALADIER_VERSION=$(sed -n '/^Version/ { s/.* //; p}' ${PROJECT}.egg-info/PKG-INFO)
popd >/dev/null/p> p>sed -e "s/%define _version.*/%define _version ${SALADIER_VERSION}/" ${CURDIR}/SPECS/${MYROJECT}.spec > \
${CURDIR}/.build/rpm/SPECS/${MYPROJECT}.spec/p> p>docker build -t chmouel/buildrpm ${CURDIR}
docker run -v $CURDIR/.build:/data -it chmouel/buildrpm/p> p>if [[ -n ${ARTIFACT_DIR} ]];then
rm -rf ${ARTIFACT_DIR}/rpm
cp -a ${CURDIR}/.build/output ${ARTIFACT_DIR}/rpm
fi

DockerFile,為Docker 緩存做了一些優化:


復制代碼
代碼如下:
FROM fedora:21
MAINTAINER Chmouel Boudjnah chmouel@enovance.com>/p> p>RUN yum -y groupinstall 'Development Tools'
RUN yum -y install fedora-packager
RUN yum -y install yum-utils/p> p>RUN yum -y install sudo
RUN sed -i.bak -n -e '/^Defaults.*requiretty/ { s/^/# /;};/^%wheel.*ALL$/ { s/^/# / ;} ;/^#.*wheel.*NOPASSWD/ { s/^#[ ]*//;};p' /etc/sudoers/p> p>RUN yum install -y https://rdo.fedorapeople.org/rdo-release.rpm/p> p># This is an optimisation for caching, since using the auto generated one will
# make docker always run the builddep steps since new file
ADD SPECS/project.spec /tmp/
RUN yum-builddep -y /tmp/project.spec/p> p>ADD bin/start.sh /start.sh/p> p>RUN useradd -s /bin/bash -G adm,wheel,systemd-journal -m rpm/p> p>WORKDIR /home/rpm
CMD /start.sh/p> p>ADD .build/rpm/ /home/rpm/rpmbuild/
RUN chown -R rpm: /home/rpm/p> p>USER rpm

以及從容器中運行的start.sh腳本:


復制代碼
代碼如下:
#!/bin/bash
# script run inside the container
rpmbuild -ba rpmbuild/SPECS/project.spec || exit 1/p> p>[[ -d /data ]] || exit 0/p> p>sudo rm -rf /data/output
sudo cp -a rpmbuild/RPMS/noarch /data/output

腳本可能無法直接在你的環境中使用,但至少能讓你了解這個idea。

標簽:鶴壁 長春 鄂州 儋州 安康 茂名 江蘇 龍巖

巨人網絡通訊聲明:本文標題《創建RPM包的同時構建Docker鏡像的方法》,本文關鍵詞  創建,RPM,包,的,同時,構建,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《創建RPM包的同時構建Docker鏡像的方法》相關的同類信息!
  • 本頁收集關于創建RPM包的同時構建Docker鏡像的方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 哪里可以看黄色播放免费| 性巴克下载| 精品无人国产偷自产在线| 欧美日韩一区二区视频免费看| 男人撕开奶罩揉吮奶头GIF| 一区精品在线| 午夜天堂ww无码亚洲精| 白嫩美女亚洲日韩在线| 韩国年轻漂亮女教师6| 英语今天晚上让你桶个够| 国产黄色视屏| 聊斋艳谭2之狂女色情| PANS国产大尺度私密视频| 精品一区二区三| 护士双乳太丰满特别服务| 91短视频在线高清hd| 天堂网www在线资源| 后进圆润翘臀极品大屁股小说 | 亚洲AV秘?一区二区柚木提娜| 女人大乳被?免费看JaPan| 日本亚洲中午字幕乱码| 揉我奶头?啊?嗯高潮gif| 寡妇高潮一级毛片免费观看A片| 操的美女嗷嗷叫| 黄色网址免费在线播放| 手机韩剧网| 77777五月色婷婷丁香视频| 免费国产看片软件| 超污视频在线看| 国产精品老牛影视| 欧美胖乎乎的肥妇BBW| 九九春色AV人妻无码| 国产老头和美女在线观看| 在线看一级片| 麻豆果冻传媒新剧国产在线观看免费| ass老妇高潮pics| 国产美女一级毛片久久| 高h全肉图| 最近中文字幕免费mv视频7| 骚bb和大jj| 中文字幕欧美激情一区|