背景
最近有几个古老的Mac OS X 10.10和10.11设备在使用brew更新包的时候陆续遇到了一些困难,显示有一些包不支持了,必须要卸载掉不然不能正常使用。我突然想起其实还有另外一套包管理系统macports,按照说明它维护的包数量其实也很多,并且对于老版本的OS X支持也不错,是否可以尝试下呢?
尝试
那我就从我手头最老的iBook G4开始吧。之前我使用的是tigerbrew,一个支持PowerPC平台的brew的fork版。这个tigerbrew严格讲基本不维护了,而且新的包也很少。所以我就首先把brew卸载掉,然后从macports下载了专门用于Leopard版本的dmg安装包进行安装。
访问HTTPS
老系统的首要问题就是几乎没法正常访问HTTPS资源,不管是浏览器,还是wget,还是curl。在这一点上,我要先看看macports的表现如何。按照说明我尝试安装curl和wget
1 2 3 |
sudo port selfupdate sudo port install curl wget |
首先更新一下自己,然后安装相应的包。在计算好依赖项后,我输入y
回车确认安装。
更让人惊喜的是,尽管是darwin9这么老旧的平台,还是有不少包直接通过下载二进制版本的形式进行安装。一些不那么常见或设置了variants
包必须要进行编译安装。
可以看到它自己安装了最新版的openssl 1.1.1k
以及gnutls
,还有就是最新的根证书集合,在编译安装过后,我尝试访问HTTPS网站,完全没有任何障碍了! 看来这一点上macports比老旧的brew的fork版要强不少。
支持C++11的编译器
Mac OS X 10.5.8和自带的Xcode 3.1.4安装了两种编译器,一种是gcc 4.0.1的编译器
1 2 3 4 5 6 7 |
sharpbai-iBook-G4:Downloads sharpbai$ gcc -v Using built-in specs. Target: powerpc-apple-darwin9 Configured with: /var/tmp/gcc/gcc-5493~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --program-prefix= --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9 Thread model: posix gcc version 4.0.1 (Apple Inc. build 5493) |
另一种是gcc 4.2.1编译器
1 2 3 4 5 6 7 |
sharpbai-iBook-G4:Downloads sharpbai$ gcc-4.2 -v Using built-in specs. Target: powerpc-apple-darwin9 Configured with: /var/tmp/gcc_42/gcc_42-5577~1/src/configure --disable-checking --prefix=/usr --mandir=/usr/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-gxx-include-dir=/usr/include/c++/4.0.0 --program-prefix= --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9 Thread model: posix gcc version 4.2.1 (Apple Inc. build 5577) |
令人欣喜的是,macports在darwin9的ppc平台可以安装到gcc 7.5
1 2 3 4 5 6 7 8 9 |
sharpbai-iBook-G4:Downloads sharpbai$ gcc-mp-7 -v Using built-in specs. COLLECT_GCC=gcc-mp-7 COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/ppc-apple-darwin9/7.5.0/lto-wrapper Target: ppc-apple-darwin9 Configured with: /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_lang_gcc7/gcc7/work/gcc-7.5.0/configure --prefix=/opt/local --build=ppc-apple-darwin9 --enable-languages=c,c++,objc,obj-c++,lto,fortran --libdir=/opt/local/lib/gcc7 --includedir=/opt/local/include/gcc7 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-7 --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-7 --with-gxx-include-dir=/opt/local/include/gcc7/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --with-isl=/opt/local --enable-stage1-checking --disable-multilib --enable-lto --enable-libstdcxx-time --with-build-config=bootstrap-debug --with-as=/opt/local/bin/as --with-ld=/opt/local/bin/ld --with-ar=/opt/local/bin/ar --with-bugurl=https://trac.macports.org/newticket --disable-tls --with-pkgversion='MacPorts gcc7 7.5.0_2' Thread model: posix gcc version 7.5.0 (MacPorts gcc7 7.5.0_2) |
这个版本不低了,都可以支持C11和C++11了。这么古董的机器还能享受到这样的编译器感觉还是很赚的。
音视频瑞士军刀ffmpeg 4.4.1
说实话这让我着实有些意外。我试着搜了下macports的ffmpeg已经更新到4.4.1了,那我看看能不能装。没想到一安装还装上了!
1 2 |
sudo port install ffmpeg +nonfree |
当然安装过程肯定没那么快(已经不能这么形容了,实际上是非常慢),足足花了有十几个小时吧。。。但是整个过程依赖库安装全部非常顺利,编译也一点都没有出错!来看看最后的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
sharpbai-iBook-G4:Downloads sharpbai$ ffmpeg ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 7.5.0 (MacPorts gcc7 7.5.0_2) configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-librsvg --enable-libtheora --enable-libopenjpeg --enable-libmodplug --disable-libvpx --enable-libsoxr --enable-libspeex --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-libjack --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-indev=jack --disable-opencl --disable-outdev=xv --disable-audiotoolbox --disable-videotoolbox --disable-sdl2 --disable-securetransport --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/opt/local/bin/gcc-mp-7 --disable-filter=coreimage --disable-filter=coreimagesrc --disable-indev=avfoundation --arch=ppc --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid --enable-nonfree --enable-libfdk-aac libavutil 56. 70.100 / 56. 70.100 libavcodec 58.134.100 / 58.134.100 libavformat 58. 76.100 / 58. 76.100 libavdevice 58. 13.100 / 58. 13.100 libavfilter 7.110.100 / 7.110.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 9.100 / 5. 9.100 libswresample 3. 9.100 / 3. 9.100 libpostproc 55. 9.100 / 55. 9.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... Use -h to get full help or, even better, run 'man ffmpeg' |
实话说都有点惊艳到我了。这个ffmpeg自带x264和x265编码器,解码器甚至包含了时新的av1,乖乖~
我尝试下载了一个256kbps的rmvb视频,将其重新转码成120kbps的h264+16kbps的aac的mp4视频,大概可以维持在0.4x左右,严格讲还是可以的~
只可惜由于libsdl2在ppc上安装需要的编译器是llvm的更高版本系列,但是powerpc版本并没有提供维护,所以就没有安装上ffplay。
nodejs与qemu
尝试安装了下nodejs和qemu,针对这台powerpc系列的机器看来确实要求过高了。nodejs只提供i386/x86_64和arm三种架构的安装包,所以在这里就全部扑街。qemu系列也是由于编译器不支持-femulated-tls
特性而不能正常安装。
经过搜索,我看到有人介绍可以通过高版本gcc来编译安装llvm-3.8甚至llvm-3.9,再通过llvm系列来安装其他的包,比如qemu。但是鉴于这台设备性能实在太拉胯(1.2GHz PowerPC G4),这里就不做尝试了。
选择
通过我的iBook G4的验证,其实感觉macports作为包管理器还是很方便的,既有编译好的二进制包可以作为加速,又支持本地编译,而且包非常多,对于x86和x86_64平台的支持也不错,甚至最新的arm64平台也慢慢做上支持了。我的感觉是针对完全的老爷机,macports是首选。对于主流CPU架构的半老不新的且CPU强大的机器,也适合macports。针对日常使用的机器,选择brew更新包迅速而且也不会占用额外的时间进行编译。macports的缺点在于相对来讲维护的人较少,所以包更新相对brew不那么频繁。但是讲真咱们不是拿来玩,天天更新也是没那么必要的。所以macports这类包管理器还是很有生命力的。