Software-Installation

如何使用我在 Gentoo 中的包管理器從 git 安裝自定義原始碼?

  • September 3, 2016

我想從git儲存庫****安裝自定義源,但使用我的包管理器(為 portage 出現)。

背景

我已經使用Sakaki 的教程使用 EFI 安裝了 Gentoo ,所以我已經出現了dev-vcs/git

我想要的軟體包用於安裝Canonical 的 Snapd (來自Ars Technica的背景閱讀),它們的說明是:

琴圖

安裝snap-confine.ebuildsnapd.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 沒有正確形成正確的依賴關係,但我認為這些步驟提供了一個很好的教程——基於:

  1. https://wiki.gentoo.org/wiki/Basic_guide_to_write_Gentoo_Ebuilds
  2. https://devmanual.gentoo.org/quickstart/

對於 Portage 管理

基於其他 Gentoo 儲存庫,我建議開發人員創建一個單獨的儲存庫,其中包含分別在包類別和下的snap-confinesnapd 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中有專業的詳細說明

引用自:https://unix.stackexchange.com/questions/306668