内网离线安拆docker-ce东西,带你来领会!
固然凡是我们都是利用收集来安拆 docker 的,但是关于平安要求比力高的营业或者用户来说,摆设产物需要在内网摆设,而内网凡是是无法拜候外部收集的,所以就需要通过内网停止安拆了。
1. yum 离线安拆包获取办法
下载软件包
那里以 CentOS7 为例停止阐明
# 替代并更新软件源
$ curl -o /etc/yum.repos.d/CentOS-Base.repo
# 生成缓存
$ yum makecache
# 添加docker-ce软件源
$ curl -o /etc/yum.repos.d/docker-ce.repo
生成缓存
$ yum makecache
# 前提前提
$ yum install -y yum-plugin-downloadonly
# 下载rpm安拆包,我那里以docker-ce为例阐明
$ yum install --downloadonly --downloaddir=./ docker-ce
展开全文
那里以 Ubuntu18.04 为例停止阐明
# 会存放在/var/cache/apt/archives目次下面
$ sudo apt-get install --download-only pppoe
2. yum 离线安拆 docker-ce 东西
安拆软件包
假设我们发现原有的操做系统已经安拆了 docker 东西,但是对应版本其实不能
称心我们的需要,能够将其卸载之后再次安拆即可。
# 搜刮已经安拆的docker安拆包
$ sudo yum list installed | grep docker
docker.x86_64 2:1.12.6-16.el7.centos @extras
# 别离删除安拆包
$ sudo yum –y remove docker.x86_64
利用我们打好的 docker-ce 的安拆包,施行安拆号令的时候报错。
# 安拆时一并安拆对应依靠
$ sudo yum install ./*.rpm
-- Finished Dependency Resolution
Error: Package: audit-libs-python-2.8.1-3.el7.x86_64 (/audit-libs-python-2.8.1-3.el7.x86_64)
Requires: audit-libs(x86-64) = 2.8.1-3.el7
Installed: audit-libs-2.8.1-3.el7_5.1.x86_64 (@updates)
audit-libs(x86-64) = 2.8.1-3.el7_5.1
Available: audit-libs-2.8.1-3.el7.x86_64 (base)
audit-libs(x86-64) = 2.8.1-3.el7
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
# 安拆的时候漠视以问题
$ rpm -ivh --force --nodeps ./*.rpm
能够发现可能为系统已经安拆了对应的包,将其移出目次外之后再次安拆。
# 挪动到上级目次
$ mv audit-libs-2.8.1-3.el7.x86_64.rpm ..
$ mv audit-libs-python-2.8.1-3.el7.x86_64.rpm ..
假设出缺少依靠的问题,就到下面网站中找对应缺失的相关依靠镜像。
# CentOS
/
总结下:固然操做系统的大版本是一致的,但是对应小版本纷歧致可能会存在对应 rpm 包小版本的纷歧致,而招致存在依靠问题,招致安拆时失败。
3. pip 离线安拆包获取办法
下载软件包
Python 情况安拆 package 的办法,一般是摘用 pip 号令在线从 PyPI 网站上面下载安拆的,那也是最为便利的路子。但是在某些情状下,要为一台离线的机器安拆 package 依靠包,其底子无法拜候外网情况。当然,一般大厂城市有内网 PyPI 代办署理,只要改一下 --index-url 参数即可。若无代办署理的情状下,只能将所有依靠到的 package 离线下载下来,放到离线的机器上安拆,即可。
因为手动下载所有依靠是一件十分痛苦的工作,所以我发现了 pip download 号令能够很好的处理那个问题。
# (1)确认需要的依靠包 - 外部第三方库
$ sudo vim requirements.txt
alembic
# (2)确认需要的依靠包 - 内部第三方库
$ sudo vim requirements.txt
--index-url
love_grilfriend
# (3)通过如下号令下载依靠
$ sudo pip download -d /root/packages -r requirements.txt
4. pip 离线安拆 package 办法
需要重视的是,
存在 online 和 offline 机器架构完全不异,也可能架构不不异。
[1] 架构不异
# 间接在online机器施行如下号令下载所有依靠package到当前目次
$ sudo pip download tensorflow
# 将目次内容拷贝到目标offline机器并目标offline机器施行
$ pip install --no-index --find-links=file:/data/tensorflow_package_dir tensorflow
# 不依靠其他库强逼安拆
$ pip install --no-deps tensorflow-1.2.3-cp36-cp36m-linux_x86_64.whl
[2] 架构差别
# pyenv+docker
# 架构差别的情状下,能够利用docker创建一个和目标机器不异的系统
# 然后,利用上面那中体例停止下载和安拆就能够了,也是很简单的,哈哈
# pyenv
# 通过pyenv安拆指定版本的python
$ curl -L
# 切换Python版本
$ pyenv global 2.7.13
# docker
# 先启动目标系统的docker镜像
$ docker run -it -v /offline_tensorflow_py3:/package ubuntu /bin/bash
# 在容器内安拆python
$ apt-get update apt-get install python python-pip
# 利用和不异架构的操做步调
[3] 存在问题 - 招致下文pip download失败的原因
PyPI 上 package 有好几种格局,不幸的是 PiPY 并没有规定一个 package 必需供给的安拆格局,有的只要 wheel 没有源文件,有的只要源文件没有 wheel 或 egg。
源文件(一般是.tar.gz 或.zip 文件,用 pip 安拆,与机器架构无关,但某些 package 可能涉及到 C/C++编译)
wheel 文件(二进造文件,拓展名为.whl,用 pip 安拆,无需编译,但与机器架构相关)
.egg 文件(二进造文件,用 easy_install 安拆,无需编译,但与机器架构相关)
# 只要指定--platform/--python-version/--implementation/--abi即可
pip download with the --platform, --python-version, --implementation, and --abi options provides the ability to fetch dependencies for an interpreter and system other than the ones that pip is running on.
--only-binary=:all: or --no-deps is required when using any of these options. It is important to note that these options all default to the current system/interpreter, and not to the most restrictive constraints (e.g. platform any, abi none, etc).
To avoid fetching dependencies that happen to match the constraint of the current interpreter (but not your target one), it is recommended to specify all of these options if you are specifying one of them. Generic dependencies (e.g. universal wheels, or dependencies with no platform, abi, or implementation constraints) will still match an over- constrained download requirement.
# 下载TensorFlow的pip包
pip download \
--only-binary=:all: \ # 只下载二进造package(即wheel或egg)
--platform linux_x86_64 \ # 阐明是linux 64位架构
--python-version 27 \ # Python 2.7
--implementation cp \ # Cython 一般都是那个
--abi cp27mu # 阐明器和系统的依靠关系的才能
tensorflow # 要下载的package名
5. 离线晋级 Linux 内核的办法
那里次要是由CentOS 的操做系统停止演示阐明
[1] 事务原因
在 CentOS7.3 的系统上面摆设 NFS 办事的时候,发现跨主机利用的话,需要开通多个端口才气包管一般的利用。但是,我之前在 Ubuntu18.04 的系统上利用 NFS 办事却只需要利用到默认的一个端口即可,那个端口就是 2049 了。看了 NFS 办事的版本号也是不异的,不断没有找到问题的原因,最初仍是我的 leader 发现是因为 Linux 操做系统的版本纷歧致招致的。
我们安拆 CentOS7.3 的裸机,系统默认的内核版本为 3.10,属于比力老的版本,招致部门功用无法利用。如今,最新不变的系统内核为 4.12 版本,所以需要将我们如今的系统内核版本晋级到最新的版本,即可处理上述问题。
[2] 晋级预备
# 备份重要数据
假设是虚拟机的话,利用快照停止备份
针对重要法式数据停止备份,例如 MySQL、Apache、Nginx等
# 查抄当前CentOS系统版本
$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
# 查抄当前CentOS系统内核版本
# 版天性量: 主分收ml(mainline),不变版(stable),持久庇护版lt(longterm)
$ uname -r
3.10.0-514.el7.x86_64
[3] 晋级步调 - 在线安拆
# 晋级CentOS7.X内核而且启用ELRepo仓库
# RedHat只容许利用yum晋级内核,CentOS容许利用ELRepo第三方仓库晋级内核
$ rpm --import
$ rpm -Uvh
# 安拆最新的主线不变内核
$ yum --enablerepo=elrepo-kernel install kernel-ml
# 设置GRUB默认的内核版本
# 修改含义: GRUB初始化页面的第一个内核将做为默认内核
$ vi /etc/default/grub
GRUB_DEFAULT=0
# 从头创建内核设置装备摆设
$ grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启机器并查看系统当前内核版本
$ uname -sr
Linux 4.12.0-1.el7.elrepo.x86_64
# 查看系统中全数的内核RPM包(可选操做)
$ rpm -qa | grep kernel
kernel-tools-3.10.0-514.26.2.el7.x86_64
kernel-devel-3.10.0-514.10.2.el7.x86_64
kernel-3.10.0-514.26.2.el7.x86_64
kernel-3.10.0-327.el7.x86_64
kernel-ml-4.12.0-1.el7.elrepo.x86_64
kernel-headers-3.10.0-514.26.2.el7.x86_64
kernel-devel-3.10.0-514.26.2.el7.x86_64
kernel-tools-libs-3.10.0-514.26.2.el7.x86_64
# 删除旧内核的RPM包(可选操做)
$ yum remove \
kernel-tools-3.10.0-514.26.2.el7.x86_64 \
kernel-devel-3.10.0-514.10.2.el7.x86_64 \
kernel-3.10.0-514.26.2.el7.x86_64 \
kernel-3.10.0-327.el7.x86_64 \
kernel-headers-3.10.0-514.26.2.el7.x86_64 \
kernel-devel-3.10.0-514.26.2.el7.x86_64 \
kernel-tools-libs-3.10.0-514.26.2.el7.x86_64
# 重启系统
$ reboot
[4] 晋级步调 - 离线安拆
# 无法上彀的办事器或者需要安拆指定版本内核的需求
# 我们能够把对应kernel的image的rpm包下载下来安拆
官方CentOS6地址: /
官方CentOS7地址: /
# 当然设置装备摆设了ELRepo仓库之后也是能够下载离线安拆包的
$ yum install -y yum-plugin-downloadonly
$ yum install --downloadonly --downloaddir=./ kernel-ml
# 将rpm包下载上传到办事器上并利用下面的号令安拆即可
$ yum -y install kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm
$ yum -y install kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm
6. pip 东西的相关问题汇总
汇总日常利用 pip 东西的常见错误和对应处置办法!
[1: 问题] 在利用新版的 pip 东西(在21+的版本之后)安拆某些库的时候,因为依靠库版本的纷歧致,pip 会不竭测验考试和、以此安拆已经存在的各个版本,来确实能否契合要求,且安拆期间不会抛出错误。那就招致,假设是 CI 东西触发的话,短时间之内其实不会停行(一个小时后主动被东西末行),招致问题不容易排出且浪费机器性能。
# 轮回安拆
$ pip install tensorflow
[1: 谜底] 能够在手动处置的时候,加上如下参数,就能够在安拆之后,敏捷抛出反常。如许我们就能够根据抛出的反常抵触版本,来修改 requirements.txt 文件,最初处理该问题。
# --use-deprecated=legacy-resolver
$ pip3 install -r ./requirements.txt --upgrade --use-deprecated=legacy-resolver
[2: 问题] 安拆 psycopg2 依靠包的时候,提醒如下问题:
# 报错信息
$ pip3 install psycopg2==2.8.4
creating pip-egg-info\psycopg2.egg-info
writing pip-egg-info\psycopg2.egg-info PKG-INFO
writing top-level names to pip-egg-info psycopg2.egg-info top_level.txt
writing dependency_links to pip-egg-info psycopg2.egg-info dependency_links.txt
writing manifest file 'pip-egg-info\psycopg2.egg-info\SOURCES.txt'
warning: manifest_maker: standard file '-c' not found
Error: pg_config executable not found.
Please add the directory containing pg_config to the PATH
or specify the full executable path with the option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
Command python setup.py egg_info failed with error code 1
[2: 谜底] 后来在那个 StackOverflow 才晓得了问题的原因,本来是系统少一个依靠包,招致的。
# 前提前提
$ sudo apt install postgresql-client
# Ubuntu - Python3
$ sudo apt install libpq-dev python3-dev
# Ubuntu - Python2
$ sudo apt install libpq-dev python-dev
$ sudo apt install build-essential
新的一年
新的征程
新的活动来袭~
等你来学!