1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Go 程序打成 rpm 包,也太簡單了

        共 2637字,需瀏覽 6分鐘

         ·

        2022-12-22 00:03

        # 1. 環(huán)境準備

        首先是 rpmbuild 的相關(guān)依賴,無論是什么語言寫的程序,只要是打包成 rpm 包,就都需要這些

              yum?install?-y?gcc?make?rpm-build?redhat-rpm-config

        rpmbuild 的使用,需要你寫不少的配置,非常繁瑣,有研究過的人自然知道其中的淚。

        但大多數(shù)情況下,一個簡單的 rpm 包可能就只是執(zhí)行一個二進制文件而已,完全沒有去花費大量的時間去系統(tǒng)學(xué)習(xí)它們。

        于是乎,有人就編寫了一個開源工具 go-bin-rpm,用它可以很方便的將二進制文件打包成 rpm 包。

        go-bin-rpm 的作者提供了多種安裝方式

        個人認為比較方便的是下面這條命令

              wget?-O?-?https://raw.githubusercontent.com/mh-cbon/latest/master/bintray.sh?\
        |?GH=mh-cbon/go-bin-rpm?sh?-xe

        執(zhí)行完成后,可以使用 --version 命令查看是否安裝成功

              $?go-bin-rpm?--version
        go-bin-rpm?version?1.0.0

        # 2. 配置文件

        go-bin-rpm 的配置文件是 rpm.json ,當(dāng)然你也可以用其他文件名,我這里直接使用默認的,這樣后面打包時就不用指定配置文件的名字。

        rpm.json 的內(nèi)容相當(dāng)精簡,且直觀易懂,模板如下

              {
        ??"name":?"you-service-name",??#?rpm?包名稱
        ??"version":?"0.0.1",
        ??"release":?"20221110",
        ??"arch":?"x86_64",
        ??"summary":?"",
        ??"description":?"",
        ??"license":?"iswbm.com",
        ??"url":?"https://gtihub.com/iswbm/!name!",?#?!name!?相當(dāng)于變量,會取前面?rpm?包名稱
        ??"files":?[
        ????{
        ??????"from":?"./bin/!name!",
        ??????"to":?"/usr/local/!name!/",
        ??????"base":?"",
        ??????"type":?""
        ????},
        ????{
        ??????"from":?"./!name!.service",
        ??????"to":?"/usr/lib/systemd/system/",
        ??????"base":?"",
        ??????"type":?""
        ????}
        ??]
        }

        如果你的 rpm 安裝后是以 service 運行的,那 files 要包含如下幾項內(nèi)容:

        1. 二進制文件

        2. service 文件

        3. 配置文件(如果需要的話)

        其中 service 文件的模板,這邊也給出來

              [Unit]
        Description=
        After=syslog.target?network.target

        [Service]

        Environment=key=value
        Type=simple
        NotifyAccess=all
        TimeoutStartSec=0
        Restart=always
        User=root
        ExecStart=/usr/local/xxxx/bin/xxxx

        [Install]

        WantedBy=multi-user.target

        一切準備好了,就可以使用如下命令

              #?VERSION?和?RELEASE?請對應(yīng)替換
        go-bin-rpm?generate?-o?rpms/xxxx-$(VERSION)-$(RELEASE).rpm

        如果在不同的平臺或系統(tǒng)有不同的二進制,則可以準備多個 rpm.json,然后在打包時,使用 -f rpm.json 來指定配置文件。

        # 3. 使用 Makefile

        go-bin-rpm 的命令還是比較長,我習(xí)慣寫一個 Makefile 來方便編譯

              VERSION?=?1.0.0
        RELEASE?=?$(shell?date?+"%Y%m%d")

        .PHONY:?build-go
        build-go:
        ????go?build?-o?./bin/hello?.

        .PHONY:?build
        build:?build-go
        ????sed?-i?"s/VERSION/$(VERSION)/g"?rpm.json
        ????sed?-i?"s/RELEASE/$(RELEASE)/g"?rpm.json
        ????mkdir?-p?rpms
        ????go-bin-rpm?generate?-o?rpms/hellp-$(VERSION)-$(RELEASE).rpm

        后面只要使用 make build 就可以直接一步實現(xiàn) 編譯 + 打包 ,使用上更加順手。



        推薦閱讀


        福利
        我為大家整理了一份 從入門到進階的Go學(xué)習(xí)資料禮包 ,包含學(xué)習(xí)建議:入門看什么,進階看什么。 關(guān)注公眾號 「polarisxu」,回復(fù)? ebook ?獲??;還可以回復(fù)「進群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。


        瀏覽 59
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产不卡视频在线观看 | 国产福利在线导航 | 国产美女做爱 | 久久久久三级 | 丝袜二区 | 91久久人澡人妻人人澡人人爽 | 91精品国产乱码久久久久 | 搡的我好爽视频免费观看野战 | 噜噜噜私人影院 | 国产精品天天爽视频 |