Telegram Web Link
Channel created
如果你某个 overlay 和 ::gentoo 有大量重合且需要 override,请参考 man portage 中 repos.conf section 调整 priority。
#portage #proxy

持久性地修改 Portage 安装软件时的代理

一、 通用配置

'$ man make.conf' 可以看到里面有说明如何配置代理,但是过于简要,这边详细说明。

对于一般情况,在 /etc/portage/make.conf 文件下配置如下三个变量,就完全足够:
#PROXYURL 格式: [protocol://][user[:password]@]proxyhost[:port]
http_proxy="<PROXYURL>"
https_proxy="<PROXYURL>"
ftp_proxy="<PROXYURL>"

这些变量会在 emerge 命令运行时,传递给预配置的 FETCHCOMMANDwget 命令。但,该命令有一个问题是不支持 socks 协议;所以,对于不同的协议需要有不同的代理服务,这样子很麻烦。

修改以支持 socks 协议有一个应变的方法,即修改默认的获取命令为 curl ,同样是在 /etc/portage/make.conf 文件下配置变量,如下:
FETCHCOMMAND="curl --retry 3 --connect-timeout 60 --ftp-pasv -Lfo \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
RESUMECOMMAND="curl -C - --retry 3 --connect-timeout 60 --ftp-pasv -Lfo \"\${DISTDIR}/\${FILE}\" \"\${URI}\""

其中 RESUMECOMMAND 是用于恢复意外中断的下载命令,保存后即完成修改,此时,就可以给不同协议配置同样的 socks 类协议的代理服务,均可生效。如:
https_proxy="socks5h://127.0.0.1:1080"

二、 单独配置 git 抓取

对于 live 包,它们目前大多数直接使用 git 命令从远程仓库抓取。其它版本控制工具 [2] 同理,请自行修改后套用;当然也有直接使用 wget|curl 下载 live 包的情况,那么这种情况如上「一」述。

git 命令支持 socks 协议,并且除了能吃上述配置的环境变量外「配置 https_proxy 时也配好 http_proxy ,否则可能出现 SSL_ERROR_SYSCALL 错误」 ,还能独立于其它包单独配置 git 自身的代理,方法有两种:

1. git 能配置针对整个 Linux 系统的参数,运行:
git config --system http.proxy '<PROXYURL>'

此命令会将配置写入到 /etc/gitconfig 文件内,并生效于系统级别,会被用户/项目级别的配置覆盖。

2. 通过 Portage 的全局 bashrc 文件 /etc/portage/bashrc 来配置临时的 git 代理

这种方式会对系统配置造成最少的干扰,只略微繁琐一点,需要将下述脚本代码写入上述的 bashrc 文件内:
if [[ ${EBUILD_PHASE} == "unpack" && ${INHERITED} =~ git\-r3 ]]; then
git config --global http.proxy '<PROXYURL>'
fi

这个 bashrc 只被 Portage 引用,会在进入每一个安装阶段时被导入。目前,Portage 下抓取 git 项目是通过 git-r3.eclass 实现,该 eclass 定义了 git 项目是在 src_unpack 阶段被更新,所以这里只需要在此阶段时设置即可。且,因为该目录不是被抓取包的 git 目录,所以只能设置用户级别的配置以生效,配置文件会被存放于 Portage 安装过程中沙盒的家目录下,即对应 安装软件临时目录 [3] 下的 homedir/ 目录。

临时添加代理

对于需要临时添加代理以使用的情况,目前我知道两种方式:

1. 使用 net-misc/proxychains 软件,适用所有下载方式。

配置好代理列表后,通过如下命令使用:
proxychains -q emerge [<args>...]

其默认配置文件位于 /etc/proxychains.conf

2. 临时指定环境变量 {ftp,http,https}_proxy 的方式,适用性同持久性配置。

即如下命令:
export http_proxy="..." https_...
emerge [<args>...]


http_proxy="..." https_... emerge [<args>...]

以上。 原文

[1] 即版本号带 9999* 的这些包;用于匹配 live ebuild 文件名的正则表达式为 9999*(-r[0-9]{1,3})?\.ebuild$ ,可还是有一些包使用了这种版本命名规则却并非真正的 live 包,比如 openjfx/openjfx-8.999.ebuild ;这里不会通过版本号来判断是否需要配置 git 参数,所以并不影响,仅作介绍。
[2] 目前支持的大致有 bzr, cvs, darcs, mercurial, subversion
[3] 这个目录是 Portage 在编译/安装软件过程中临时建立的,会在成功安装软件后被删除,所以不用担心会有文件残留。具体位置是可以自定义的,详情看 make.conf(5) 手册下 PORTAGE_TMPDIR 条目
如果要贴长文本,可以使用网络粘贴板:
<输出命令> | curl -F "c=@-" "https://fars.ee/"

并且将输出里的 url: http://fars.ee/xxxx 这行贴出来。

————————————————————————-

使用的时候可以 curl http://fars.ee/xxxx | less 查看。

————————————————————————-

日常使用可以添加 alias fars='curl -F "c=@-" "http://fars.ee/"'~/.bashrc 或者 ~/.zshrc
Forwarded from R̲y̲a̲n̲ | 1202 🯱.
lspci -k | grep -A3 VGA 用 grep 的话正常加上 -A3 往下多输出三行才会显示驱动信息
官方fcitx5在做了,在做了,https://bugs.gentoo.org/760501
app-portage/portage-utils提供qfile命令,可以用来查询某个文件属于哪个已安装的包:
$ qfile qfile
app-portage/portage-utils: /usr/bin/qfile
同时也提供了 qlist 命令可以用来查询给定已安装包有哪些文件:
$ qlist portage-utils
/usr/bin/qatom
/usr/bin/qcheck
/usr/bin/qdepends
/usr/bin/qfile
/usr/bin/qgrep
/usr/bin/qkeyword
/usr/bin/qlist
......
app-portage/pfl 提供命令e-file可以用来联网查询哪些包提供特定文件:
$ e-file qfile
[I] app-portage/portage-utils
Available Versions: 0.21 0.62 0.64 0.74 0.74-r1 0.80 0.80_pre20190719 0.82 0.83 0.84-r1 0.85 0.86 0.87 0.88 0.89 0.90 0.90.1 0.91 9999
Last Installed Ver: 0.91(Thu 04 Mar 2021 09:03:14 PM CST)
Homepage: https://wiki.gentoo.org/wiki/Portage-utils
Description: Small and fast Portage helper tools written in C
Matched Files: /usr/bin/qfile; /gentoo64/usr/bin/qfile;
Gentoo 官方对 GURU 这个 overlay 的规则是只允许存在 ~arch 这类关键字,stable 关键字是不允许存在的,但是对其它用户的 overlay 则没有规定。

这样当对 portage 添加了额外的 overlays 后,容易出现 overlay 下标了 stable/test 关键字的实际上却不稳定/未测试的包版本高于 ::gentoo 仓库的稳定包/测试包的情况,从而使得在系统升级时,在未知情况下安装了非官方的包,以至于隐性的系统不稳定情况的存在。

所以 Gentoo wiki 有建议:当添加 overlay 后,对质量未知的 overlay 进行 mask 掉其所有包再单独对自己需要的包做 unmask 的操作。即,

mask 掉一个 overlay 里的全部包:
echo '*/*::<overlay 名>' >> /etc/portage/package.mask

unmask 特定的自己需要的包:
echo '<cate>/<pkgname>::<overlay 名>' >> /etc/portage/package.unmask
目前在 gentoo-zh 源中的三个内核已经完成了5.12的更新,随之,老版本就不再维护。5.12中的三个内核xanmod, xanmod-cacule一如既往,没有太多的变化。

变化比较大的是 Project C 的内核,在这里我稍微介绍下如何使用。之前 Project C 是从 Arch Linux 的 Linux-TKg 那边搬运一些有用的补丁过来,这次基本上完全搬运过来了。大家安装的时候会提示需要在 bmq pds 和 muqss 三种 CPU 调度器中进行选择,相关的内核配置文件放在 sys-kernel/projectc-sources/files/ 目录下。关于这三种调度器的特点和区别可以参考下面视频:

https://youtu.be/cQhPCsoQHh8?t=1859

那么最后祝各位朋友5.1节玩的开心。
一个简略的给 gentoo-zh overlay 发 pr 的流程

1. 在 Github 上 fork https://github.com/microcai/gentoo-zh 到自己账户下

2. 进入到本地 portage 的 git 仓库里 添加两个新的 remote repo,
git remote add myself https://github.com/<你的用户名>/gentoo-zh.git
git remote add upstream https://github.com/microcai/gentoo-zh.git

3. fetch 到最新
git fetch upstream

4. 切换到一个新的分支下
git checkout -b <一个新分支名> upstream/master

5. 在新的分支里完成修改并且提交(基本上每次提交一个包的修改)
cd <类别路径>/<包名路径>
<做一些你的修改>

#直接测试 ebuild 的不同阶段: https://devmanual.gentoo.org/ebuild-writing/functions/index.html
ebuild <包名>-<版本>.ebuild help

git add .
git commit -sm '<类别>/<包名>: <一个简短的提交说明>'

6. 推送到自己仓库的一个新分支,然后切换回 master 分支
git push myself <一个新分支名>

7. 在 Github 里发起 pull request

8. 在 pull request完成之后,可以切换回master分支:
git checkout master
在gentoo-zh overlay目录下运行 repoman full -d,
可以看到输出很多的QA(Quality Assurance)提示。
也可以cd到具体某个package里执行。
现在需要更多小伙伴们一起帮忙来修复这些QA小问题。
有兴趣的可以修复然后发pr~

https://github.com/microcai/gentoo-zh/issues/944
Gentoo 中文频道 pinned «在gentoo-zh overlay目录下运行 repoman full -d, 可以看到输出很多的QA(Quality Assurance)提示。 也可以cd到具体某个package里执行。 现在需要更多小伙伴们一起帮忙来修复这些QA小问题。 有兴趣的可以修复然后发pr~ https://github.com/microcai/gentoo-zh/issues/944»
大家好。

最近的 stage3 在安装系统的过程中最好选择使用稳定分支,而不要使用 ~amd 测试分支,因为最近测试分支又很多依赖问题,大家需要分几个阶段才能解决。

如果各位朋友尝试使用测试分支,一开始会提示一些包需要更新,但是因为老版本的依赖问题又无法更新,这个时候可以考虑 unmerge 那些老的包,然后再次尝试更新。这个时候会遇到硬循环依赖,大家可以考虑 mask 自己的 python 版本,一般就能升级了。

当然后续可能会遭遇另一个循环依赖:freetypeharfbuzz ,那么解决的思路就是大家会注意到 freetype 中有个 USEharfbuzz ,那么手动临时关掉这个 USE 安装 freetype 就能解决这个循环依赖。在shell里运行命令:

USE="-harfbuzz" emerge -av --oneshot freetype

希望能给新安装的朋友提供一些帮助。
2024/09/29 01:23:49
Back to Top
HTML Embed Code: