ports/packages安装备注

本文介绍 FreeBSD 的 Ports 和 Packages 系统,并提供安装加速方法,如设置下载站点优先级、手动下载安装包等。同时解答了在安装过程中常见的问题。

加速措施很多。

强烈推荐方法:
其中一个就是设置下载的站点优先于 Makefile 中的站点。
通过系统工具安装 perl 时会 /etc/make.conf 往里边加东西,它的妙用还很多。
创建 /etc/make.conf 就是了。
另外,还可以更改下载软件。
pkg_add -r axel
安装稍快一些的 axel 下载软件。
然后把以下内容加到 /etc/make.conf 中,作用是覆盖 fetch 下载软件,优先选用我给出的3个站点。

FETCH_CMD = axel
DISABLE_SIZE = yes
MASTER_SITE_OVERRIDE ?= /
http://ports.hshh.org/${DIST_SUBDIR}/ /
ftp://ftp2.tsinghua.edu.cn/mirror/FreeBSD/distfiles/${DIST_SUBDIR}/ /
ftp://ftp.freeBSDchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE ?= {MASTER_SITE_BACKUP}

方法二:
手工下载安装包及组件放置:
ports:/usr/ports/distfiles/
packages:/var/db/pkg
如何确定某个安装包需要哪些组件,可参考:
http://www.freebsd.org/ports/index.html

 

 

FreeBSD的Packages和Ports绝对是一种完美的应用程序的安装和配置及反安装的解决方案,可以说完全可以同RedHat的RPM方案相比,只不过RPM的商业运做比较成功罢了。
下面是FreeBSD HandBook中文版里面的一些技巧,供大家参考。
4.5.安装中出现的问题
4.5.1. 一些问题与解答
4.5.1.1.我认为应该作一个有关modem 的讨论?
哦,你必须想到你电脑的串口。我们使用串口从一个Unix 系统到另一个系统传送程序。
4.5.1.2.应该用package 来安装额外的程序?
是的,通常这是最快速、最简单的方法。
4.5.1.3.为什么用port 来烦人呢?
几个原因:
1,一些软件的发布许可可能不允许采用二进制的方式分发。它们必须采用源代码的方
式分发。
2,一些人不信任二进制分发。至少带上源代码,你可以自己阅读,寻找可能存在的问
题。
3,如果你有本地的补丁,那你可能在打补丁的时候需要源代码。
4,你可能在程序的编译方式上与做这些程序的人有不同的看法。无论是建构调试版,
还是把它们分开,一些人喜欢采用最优化的设置来编译以达到最强大。通常发布的
软件包在设置方面都是比较保守的。如果port 对一个特殊的处理器在使用代码上有
一个编译选项,或是需要支持一个额外的设备,你可能需要亲自对这个port 进行编
译,不需要为提供每一个额外的支持而生成许多不同的软件包。有很多这样的例子。
如果一个软件包可能对一些特殊尺寸的纸张提供了默认的支持,那我们就要提供多
种软件包,每一种对应一种尺寸的纸张。
5,一些人喜欢围着代码转。如果它们觉得无聊,或想攻克它,或想从中学点东西,诸
如此类的,它们可能会去读它。
6, 如果你不能得到源代码,那它就不是软件了。
4.5.1.4. 什么是补丁?
一个补丁(patch)是一个小文件,主要描述文件如何从一个版本升级到另一个版本。
第12 页FreeBSD 使用手册
它一般是纯文本的,基本上说是些象“delete line 23”,“add these two lines after line
468”,或“change line 197 to this ”这样的东西。它们以diff 闻名,因为它们是由diff
这个程序产生。
4.3.1.5. tarball 是指什么?
它就是以.tar 结尾的文件,或者是诸如以.tar.gz,.tar.Z,.tar.bz2,.tgz 结尾的文件。
基本上,它是一个已经被打包或压缩的目录树。这种技术最早被用于磁带机上,但后来它被
广泛运用于互联网上用来发布程序源代码。你可以看到在它里面有些什么文件,甚至你可以
亲自使用标准的UNIX tar 程序解开它们,只要这样做:
% tar tvzf foobar.tar.gz
% tar xzvf foobar.tar.gz
% tar tvf foobar.tar
% tar xvf foobar.tar
4.5.1.6. 那checksum 呢?
这是一个由统计检查文件里所有资料而产生的数字。如果有任何字符改变了,那
checksum 就不会再跟统计的结果一样,所以经过简单的比较就可以看出差异。
4.5.1.7. 我照上面说的方法从光盘编译port 都很顺,怎么一安装kermit 就出错?
# make install
>> cku190.tar.gz doesn’t seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.
为什么找不到,难道这张光盘没有用?
就像在从光盘编译ports 那节所解释的,有些port 因为授权的限制不能放进光盘。Kermit
就是个例子。Kermit 的授权不允许把它做的tarball 放进光盘,所以必须自己动手下载
------真是抱歉!
会有这些错误信息是因为当时没有连上网络。只要从MASTER_SITES (列在Makefile 里)中
所列的任一个网站把文件下载下来,就可以重新开始安装的步骤了。
4.5.1.8. 我照做了,可是当要把文件放进/usr/ports/distfiles 时却得到没有许可的错误
信息。
Port 的机制是到/usr/ports/distfiles 中找tarball,可是因为它是符号连接(symlink)
到光盘的,所以那个目录只读而且也没有办法复制任何东西进去。用下面说的方法就可以让
它去找其它地方:
第13 页FreeBSD 使用手册
# make DISTDIR=/where/you/put/it install
4.5.1.9. Ports 的设计是只有把所有东西都放在/usr/ports 下才能用吗?系统管理员说要
把所有东西都放在/u/people/guests/wurzburger 下,不过这样好象不能用。
可以用PORTSDIR 和PREFIX 这两个变量来告诉port 用别的目录。例如,
# make PORTSDIR=/u/people/guests/wurzburger/ports install
会在/u/people/guests/wurzburger/ports 里编译port 并把所有东西安装在/usr/local 下。
# make PREFIX=/u/people/guests/wurzburger/local install
会在/usr/ports 里编译port 并安装至/u/people/guests/wurzburger/local。毫无疑问的,
# make PORTSDIR=.../ports PREFIX=.../local install
会结合这两种(要在这页完整的写出来太长了,不过它应该给你点概要了)。如果不想每次安
装一个port 就要把这些字再打一次,把这设置放到环境变量里会是个好主意。读读shell
的联机手册来获得做这些事的指导。
4.5.1.10. 我没有FreeBSD 的光盘,不过我想要把所有的tarball 放在手边,这样就不用
每次装一个port 就要等待下载。有什么好方法可以一次全下载下来吗?
要得到ports collection 每个tarball 的话,执行:
# cd /usr/ports
# make fetch
4.5.1.11. 我知道从临近的FreeBSD mirror 站下载比较快。可是有办法从其它
MASTER_SITES 上面没有的站下载port 吗?
可以。如果知道的话,例如ftp.FreeBSD.org 比MASTER_SITES 上面列的任何站都近,
那就这么做:
# cd /usr/ports/directory
# make
MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/
fetch
4.5.1.12. 要怎样在make 去下载文件前先知道所需的文件?
make fetch-list 会列出一个port 所需的文件。
4.5.1.13. 有办法在port 编译前停止吗?我想在它安装前hack 一下程序代码,不过每次
都要边看边按control-C 很讨厌。
用make extract 会在源代码下载完并解开后停止。
第14 页FreeBSD 使用手册
4.5.2. 帮助!Port 损坏了
如果你遇到port 不能用了,可以这样做:
1. 修复它!在“如何编译一个port”那一节能帮助你这样做。
2. 遇到困难时,可以通过email 寻求帮助!只需要发一封email 给port 的维护者。输入
make maintainer 或读一下Makefile 文件找到维护者的email 地址。记住要包括这个
port 的名称和port 的版本,还有遇到的错误。如果你没有得到维护者的回复,你可能
要使用send-pr 命令提交一个bug 报告。
3. 忘掉它吧!这是一个最好的解决办法,很少的ports 能被分为“不可或缺的”。有时当
一个port 升级时,一些问题可能会被修复。
4. 可以从你附近的ftp 站点上下载一些升级包。主力站点是ftp.freebsd.org,在它的
Packages directory 中有很多“主要的”软件包。但你最好先检查一下当地的镜象站
点!因为这样工作起来可能要快一点。使用pkg_add 程序将这些软件包安装到你的系统。

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
你遇到的错误: ``` E: Failed to fetch ... 404 Not Found ``` 说明:**APT 在尝试下载软件包索引时,目标 URL 已经不存在(返回 404)**。这通常是因为你使用的 Ubuntu 镜像源已经移除了旧版本(如 `focal` 即 20.04 LTS)的部分架构或更新通道。 --- ## 🔍 错误分析 你的系统正在尝试从以下两个源获取索引文件: 1. **华为云镜像站**: - `https://repo.huaweicloud.com/ubuntu/dists/focal-security/main/binary-arm64/Packages` - ❌ 报错:404 → 表示该路径下没有 `arm64` 架构的包索引(已删除或未同步) 2. **Ubuntu 官方 ports 站(用于非 amd64 架构)**: - `http://ports.ubuntu.com/ubuntu-ports/dists/focal/main/binary-amd64/Packages` - ❌ 报错:404 → **amd64 不应该请求 ubuntu-ports!** > ✅ 正确做法是: > - `amd64`, `i386` 使用 `archive.ubuntu.com` 或国内镜像主站 > - `arm64`, `ppc64el`, `s390x` 等使用 `ports.ubuntu.com/ubuntu-ports` 你现在把所有架构都指向了 `ubuntu-ports`,导致 `amd64` 和 `i386` 请求了错误的地址 → 返回 404。 --- ## ✅ 正确配置 APT 源的方法 ### 🎯 目标: - 主架构(x86_64 / amd64)用标准镜像(如阿里云、清华) - 多架构支持(如 arm64)用 `ubuntu-ports` - 不混用,避免 404 --- ### ✅ 推荐方案:混合使用官方主站 + ubuntu-ports #### 编辑 `/etc/apt/sources.list` ```bash sudo nano /etc/apt/sources.list ``` #### 替换为如下内容(以 **阿里云镜像 + ubuntu-ports for arm64** 为例): ```text # Ubuntu Focal (20.04) 主仓库 - 支持 amd64/i386 deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse # ubuntu-ports 仅用于非 amd64 架构(如 arm64) deb http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted universe multiverse ``` 📌 关键点解释: | 行 | 作用 | |----|------| | 前四行 | 使用阿里云服务 `amd64` 和 `i386` 架构(速度快) | | 后四行 | 使用 `ports.ubuntu.com` 提供 `arm64` 等架构支持 | | 共同存在 | 实现多架构共存交叉编译环境 | --- ### ✅ 添加架构支持(如果你要交叉编译 aarch64) ```bash sudo dpkg --add-architecture arm64 ``` 验证是否添加成功: ```bash dpkg --print-foreign-architectures ``` 输出应包含: ``` arm64 ``` --- ### 🛠 更新软件包列表 ```bash sudo apt clean sudo apt update ``` ✅ 成功标志: - 不再出现 `404 Not Found` for `binary-amd64` - 只对 `binary-arm64` 请求走 `ports.ubuntu.com` - 最终显示 “Hit” 或 “Get” 而非 “Failed” --- ## ⚠️ 常见错误原因总结 | 错误 | 原因 | 解决方法 | |------|------|----------| | `binary-arm64/Packages 404` on huaweicloud | 华为云不完整支持 arm64 | 改用 `ports.ubuntu.com` | | `binary-amd64/Packages 404` on ports.ubuntu.com | amd64 不属于 ports 站 | 分离源:主站 + ports | | `i386` 架构也报错 | 错误地用了 ports 源 | i386 应使用主镜像站 | --- ## ✅ 验证是否修复成功 运行: ```bash apt update | grep -i failed ``` 如果无输出,则表示全部索引拉取成功。 然后可以安装你需要的库: ```bash sudo apt install libcrypt-dev:arm64 ``` ✔️ 如果能正常安装,说明配置正确。 --- ## 💡 进阶建议 - Ubuntu 20.04 已于 **2023 年停止标准支持**(仅 ESM),建议升级到 **22.04 LTS 或 24.04 LTS** - 若必须使用 focal,请尽快迁移至长期维护的镜像策略 - 可考虑搭建本地 APT 缓存服务器(如 `apt-cacher-ng`)来归档关键包 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值