1,为什么要离线装包

防止有些包官方升级以后导致的不兼容,比如php5和php7,目前已经无法apt-get install php5了,

2,装包以前你得下载

deb包在哪里?

1,方法1,如果你有一个已经安装好了的一样的环境你可以在老系统上找

sudo apt-get 的包在路径 /var/cache/apt/archives下,一般会有对应的deb包

2,方法2,下载(这一步同样需要一台老的差不多的系统,并且安装过你想要的包)

apt-cache show 包名称
#这会显示有关包的详情,其中有一行Filename,拷贝内容,前面加上“http://archive.ubuntu.com/ubuntu/” 用网络访问,然后下载

最近突然发现有些arm机器并不能在ubuntu网站上找到合适的安装包,所以需要找到它自己适用的源才能下载所需的deb包,那么自己的源怎么找呢?cat /etc/apt/sources.list打印出源来,然后加上某个包后面的Filename的结果,就可以下载想要的deb包了

3,使用如下命令从网上下载,下载好的包会存放在/var/cache/apt/archives

sudo apt-get clean
#为的是确保/var/cache/apt/archives文件夹下没有其他安装包干扰,当然此文件夹下自带两个文件:lock和partial,大家请不要搭理它们 sudo apt-get install --download-only 包名称
#此命令会自动下载想要的包到/var/cache/apt/archives中,命令参数的意思是只下载,不安装。一个命令有可能会下载好几个包,比如apache2,一共下了大约4个相关的包

特别说一下,还有个命令叫

apt-get download 包名称

是下载某个包到当前文件夹,这个包本人用过一次,但是比较让人怀疑的是,下不管多大的包基本上是3秒搞定,而且下载下来一个包一个文件,让我觉得不太靠谱,不建议使用

3,dpkg装包

这个适合安装一些比较小的包,或者说单个包,基本没有依赖的那种,比如你可以使用它安装google-chrome

sudo dpkg -i xxx.deb

要注意,安装前要确认你的deb文件是否适用于你的系统,如果是ubuntu16.04装到ubuntu18.04上,估计是不行,有些包有依赖,必须按顺序来,另外dpkg装的包不会在/var/cache/apt/archives中备份

如果你用dpkg安装mysql和php,就是如下这样的,你就会发现,包必须按顺序装,然后全都装完了以后整合不起来。

以下是错误示范:

1,php7.2(sudo dpkg -i )安装顺序

#包名称简写
php-common...
php7.-common...
php7.-json...
php7.-opcache...
php7.-readline...
php7.-cli...
libapache2...
php7.2_7....
php_1%3a7....
php7.-curl...
php7.-mysql...
php-mysql...
php-curl...

2,mysql安装顺序

#包名称简写
mysql-common....
mysql-client_5....
mysql-client-5.7...
mysql-client-core...
mysql-server-core....
sudo apt-get install libevent-core-2.1-(这么装是因为我没有这个deb包,不知是丢失了还是其他原因没有)
mysql-server_5....
mysql-server-5.7...

装完以后直接用sudo不要密码可以登录,如果想要改成密码验证登录,那需要在mysql的终端中输入如下四句:

update mysql.user set authentication_string=password('你的密码') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit;

3,遇到问题,pdo驱动不工作,

解决办法:

sudo vim /etc/php/7.2/apache2/php.ini
添加两行到最后,没有分号:
extension = pdo.so
extension = pdo_mysql.so
重启apache
sudo /etc/init.d/apache2 restart
重新运行,竟然可以了

感谢原作者,注意,此方法本人不熟,仅在deb离线装包适用,目前不知道是否未来有什么隐含的坑

4,配置本地的源,使用本地源装包

本人参考教程:感谢原作者

1,必须要使用的包

sudo apt-get install apt-utils
#这个包是个啥本人不知,但是后期使用的命令:apt-ftparchive需要这个包才能工作
gpg
#这个包系统我的系统自带的,据说用于软件签名检查,不大了解

2,下载要安装的包,以apache2,mysql和php为例

注意,要是你想给电脑A装以上包,电脑A无法联网,那么你肯定希望使用电脑b下载,然后拷贝到A上进行使用,能使用的前提是两台电脑系统基本一样,不要一个是ubuntu16另一个是ubuntu18,越一样越好!不一样有可能导致安装失败。由于本人只是想学会本地源安装,所以从头到尾都是在一台电脑上运行的,如果有多台电脑,就多一个自己拷贝的命令。

sudo apt-get clean

sudo apt-get install --download-only apache2

sudo apt-get install --download-only mysql-server

sudo apt-get install --download-only php

sudo apt-get install --download-only php-mysql

sudo apt-get install --download-only php-curl

sudo apt-get install --download-only libapache2-mod-php

#下载完成以后你可以到/var/cache/apt/archives中找刚刚下载的包

3,新建源文件并且拷贝包进去

sudo mkdir /opt/debs
sudo cp /var/cache/apt/archives/*.deb /opt/debs
sudo chmod -R 777 /opt/debs
#防止没权限引起问题

4,在源文件夹中新建Packages和Packages.gz

cd ..
#当前文件夹应该是/opt,debs在当前文件夹下
apt-ftparchive packages debs > debs/Packages
#生成Packages文件到debs中,估计是一个源文件的支持文件,注意,Packages文件名不要自己乱改。
cd debs
gzip -c Packages > Packages.gz
#使用gzip把Package文件压缩一下,文件名也不能乱改

5,在源文件夹中新建Release文件,和相关的release文件。据说是这个原因:

ubuntu apt-get 对软件包索引,首先要求InRelease文件,其次才去找Release、Release.gpg文件; 这情况下, 其实只需要创建InRelease文件(包含Release文件和明文签名)即可:

apt-ftparchive release ./ > Release

gpg --clearsign -o InRelease Release

gpg -abs -o Release.gpg Release
#我也不知道这是啥意思

6,gpg我理解是用来给发布的软件加签名和检查的,具体不知,只说知道的。有的需要sudo,自己试试看吧

gpg --gen-key
#生成公钥和私钥
#会话会提示你输入用户名,邮件和密码,密码需要英文加数字, gpg --list-key
#查看一下你建的公钥和私钥
#这里面支持多个用户名和密码,还有过期不过期的说法。后期慢慢研究吧 gpg -a --export-secret-keys 你刚刚输的用户名 > ~/temp/private_key.sec
#生成的是私钥,自己找地方存起来就可以了 gpg -a --export 你刚刚输的用户名> ~/temp/public_key.pub
#生成的公钥,还是自己找地方存起来

7,接下来需要对debs文件夹进行导入公钥操作

sudo apt-key add ~/temp/public_key.pub

8,修改源

#系统源文件/etc/apt/source.list,我们需要修改它
cd /etc/apt
sudo cp source.list ./source.list.old
#比如拷贝一份,不然没了
sudo vim sources.list
#里面的内容全删,然后添加一行:deb file:/opt debs/

注意,是这样的

deb file:/opt debs/
#斜杠opt空格debs斜杠

9,更细源以及安装包

sudo apt-get update
sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install php
sudo apt-get install php-mysql
sudo apt-get install php-curl
sudo apt-get install libapache2-mod-php

10,安装完成以后记得把原来的源文件换回来,不然以后安装包可就成功不了了

cd /etc/apt
sudo mv sources.list ./sources.list_localhost
sudo mv sources.list_old sources.list
sudo apt-get update

ubuntu 离线装包的更多相关文章

  1. ubuntu离线安装mysql

    一:ubuntu离线安装mysql 转载来源:https://blog.csdn.net/liuhuoxingkong/article/details/80696574 参考文章:https://ww ...

  2. 运维笔记--Ubuntu离线安装jdk1.8(JDK8)Java环境

    Ubuntu离线环境安装jdk1.8 系统版本:Ubuntu16.04 其他Ubuntu版本安装类似 Jdk版本:8 1. 下载相应离线软件包 Jdk oracle官方下载地址:https://www ...

  3. Ubuntu离线安装包制作(转载)

    From:http://blog.csdn.net/nupt123456789/article/details/11649603 1.应用场景 a.需要在多台电脑上安装同一软件,且软件很大,下载需要时 ...

  4. Ubuntu离线安装软件包

    一.应用场景 a.当我们需要在多台电脑安装同一个软件,并且这个软件很大,下载需要很长时间时 b.需要安装软件的ubuntu不能上网 二.离线安装包的制作 2.1.通过如下指令下载XXXX软件所需要的d ...

  5. python如何离线装包 离线如何部署python环境

    1,安装python windows: 我用的是python3.6.6.exe安装包,需要提前下载好 ubuntu: 自带的python,如果是ubuntu18.04的话,自带的应该是3.6.8 2, ...

  6. Ubuntu 离线安装 docker

    1.下载离线包,网址:https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 离线安装docker需要下载3个 ...

  7. ubuntu安装包查找及安装

    官方包源: http://packages.ubuntu.com/ ubuntu下当前安装的包保存在在:/var/cache/apt/archives ubuntu下当前安装的运用: /usr/sha ...

  8. Ubuntu离线更新flashplugin

    当网络太烂时,Ubuntu更新可能会卡在下载flashplugin上面,继而出错.在U论坛上找到一篇帖子,寻到成功安装flashplugin-installer的方法: 1.首先使用sudo apt- ...

  9. Ubuntu离线安装VSCode(附带前期准备工作)

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 在说正式步骤前先把准备工作做到位: 1.IP设置,这个因为是GUI的,手动设置 ...

随机推荐

  1. 【笔记】机器学习 - 李宏毅 - 12 - CNN

    Convolutional Neural Network CNN 卷积神经网络 1. 为什么要用CNN? CNN一般都是用来做图像识别的,当然其他的神经网络也可以做,也就是输入一张图的像素数组(pix ...

  2. 在oracle中使用merge into实现更新和插入数据

    目录 oracle中使用merge into DUAL表解释 使用场景 用法 单表 多表 oracle中使用merge into DUAL表解释 在Oracle数据库中,dual是Oracle中的一个 ...

  3. IntelliJ IDEA搭建一个简单的springboot项目

    一.IDEA 安装包 百度网盘链接:https://pan.baidu.com/s/1MYgZaBVWXgy64KxnoeJSyg 提取码:7dh2 IDEA注册码获取:http://idea.lan ...

  4. jQuery笔记(六)jQuery之Ajax

    jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对 ...

  5. C#实例之简单聊天室(状态管理)

    前言        状态管理是在同一页或不同页的多个请求发生时,维护状态和页信息的过程.因为Web应用程序的通信协议使用了无状态的HTTP协议,所以当客户端请求页面时,ASP.NET服务器端都会重新生 ...

  6. hdu 1257 最少拦截系统 (最长上升子序列/贪心)

    题意:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭 ...

  7. MySQL之分库分表

    MySQL之分库分表(MyCAT实现)   分库分表介绍 随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用.每个应用都有独立的数据库. 数据的切分分为两种: ...

  8. HTML5,从零开始

    一.网页的组成部分 <!DOCTYPE html> <html> <head> <title>这是标题</title> <meta c ...

  9. H5_0009:关于HTML5中Canvas的宽、高设置问题

    关于HTML5中Canvas的宽.高设置问题 Canvas元素默认宽 300px, 高 150px, 设置其宽高可以使用如下方法(不会被拉伸): 方法一:        <canvas widt ...

  10. Dart单例模式最佳实践

    /// Created by Capt. Michael @ CaptNotes.com on 02/17/2020. class Singleton { Singleton._(); static ...