1.创建一个程序ubuntu用户应该都用过apt和apt-get这两个包管理器,其工作原理大致上就是访问/etc/apt/sources.list记录的url地址(也就是我们说的源地址),从上面下载deb包到本地,然后再把该deb包安装到系统中。
本篇文章介绍一下如何创建私有源。所谓私有源就是个人创建的源,一般情况不配置外网,遂只是在局域网内可以使用。不同于ubuntu官方源,阿里云源,清华源等,可以让整个互联网用户进行访问。
sun@sun-pc:~/myProjects$ mkdir -p priv_src_test/src sun@sun-pc:~/myProjects$ cd priv_src_test/src/ sun@sun-pc:~/myProjects/priv_src_test/src$ vi priv_src_test.cpp
打开pri_src_test.cpp后,内容如下:
#includeusing namespace; int main() { cout << "This is In_engineer test" << endl; return 0; }
保存退出cpp文件后,接着执行
sun@sun-pc:~/myProjects/pri_src_test/src$ g++ pri_src_test.cpp -o pri_src_test //编译cpp文件生成可执行文件pri_src_test sun@sun-pc:~/myProjects/pri_src_test/src$ ./pri_src_test //执行pri_src_test,得到结果如下 This is In_engineer test2. 将程序打包成deb包
sun@sun-pc:~/myProjects/pri_src_test$ mkdir package #创建个目录,用来存放创建deb包时所需文件 sun@sun-pc:~/myProjects/pri_src_test$ cd package sun@sun-pc:~/myProjects/pri_src_test/package$ mkdir -p usr/bin sun@sun-pc:~/myProjects/pri_src_test/package$ mv ../src/pri_src_test usr/bin/ #把执行文件拷贝到usr/bin/目录 sun@sun-pc:~/myProjects/pri_src_test/package$ mkdir DEBIAN sun@sun-pc:~/myProjects/pri_src_test/package$ vi DEBIAN/control
编辑内容如下:
Package: privatesrc #注意包名构成只能是小写字母和"-+"的字符 Version: 1.0 Section: custom(代表软件类别) Priority: optional Architecture: all Essential: no Installed-Size: 1024 Maintainer: privatesrc.org Description: Print test strings on the screen
继续执行
sun@sun-pc:~/myProjects/pri_src_test/package$ tree #确认一下package结构有没有问题,和下面一样就可以了 . ├── DEBIAN │ └── control └── usr └── bin └── pri_src_test 3 directories, 2 files sun@sun-pc:~/myProjects/pri_src_test/package$ cd ../ sun@sun-pc:~/myProjects/pri_src_test$ dpkg-deb --build package/ privatesrc.deb #将package打包为privatesrc.deb3. 发布deb包到Apache
sun@sun-pc:~$ sudo apt-get install apache2 #如果没有安装过apache,先进行安装 sun@sun-pc:~$ cd /var/www/html #安装完apache后,根目录下会出现/var/www/的目录,cd到其中的html目录 sun@sun-pc:~$ mkdir debian sun@sun-pc:/var/www/html/debian$ sudo cp ~/myProjects/pri_src_test/privatesrc.deb ./ #把deb包拷贝到此目录下 sun@sun-pc:/var/www/html/debian$ su root root@sun-pc:/var/www/html/debian# sudo dpkg-scanpackages . | gzip -c9 > Packages.gz #创建deb包索引
发布完之后,局域网内用户正常都可以访问了,如下图可以看到前文提到的Packages.gz和deb包全都在这里
如果别人(张三)要使用此私有源,依据下面 *** 作即可
zhangsan@zhangsan-pc:~$ echo "deb [trusted=yes] http://192.42.1.24/debian ./" | sudo tee -a /etc/apt/sources.list > /dev/null #见注解 zhangsan@zhangsan-pc:~$ sudo apt-get update #由于sources.list有变更,所以使用之前先更新软件列表 zhangsan@zhangsan-pc:~$ sudo apt-get install privatesrc #安装我们软件源上的privatesrc软件,成功! 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了: activity-log-manager gconf-service gconf-service-backend gconf2 gconf2-common geoclue geoclue-ubuntu-geoip indicator-applet indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages indicator-power libaccounts-glib0 libappindicator1 libfcitx-config4 libfcitx-gclient1 libfcitx-utils0 libgconf-2-4 libgeoclue0 libgeonames-common libgeonames0 libido3-0.1-0 libindicator7 liblightdm-gobject-1-0 libnm-glib4 libnm-gtk0 libnm-util2 libpanel-applet3 libtimezonemap-data libtimezonemap1 libunity-control-center1 libunity-settings-daemon1 liburl-dispatcher1 linux-hwe-5.4-headers-5.4.0-84 linux-hwe-5.4-headers-5.4.0-86 linux-hwe-5.4-headers-5.4.0-87 linux-hwe-5.4-headers-5.4.0-89 linux-hwe-5.4-headers-5.4.0-90 ubuntu-touch-sounds unity-settings-daemon 使用'sudo apt autoremove'来卸载它(它们)。 下列【新】软件包将被安装: privatesrc 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 48 个软件包未被升级。 需要下载 3,296 B 的归档。 解压缩后会消耗 1,049 kB 的额外空间。 获取:1 http://192.42.1.24/debian ./ privatesrc 1.0 [3,296 B] 已下载 3,296 B,耗时 0秒 (0 B/s) 正在选中未选择的软件包 privatesrc。 (正在读取数据库 ... 系统当前共安装有 303336 个文件和目录。) 正准备解包 .../privatesrc_1.0_all.deb ... 正在解包 privatesrc (1.0) ... 正在设置 privatesrc (1.0) ... sun@sun-pc:~$ pri_src_test #执行安装的程序。deb包名是privatesrc,二进制可执行文件名字是pri_src_test,这两个不要搞混 This is In_engineer test #可以看到执行的结果正是我们的程序
注:
(1) 对【 echo “deb [trusted=yes] http://192.42.1.24/debian ./” | sudo tee -a /etc/apt/sources.list > /dev/null 】解释一下,这里边有三条命令,先用“deb [trusted=yes] http://192.42.1.24/debian ./”将源信息的字符串输出到标准输出中,然后使用 tee -a /etc/apt/sources.list从标准输出中取得字符串并依附到sources.list文件的末尾。最后一条>/dev/null是将执行结果丢到空设备中,这样终端中就不会显示执行结果。
(2) 还有一点,因为是私有源网址,没有证书。所以使用[trusted=yes]让系统下载的时候信任这个源,不会进行证书检查。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)