在 Rackspace 上安装 Alpine
![]() 这篇文章需要更新,以涵盖支持级别高于“无”的 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

下载 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
重启后,一切应该就绪。