我正在使用 EC2 用户数据来配置某些服务,然后再在新启动的实例上启动它们。我一直将其用作#cloud-boothook
用户数据的开头,它在 Precise 和较新版本上效果很好。但是,cloud-init
Lucid 上的最新软件包 (0.5.10) 不支持它。#!/bin/bash
在开头使用不起作用,因为它在启动过程中执行得太晚了(在服务启动之后)。
有没有办法cloud-init
从头开始安装,或者通过一些反向移植包安装?或者基本上还有其他方法可以以这种方式利用用户数据?
任何帮助我都会非常感激。
答案1
我认为你应该要求亚马逊升级你的实例,而不是反向移植可能会出现意外问题的东西。也就是说,如果你有正确的软件包,你可以从源代码构建。遗憾的是,以下指南不会帮助你从 Python 2.7 开始,有一个包云初始化依赖于,在 lucid 中不可用,从源代码编译并安装它,会破坏你的系统. 建议升级你的服务器安装。如果没有 python2.7 依赖项,下面的指南将会起作用:
在开始之前:
记住本指南不起作用。这是从源代码构建 cloud-init 的过程。我们需要一些在所有包中共享的构建依赖项:
sudo apt-get install dpkg-dev build-essentials cdbs debhelper po-debconf pyflakes pylint python-nose
继续。
构建依赖问题:
除了 cloud-init 构建所需的一个包之外,其他所有包都包含在存储库中。幸运的是,它背后没有依赖地狱,因为只需要构建 python:
mkdir ~/build && cd ~/build
wget http://archive.ubuntu.com/ubuntu/pool/main/m/mocker/mocker_1.0-0ubuntu3.dsc http://archive.ubuntu.com/ubuntu/pool/main/m/mocker/mocker_1.0.orig.tar.gz http://archive.ubuntu.com/ubuntu/pool/main/m/mocker/mocker_1.0-0ubuntu3.debian.tar.gz
dpkg-source -x mocker_1.0-0ubuntu3.dsc
cd mocker*
dpkg-buildpackage -us -uc -nc
现在你在父目录中已经有了一个不错的 debfile。你可以直接通过以下方式安装它:
sudo dpkg -i ../python-mocker_1.0-*.deb
下一个
构建 cloud-init
这很容易:
cd ~/build
wget http://archive.ubuntu.com/ubuntu/pool/main/c/cloud-init/cloud-init_0.6.3-0ubuntu1.dsc http://archive.ubuntu.com/ubuntu/pool/main/c/cloud-init/cloud-init_0.6.3.orig.tar.gz http://archive.ubuntu.com/ubuntu/pool/main/c/cloud-init/cloud-init_0.6.3-0ubuntu1.debian.tar.gz
dpkg-source -x cloud-init_0.6.3-0ubuntu1.dsc
cd cloud-init*
dpkg-buildpackage -us -uc -nc
再次,我们在父目录中得到了一个很好的 deb 文件:
sudo dpkg -i ../cloud-init*
完成了……或者我想这么说。