CUPS介绍
CUPS是Apple旗下的一款开源打印服务器软件,全称是Common UNIX Printer System,即通用UNIX打印系统,Mac OS 内置的打印系统即基于CUPS,对于通用的Linux系统来说,CUPS同样适用,只需要编译对应架构下的执行文件即可,下面是CUPS的源码repo
CUPS在Apple的最新版本是2.3.3,而CUPS的作者在离开Apple之后又创建了OpenPrinting项目,将CUPS fork出来一个分支继续更新,我们称之为OpenPrinting版本的CUPS,最新版本是2.4.0,本文我们使用Apple版本的CUPS 2.3.3。
CUPS原本是用于Mac OS上,基本上都是通过PostScirpt语言来与打印机进行通讯,而且支持安装使用PPD描述文件来驱动不同型号的打印机,故使用CUPS时只需要确保对应的打印机有相关的PostScript驱动即可,一般打印机厂商提供的Mac OS驱动都是PS版本,有的型号打印机会有Linux发行版的驱动,那就更好了。
编译CUPS
在Openwrt体系当中可以直接编译整个Openwrt并附带上CUPS包,也可以单独编译不同架构的CUPS的ipk安装包,无论是哪种方式,首先都必须确保Makefile和版本是没有问题的,这里参考了这个repo来修改Makefile,最终确保可以编译最新版本CUPS 2.3.3成功,可以直接使用我的仓库来克隆相关文件来直接编译,repo如下
https://github.com/SoPudge/lede-cups
0. 准备编译环境
以Debian为例,编译openwrt需要如下包预先安装,以下所有操作都必须在非root环境进行,即用户权限中
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync
1. 准备Openwrt源码
Openwrt支持众多不同的架构,我们可以通过源码编译出支持不同架构的ipk文件,但是编译独立ipk文件之前都需要将toolchain编译一遍,故我们先克隆openwrt的源码,这里以文件夹lede为例,所有源码都存放在lede目录当中
git clone https://github.com/coolsnowwolf/lede.git lede
2. 将需编译的package引入openwrt
这里需要将CUPS加入openwrt的feeds.default.conf文件当中,以便在初始化编译环境的时候自动下载相关repo,这里使用作者自己修改过的repo
echo "src-git cups https://github.com/SoPudge/lede-cups" >> feeds.conf.default
3. 初始化Openwrt编译环境
这一步需要Openwrt的repo完善,例如下载一些引入的包,在第三个命令make menuconfig的时候,需要将Network->Printing>CUPS的相关包选中,变成M状态,同时需要将编译的架构在make menuconfig选定,交叉编译即在这一步做出选择。
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
4. 下载相关库
make -j8 download V=s
5. 编译工具链
一般需要将工具链编译完成一次,才能够成功编译ipk文件,架构是在.config文件中定义好的,故直接执行相关命令编译工具链即可,即使是交叉编译也没有区别,会直接编译相关架构的工具链。本步骤持续时间较长,建议使用screen打开会话编译,以免中途失败。
make tools/install V=s -j1
make toolchain/install V=s -j1
6. 编译ipk文件
到这一步就非常容易了,可以直接编译相关的ipk文件
make package/feeds/cups/cups/compile V=s
一般来说本步的编译命令有这样的格式:make package/<repo当中makefile的文件夹>/compile V=s
7. 编译完成找到ipk文件
编译完成之后,可以在lede/bin/packages/x86_64/cups文件夹中找到相应的package,直接拷贝出来到对应路由器当中安装即可,如果不是x86_64的架构,可以在bin/packages当中看到相关的架构,直接从对应架构文件夹找到ipk文件即可。