cloud-init离线安装编程环境

2023-05-16

本博客主要介绍通过cloud-init工具实现在Ubuntu16.04操作系统和KVM虚拟化技术下实现创建虚拟机同时离线安装编程环境

文章目录

  • 1. 准备离线安装包
    • 1)下载软件包
    • 2)创建放置软件包的磁盘
    • 3)挂载磁盘并进行分区
    • 4)放置软件包并准备安装环境
  • 2. 准备cloud-init环境
    • 1)为虚拟机准备cloud-init环境
    • 2)准备好安装软件的shell文件
  • 3. 准备user-data文件
  • 4. 磁盘挂载


1. 准备离线安装包

在可以联网的机器上准备好编程语言包,在这里我们以python3.6.8和java8为例

1)下载软件包

在python下载链接和java下载链接处下载好Python-3.6.8.tgz和jdk-8u321-linux-x64.tar.gz

2)创建放置软件包的磁盘

sudo qemu-img create -f qcow2 package.qcow2 1G

3)挂载磁盘并进行分区

将该磁盘挂载到一台虚拟机上,并对该磁盘进行分区,这里我们假设该磁盘挂载到虚拟机上后为/dev/vda,我们将该磁盘划分为一个区

sudo fdisk /dev/vda

输入n创建一个新分区,剩余选项全都默认回车,创建好之后输入w保存分区并退出,这样我们就在该磁盘上划分出一个1G的分区/dev/vda1,接着对该分区进行格式化

sudo mkfs.ext4 /dev/vda1

4)放置软件包并准备安装环境

我们将磁盘挂载到虚拟机的一个目录下,这里我们在/home/ubuntu下创建package目录,并挂载磁盘,之后创建不同的文件夹用于区别不同的软件包

cd ~
sudo mkdir package
sudo mount /dev/vda1 package
cd package
sudo mkdir java-8
sudo mkdir python-3.6.8

分别将python包和java包放到对应的目录下,因为我们这里采用离线安装python,所以需要预先准备好编译python的软件,同样在该目录下创建目录用于存放python编译软件,这里我们采用递归下载所有deb依赖的方式获取所有的软件包

mkdir python-pkgs
cd python-pkgs
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends libbz2-dev libssl-dev libreadline6 libreadline6-dev libsqlite3-dev | grep -v i386 | grep "^\w")

最终该磁盘的目录如下显示:

.
├── java-8
│   └── jdk-8u321-linux-x64.tar.gz #java源码包
├── lost+found
├── python-3.6.8
│   └── Python-3.6.8.tgz #python源码包
└── python-pkgs #python编译需要的软件包
    ├── cdebconf_0.198ubuntu1_amd64.deb
    ├── debconf_1.5.58ubuntu2_all.deb
    ├── dpkg_1.18.4ubuntu1.7_amd64.deb
    ├── gcc-6-base_6.0.1-0ubuntu1_amd64.deb
    ├── install-info_6.1.0.dfsg.1-5_amd64.deb
    ├── libbz2-1.0_1.0.6-8ubuntu0.2_amd64.deb
    ├── libbz2-dev_1.0.6-8ubuntu0.2_amd64.deb
    ├── libc6_2.23-0ubuntu11.3_amd64.deb
    ├── libc6-dev_2.23-0ubuntu11.3_amd64.deb
    ├── libc-dev-bin_2.23-0ubuntu11.3_amd64.deb
    ├── libdebian-installer4_0.102ubuntu1.1_amd64.deb
    ├── libgcc1_1%3a6.0.1-0ubuntu1_amd64.deb
    ├── libnewt0.52_0.52.18-1ubuntu2_amd64.deb
    ├── libpcre3_2%3a8.38-3.1_amd64.deb
    ├── libreadline6_6.3-8ubuntu2_amd64.deb
    ├── libreadline6-dev_6.3-8ubuntu2_amd64.deb
    ├── libselinux1_2.4-3build2_amd64.deb
    ├── libslang2_2.3.0-2ubuntu1.1_amd64.deb
    ├── libsqlite3-0_3.11.0-1ubuntu1.5_amd64.deb
    ├── libsqlite3-dev_3.11.0-1ubuntu1.5_amd64.deb
    ├── libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb
    ├── libssl-dev_1.0.2g-1ubuntu4.20_amd64.deb
    ├── libtextwrap1_0.1-14_amd64.deb
    ├── libtinfo5_6.0+20160213-1ubuntu1_amd64.deb
    ├── libtinfo-dev_6.0+20160213-1ubuntu1_amd64.deb
    ├── linux-libc-dev_4.4.0-210.242_amd64.deb
    ├── ncurses-bin_6.0+20160213-1ubuntu1_amd64.deb
    ├── readline-common_6.3-8ubuntu2_all.deb
    ├── zlib1g_1%3a1.2.8.dfsg-2ubuntu4.3_amd64.deb
    └── zlib1g-dev_1%3a1.2.8.dfsg-2ubuntu4.3_amd64.deb

完成上述操作后,就可以把磁盘从虚拟机上卸载下来

2. 准备cloud-init环境

这里我们需要一台模板虚拟机,可以参考之前的文章进行安装

1)为虚拟机准备cloud-init环境

参考cloud-init中NoCloud配置中使用方法的第一、二点对一台初始化的虚拟机进行安装并初始化文件和修改cloud-init配置文件操作。

2)准备好安装软件的shell文件

在/etc/cloud目录下,我们准备好安装软件包的shell文件,通过NoCloud启动该脚本文件执行安装

cd /etc/cloud
sudo vim package.sh

文件中的内容如下显示:

#!/bin/bash

package=$1

install_python()
{
    dpkg -i /mnt/python-pkgs/*.deb
    package_full_name=$(ls /mnt/$package/)
    package_name=${package_full_name%.*}
    tar -zxf /mnt/$package/$package_full_name -C /tmp/
    cd /tmp/$package_name
    ./configure && make && make install && make clean | cat > /dev/null
}         
         
install_java()
{
    username=$(ls /home/)        
    java_path="/usr/lib/jvm"
    mkdir $java_path
    tar -zxf /mnt/$package/*.gz -C $java_path
    package_name=$(ls $java_path)
    echo '
#set oracle jdk environment
export JAVA_HOME='$java_path/$package_name >> /home/$username/.bashrc
    echo 'export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:\${JAVA_HOME}/lib:\${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH' >> /home/$username/.bashrc
}

package_type=${package%%-*}
case $package_type in
python)
    install_python
    ;;
java)
    install_java
    ;;
*)
    return
    ;;
esac

该文件主要定义两个函数,用于安装java和python,通过在启动脚本文件时加入参数来判断安装什么环境,$1代表脚本文件后面带的参数,可以为python-3.6.8或者java-8,其中/mnt目录为我们将上面准备好的磁盘文件到时候直接挂载在虚拟机的/mnt目录下。完成以上操作后关闭虚拟机。

3. 准备user-data文件

我们在物理机上准备好user-data文件,用于传输到虚拟机上配合cloud-init执行操作

sudo vim user-data

user-data文件内容如下:

#cloud-config

chpasswd: 
    list: 
        - ubuntu:root
        - root:root
    expire: false

mounts: 
  - [ /dev/vda1, /mnt, auto, "defaults", "0", "0" ]

runcmd: 
  - sh /etc/cloud/package.sh java-8

文件中chpasswd为配置用户名和密码,如果不需要可以删除,mounts为将磁盘挂载到/mnt目录下,即我们上面准备好的软件包磁盘,runcmd为执行脚本文件,后面的java-8是脚本参数,编写好文件后,创建一个空的meta-data文件,如果不创建,cloud-init会执行失败

touch meta-data

通过iso生成工具将user-data和meta-data封装到iso镜像中

genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data

4. 磁盘挂载

将生成的seed.iso和包含安装包的磁盘挂载到虚拟机上,编辑虚拟机对应的xml文件,添加cdrom和disk内容,如果虚拟机已经有cdrom设备,则只需要添加源文件即可

virsh edit ubuntu16.04

添加内容如下:

<disk type='file' device='cdrom'> #如果已有cdrom设备,则只需要添加source file即可
  <driver name='qemu' type='raw'/>
  <source file='/home/xidian/static_file/cloud-init-file/package/seed.iso'/>
  <target dev='hdb' bus='ide'/>
  <readonly/>
  <address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
<disk type='file' device='disk'> #将生成的package.qcow2文件挂载到虚拟机上
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/package.qcow2'/> #packge.qcow2文件位置
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>

启动虚拟机,cloud-init读取cdrom设备的内容并执行user-data文件内容,触发脚本文件,安装编程环境

virsh start ubuntu16.04
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cloud-init离线安装编程环境 的相关文章

随机推荐

  • go get得到的东西不在$GOPATH中

    最近在ubuntu20 04上安装oci image tool xff0c 按照官方文档执行 xff0c 结果第一步就发现go get得到的东西找不到 xff0c 后来查阅了这篇博客 xff0c 发现了原因 xff0c 是因为开了gopro
  • 容器镜像加密-containerd imgcrypt实践

    最近在研究容器镜像加密 xff0c 发现国内对容器镜像这部分的博客好像不太多 xff0c 在看了一些人的博客后 xff0c 跟着他们的步骤进行了containerd imgcrypt的实践 xff0c 期间出现了一些错误 xff0c 决定记
  • ubuntu20.04安装howdy

    howdy是一款用于Linux系统的人脸识别身份验证系统 xff0c 可以看作是Windows中的Windows Hello的替代品 xff0c howdy在安装的过程中会去外网下载一些安装包 xff0c 所以前提条件是有访问外网的手段 h
  • zipimport.ZipImportError: can‘t decompress data; zlib not available

    在Ubuntu16 04上通过pyenv安装python3 6 8时出现以下错误 xff0c 记录一下 ubuntu 64 ubuntu pyenv span class token function install span 3 6 8
  • Ubuntu16.04安装zabbix4.0

    以下教程为Ubuntu16 04安装zabbix4 0 xff0c 需提前自己安装好Mysql数据库 其中第1 7点为主节点安装配置Zabbix server Zabbix agent Web前端 xff0c 第8点不用进行 xff1b 第
  • Ubuntu16.04搭建gitea1.14.1

    以下教程为在Ubuntu16 04上搭建gitea1 14 1 xff0c 同时附上官方教程链接 文章目录 1 数据库准备1 1 登录数据库1 2 创建gitea用户1 3 创建gitea数据库1 4 给gitea用户赋予数据库的权限1 5
  • ubuntu16.04搭建spice-html5用于配合KVM

    文章目录 0 配置需求1 启动spice客户端2 配置websockify3 配置spice html54 浏览器访问 0 配置需求 Firefox或Chrome浏览器 xff0c IE浏览器也可以 xff0c 但是效果不是太好 WebSo
  • python 数据挖掘中的数值计算

    一 环境安装 环境配置 xff1a OS xff1a Red Hat 4 4 7 11 查看命令 xff1a uname a xff1a 电脑以及操作系统的相关信息 cat proc version xff1a 正在运行的内核版本 cat
  • 银河麒麟下libguestfs-tools中virt工具无法使用情况

    银河麒麟下libguestfs tools中virt工具无法使用情况 问题描述 xff1a 在银河麒麟高级服务器版本V10下安装libguestfs tools工具包后 xff0c 使用virt xx等一系列命令都会出现以下错误 xff1a
  • ubuntu16.04搭建containerd

    本博客具体介绍在ubuntu16 04下安装containerd的过程 xff0c 有关ctr的命令都要有root权限才能运行 搭建过程 下载containerd安装包解压containerd安装包到根目录下启动containerd并设置开
  • KVM安装Windows11系列(一)

    本教程系列为KVM安装Windows11 xff0c 会分成两部分 xff0c 第一部分会跳过Windows11的硬件要求TPM和安全启动 xff0c 第二部分会安装TPM模拟器进行模拟 文章目录 软件环境下载Windows11镜像和驱动创
  • 容器技术对比(Docker/LXC/LXD/Multipass)

    DockerLXCLXDMultipass基本介绍为了打破 程序即应用 的观念 xff0c 通过镜像imges将作业系统核心除外 xff0c 运作应用程序所需的系统环境 xff0c 由下而上打包 xff0c 达到应用程序跨平台间的无缝接轨运
  • KVM虚拟机配置静态IP(一):Ubuntu16.04

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM虚拟机配置静态IP(二):Ubuntu18.04

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM虚拟机配置静态IP(三):Centos6

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM虚拟机配置静态IP(四):Centos7

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM下Ubuntu18.04打开设置注销问题

    问题描述 xff1a 在KVM中创建Ubuntu18 04 xff0c 打开系统设置 xff0c 发现直接注销 xff08 不是锁屏 xff0c 因为所有程序都退出 xff09 解决思路 在google上搜索发现大多数都是指向显卡问题 xf
  • cloud-init中NoCloud配置

    本文章主要记录cloud init工具中NoCloud数据源的使用方法 xff0c 可以搭配KVM镜像制作系列文章 xff0c 为用户定制操作系统 文章目录 NoCloud使用方法1 安装并初始化文件2 修改cloud init配置文件3
  • winform界面设计

    来自于以下两个地址 xff0c 为便于查阅 xff0c 所以全复制到了自己的BLOG xff1a http dotnet chinaitlab com VCNET 436373 html http www aspxboy com priva
  • cloud-init离线安装编程环境

    本博客主要介绍通过cloud init工具实现在Ubuntu16 04操作系统和KVM虚拟化技术下实现创建虚拟机同时离线安装编程环境 文章目录 1 准备离线安装包1 xff09 下载软件包2 xff09 创建放置软件包的磁盘3 xff09