如何使用我在 Gentoo 中的包管理器從 git 安裝自定義原始碼?
我想從git儲存庫****安裝自定義源,但使用我的包管理器(為 portage 出現)。
背景
我已經使用Sakaki 的教程使用 EFI 安裝了 Gentoo ,所以我已經出現了
dev-vcs/git
。我想要的軟體包用於安裝Canonical 的 Snapd (來自Ars Technica的背景閱讀),它們的說明是:
琴圖
安裝snap-confine.ebuild和snapd.ebuild
‘# 啟用 snapd systemd 服務:
sudo systemctl enable --now snapd.service
嘗試了無效的步驟
試試 1
首先,我嘗試將先決條件 git .ebuilds 添加為儲存庫,方法是將它們放在我的
/etc/portage/repos.conf/
目錄中(兩個單獨的條目)。我將在這裡發布一個作為範例:[zyga-snap-confine] # Snapd build dependency #1 # Maintainer: obscured location = /usr/local/portage/zyga-snap-confine sync-type = git sync-uri = https://github.com/zyga/snap-confine-gentoo.git priority = 60 auto-sync = yes
我同步了儲存庫,
emaint sync --repo zyga-snap-confine
.emerge --search
然後我嘗試通過和找到我想要的包eix
。 沒運氣。它拋出了關於缺少佈局、master = gentoo 條目的錯誤……我意識到缺少元數據,但我寄予厚望。
試試 2
我終於找到瞭如何處理 ebuild 的參考。在官方的Gentoo Wiki以及此處的其他文章(從原始碼安裝 Git、Curl 和 Expat)和此處(如何在 Funtoo/Gentoo 中打包軟體?),我決定:
root@Gentoo ~ # cd /opt root@Gentoo opt # git clone https://github.com/zyga/snap-confine-gentoo.git root@Gentoo opt # cd snap-confine-gentoo root@Gentoo snap-confine-gentoo # ebuild snap-confine-1.0.32.ebuild manifest clean merge
但是,它返回了錯誤:
Appending / to PORTDIR_OVERLAY... !!! Repository 'x-' is missing masters attribute in '/metadata/layout.conf' !!! Set 'masters = gentoo' in this file for future compatibility ebuild: /opt/snap-confine-gentoo/snap-confine-1.0.32.ebuild: does not seem to have a valid PORTDIR structure
首選解決方案
我對 Gentoo 比較陌生,並且是在 Linux 上自學的,我在 Gentoo 論壇中找不到關於 repo 維護的教程(有一個開發人員指南,但它假設有很多知識)。一個理想的答案將提供 cli 方法(我假設使用
git clone
…和./configure
?)以及包管理器版本。即使我必須創建自己的 git 儲存庫來添加缺少的元數據和佈局文件 - 我更願意以這種方式管理 snapd 安裝。
根據上面的@likewhoa 評論,需要修改 ebuild 的結構。創建者在創建他們的 git 儲存庫時並沒有考慮到最近的 portage 結構。
對於命令行
(一個沒有portage目錄結構的ebuild)
在裡面
/usr/local/portage/
我決定snap-confine屬於類別sys-apps
從 bash 根提示符:
cd /usr/local/portage git clone https://github.com/zyga/snap-confine-gentoo.git cd snap-confine-gentoo mkdir -pv sys-apps/snap-confine # the Manifest file will be recreated later rm -v Manifest mv -v snap-confine-1.0.32.ebuild sys-apps/snap-confine/ # to avoid errors, you need your masters = gentoo reference mkdir -v metadata echo 'masters = gentoo' > metadata/layout.conf cd sys-apps/snap-confine ebuild snap-confine-1.0.32.ebuild manifest clean merge
事實證明,.ebuild 沒有正確形成正確的依賴關係,但我認為這些步驟提供了一個很好的教程——基於:
- https://wiki.gentoo.org/wiki/Basic_guide_to_write_Gentoo_Ebuilds
- https://devmanual.gentoo.org/quickstart/
對於 Portage 管理
基於其他 Gentoo 儲存庫,我建議開發人員創建一個單獨的儲存庫,其中包含分別在包類別和下的snap-confine和snapd ebuild 。
sys-apps``app-emulation
然後,我們創建了一個metadata/layout.conf文件,其中包含
masters = gentoo
以避免移植兼容性投訴。開發人員指南還要求我們有一個配置文件/repo_name文件,其中標識了 repo 的名稱。在每個包的文件夾中,我們創建了一個metadata.xml文件,然後執行repoman manifest
以生成Manifest文件。最後,使用者需要在 中創建一個條目
/etc/portage/repos.conf/
,其說明在sakaki-tools github repo中有專業的詳細說明