在 Rackspace 上安装 Alpine

来自 Alpine Linux
此材料已过时...

这篇文章需要更新,以涵盖支持级别高于“无”的 alpine 版本。(讨论

此材料需要扩展...

这篇文章与 posix shell 不兼容,但应该兼容,因为 alpine 默认使用 ash

创建一个最小化的 rackspace 服务器

Debian 7

512MB, 20GB


从现有服务器复制设置到 apkovl 中

第一步是创建 Alpine 配置文件,其中包含主机的基本配置。我们需要新机器在启动时启动网络和 ssh,以便我们可以在重启后重新连接到它。

为覆盖层创建基本布局

mkdir overlay
cd overlay
mkdir -p etc/ssh etc/network etc/runlevels/{default,boot,sysinit,shutdown} root/.ssh etc/lbu etc/apk

如果您想保留现有的主机身份(例如 SSH 密钥),您可以将其复制过来

cp -a /etc/{passwd,group,shadow,gshadow,hostname,network/interfaces,ssh} etc/
cp /etc/network/interfaces etc/network
echo "nameserver 8.8.8.8" > etc/resolv.conf

复制您的 ssh authorized_keys 并确保将其包含在未来

cp -a /root/.ssh/authorized_keys root/.ssh
echo "/root/.ssh" > etc/lbu/include


编辑 etc/passwd 并将 bash 更改为 /bin/sh。

sed -i -e '/^root:/s:/bin/bash:/bin/sh:' etc/passwd
注意:如果您不这样做,任何人(即使拥有物理访问权限)都将无法登录到机器。

确保接口文件行尾没有空格。Busybox ifup 非常挑剔。

sed -i -e 's/ *$//' etc/network/interfaces

使用必要的软件包创建 apk world (/etc/apk/world)

echo "alpine-base iproute2 openssh bash" > etc/apk/world

(bash 在技术上不是必需的,但如果忘记正确编辑 etc/passwd 文件,则将其包含在内)

仔细检查 IP 配置和 ssh 密钥。

最后,使必要的服务自动启动并创建覆盖文件

ln -s /etc/init.d/{hwclock,modules,sysctl,hostname,bootmisc,syslog} etc/runlevels/boot/
ln -s /etc/init.d/{devfs,dmesg,mdev,hwdrivers} etc/runlevels/sysinit/
ln -s /etc/init.d/{networking,sshd} etc/runlevels/default/
ln -s /etc/init.d/{mount-ro,killprocs,savecache} etc/runlevels/shutdown/
tar czf ../host.apkovl.tar.gz *

使用 "tar tzf" 验证覆盖层,查看它是否包含在正确的位置中的所有内容,并确保它在 / 目录中

tar tzvf ../host.apkovl.tar.gz
cp ../host.apkovl.tar.gz /

将 Alpine cd-rom 镜像安装到硬盘

我们需要复制两组信息:引导内核(kernel、initramdisk 和引导配置)和操作系统引导数据(overlay、apk 软件包和内核模块)。

下载 alpine iso 并挂载它;例如

 wget https://dl-3.alpinelinux.org/alpine/v3.2/releases/x86_64/alpine-xen-3.2.2-x86_64.iso
 # We will grab the sha512 sum from another mirror
 wget https://nl.alpinelinux.org/alpine/v3.2/releases/x86_64/alpine-xen-3.2.2-x86_64.iso.sha512
 sha512sum -c alpine-xen-3.2.2-x86_64.iso.sha512 
 mkdir /cdrom
 mount alpine*.iso /cdrom -o loop

将 cd-rom 镜像的内容复制到当前安装的根目录,然后设置 grub

cp -a /cdrom/* /
mkdir /cache
umount /cdrom

cat - >/boot/grub/grub.cfg <<EOF 
set default="0"
set timeout="3"

menuentry "Alpine Linux" {
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='(hd0,msdos1)'
	linux /boot/vmlinuz-grsec root=$(blkid /dev/xvda1 | awk '{ print $2 }' | sed 's/"//g') modules=sd-mod,usb-storage,ext3 quiet
        initrd /boot/initramfs-grsec
}
EOF
警告:在 Alpine 3.2 及更早版本中,Xen ISO 镜像不包含 openssh。如果您希望能够远程 ssh 进入您的机器,请按照这些说明进行操作。


下载 base iso 并复制 apks

wget https://dl-3.alpinelinux.org/alpine/v3.2/releases/x86_64/alpine-3.2.2-x86_64.iso
# We will grab the sha512 sum from another mirror
wget https://nl.alpinelinux.org/alpine/v3.2/releases/x86_64/alpine-3.2.2-x86_64.iso.sha512
sha512sum -c alpine-3.2.2-x86_64.iso.sha512 
mount alpine-3*.iso /cdrom -o loop
cp -a /cdrom/apks/* /apks


重启并检查一切是否按预期恢复。

清理

一旦您的服务器恢复,您就可以开始了。但是,旧的 Debian 系统仍然在 xvda1 上;并且 ipv6 未启用。这些可选步骤将解决该问题

启用 ipv6

echo "ipv6" >> /etc/modules
modprobe ipv6

您可以重新启动或重新启动网络(并重新登录)。


清除旧的东西

mount /media/UUID* -o remount,rw
cd /media/UUID*
rm -rf $( find -type d -maxdepth 1 | grep -v 'apks' | grep -v 'boot' | grep -v 'lost+found' )
# the above command will take a while
rm *.iso
find -type l -exec rm {} \;
rm $( find boot  -maxdepth 1 -type f | grep -v grsec)
# Now we blank out the disk - this will take a long time
dd if=/dev/zero of=foo
rm foo
sync

重启后,一切应该就绪。