如何从Launchpad.net下载PPA的所有文件以备份废弃项目?
如何从Launchpad.net下载PPA的所有文件以备份废弃项目?
嘿,我完全懂你想备份废弃PPA的需求——毕竟这些没人维护的项目包丢了就难找了!之前你用wget --recursive --no-parent直接爬PPA的归档页面没得到预期结果,其实是因为Launchpad的网页展示层和实际包存储的路径是分开的,直接爬网页只会抓到一堆页面文件,拿不到真正的deb包和源码文件。给你两个实用的解决方案:
方法一:修正wget命令直接抓取包存储目录
Launchpad的所有PPA包都存在ppa.launchpad.net/<用户名>/<PPA名称>/ubuntu/pool/这个路径下,你只需要把wget的目标换成这个实际的存储地址就行。比如你的PPA是~myproject/+archive/ubuntu/ppa,对应的pool路径就是http://ppa.launchpad.net/myproject/ppa/ubuntu/pool/。
运行这个命令就能精准下载所有相关文件:
wget --recursive --no-parent --no-clobber --accept deb,dsc,tar.gz,tar.xz http://ppa.launchpad.net/myproject/ppa/ubuntu/pool/
参数解释:
--recursive:递归下载目录下的所有层级文件--no-parent:不会向上爬取父目录,避免下载无关内容--no-clobber:不会覆盖已经下载好的文件,适合中断后继续下载--accept:指定只下载PPA中常见的包文件类型(deb安装包、dsc源码描述文件、源码压缩包等),过滤掉网页文件
方法二:用apt-mirror做系统的完整同步(适合长期备份)
如果你用的是Ubuntu/Debian系系统,apt-mirror工具能更系统地同步整个PPA的内容,包括不同架构的包、源码包,还能保持源的目录结构和Launchpad一致,方便后续如果需要本地搭建源也能用。
- 先安装apt-mirror:
sudo apt update && sudo apt install apt-mirror
- 编辑配置文件
/etc/apt/mirror.list,添加你的PPA源(记得把jammy换成你PPA对应的Ubuntu版本代号,比如focal、bionic):
set base_path /path/to/your/backup/folder # 替换成你想存储备份的本地目录 deb http://ppa.launchpad.net/myproject/ppa/ubuntu/ jammy main restricted universe multiverse deb-src http://ppa.launchpad.net/myproject/ppa/ubuntu/ jammy main restricted universe multiverse
- 运行同步命令:
apt-mirror
它会自动处理所有依赖和文件同步,完成后你的指定目录里就有完整的PPA备份了。
最后再提一句:之前的wget命令失效是因为你访问的是PPA的web展示页面,那里的包链接是动态加载的,wget爬不到实际的包文件地址,直接指向pool目录就能解决这个问题啦。
备注:内容来源于stack exchange,提问作者acgbox




