mirror of
https://github.com/rancher/os.git
synced 2025-07-04 10:36:14 +00:00
commit
a22075aef2
57
scripts/create-installed
Executable file
57
scripts/create-installed
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd $(dirname $0)/..
|
||||||
|
|
||||||
|
source ./scripts/run-common
|
||||||
|
|
||||||
|
INSTALLER=${BASE}/dist/artifacts/installer.tar
|
||||||
|
|
||||||
|
if [ ! -e ${INITRD} ]; then
|
||||||
|
cp bin/ros ${INITRD_SRC}/usr/bin/ros
|
||||||
|
./scripts/hash-initrd
|
||||||
|
pushd ${INITRD_SRC} >/dev/null
|
||||||
|
find . | cpio -H newc -o | gzip -1 > ${INITRD}
|
||||||
|
popd >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p {dist,build/openstack/latest}
|
||||||
|
|
||||||
|
cat > build/openstack/latest/user_data << EOF
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
trap "poweroff" EXIT
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
mount -t 9p -o trans=virtio,version=9p2000.L config-2 /mnt
|
||||||
|
|
||||||
|
touch log
|
||||||
|
openvt -s -- tail -f log &
|
||||||
|
cat /mnt/installer.tar | system-docker load
|
||||||
|
ros install -d /dev/vda -f --no-reboot >log 2>&1
|
||||||
|
|
||||||
|
touch /mnt/success
|
||||||
|
EOF
|
||||||
|
|
||||||
|
rm -f build/{success,hd.img}
|
||||||
|
qemu-img create -f qcow2 build/hd.img 8G
|
||||||
|
cp ${INSTALLER} build/installer.tar
|
||||||
|
qemu-system-${QEMUARCH} -serial stdio \
|
||||||
|
-enable-kvm \
|
||||||
|
-drive if=virtio,file=build/hd.img \
|
||||||
|
-kernel ${KERNEL} \
|
||||||
|
-initrd ${INITRD} \
|
||||||
|
-m 2048 \
|
||||||
|
-append "${DEFAULT_KERNEL_ARGS}" \
|
||||||
|
-smp 1 \
|
||||||
|
-nographic \
|
||||||
|
-display none \
|
||||||
|
-fsdev local,id=conf,security_model=none,path=$(pwd)/build \
|
||||||
|
-device virtio-9p-pci,fsdev=conf,mount_tag=config-2
|
||||||
|
|
||||||
|
[ -f build/success ]
|
||||||
|
|
||||||
|
mkdir -p state
|
||||||
|
cp build/hd.img state/hd.img
|
@ -16,5 +16,6 @@ cp ./dist/artifacts/{initrd,vmlinuz} ./scripts/installer/build
|
|||||||
trap "rm -rf ./scripts/installer/build" EXIT
|
trap "rm -rf ./scripts/installer/build" EXIT
|
||||||
|
|
||||||
docker build -t ${OS_REPO}/os:${VERSION}${SUFFIX} --build-arg VERSION=${VERSION} -f $DOCKERFILE ./scripts/installer
|
docker build -t ${OS_REPO}/os:${VERSION}${SUFFIX} --build-arg VERSION=${VERSION} -f $DOCKERFILE ./scripts/installer
|
||||||
|
docker save -o dist/artifacts/installer.tar ${OS_REPO}/os:${VERSION}${SUFFIX}
|
||||||
echo ${OS_REPO}/os:${VERSION}${SUFFIX} > dist/images
|
echo ${OS_REPO}/os:${VERSION}${SUFFIX} > dist/images
|
||||||
echo Built ${OS_REPO}/os:${VERSION}${SUFFIX}
|
echo Built ${OS_REPO}/os:${VERSION}${SUFFIX}
|
||||||
|
117
scripts/run
117
scripts/run
@ -4,47 +4,7 @@ set -e
|
|||||||
|
|
||||||
cd $(dirname $0)/..
|
cd $(dirname $0)/..
|
||||||
|
|
||||||
HOST_ARCH=${HOST_ARCH:-amd64}
|
source ./scripts/run-common
|
||||||
ARCH=${ARCH:-amd64}
|
|
||||||
|
|
||||||
declare -A qemuarch=( ["amd64"]="x86_64" ["arm"]="arm" ["arm64"]="aarch64" )
|
|
||||||
declare -A ttycons=( ["amd64"]="ttyS0" ["arm"]="ttyAMA0" ["arm64"]="ttyAMA0" )
|
|
||||||
declare -A machine=( ["amd64"]="" ["arm"]="-M virt" ["arm64"]="-M virt" )
|
|
||||||
declare -A cpu=( ["amd64"]="" ["arm"]="-cpu cortex-a8" ["arm64"]="-cpu cortex-a57" )
|
|
||||||
declare -A network=(
|
|
||||||
["amd64"]="-net nic,vlan=0,model=virtio -net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher-dev"
|
|
||||||
["arm"]="-netdev user,id=unet,hostfwd=tcp::2222-:22,hostname=rancher-dev -device virtio-net-device,netdev=unet"
|
|
||||||
)
|
|
||||||
network["arm64"]=${network["arm"]}
|
|
||||||
|
|
||||||
hd_amd64() {
|
|
||||||
echo "-drive if=virtio,file=$1"
|
|
||||||
}
|
|
||||||
hd_arm() {
|
|
||||||
echo "-drive if=none,id=hd0,file=$1 -device virtio-blk-device,drive=hd0"
|
|
||||||
}
|
|
||||||
declare -A hd=( ["amd64"]="hd_amd64" ["arm"]="hd_arm" ["arm64"]="hd_arm" )
|
|
||||||
|
|
||||||
cd_amd64() {
|
|
||||||
echo "-hdc $1"
|
|
||||||
}
|
|
||||||
cd_arm() {
|
|
||||||
echo "-drive if=none,id=cd0,file=$1 -device virtio-blk-device,drive=cd0"
|
|
||||||
}
|
|
||||||
declare -A cd=( ["amd64"]="cd_amd64" ["arm"]="cd_arm" ["arm64"]="cd_arm" )
|
|
||||||
|
|
||||||
BUILD=build
|
|
||||||
BASE=$(pwd)
|
|
||||||
UNAME=$(uname)
|
|
||||||
|
|
||||||
KERNEL=${BASE}/dist/artifacts/vmlinuz
|
|
||||||
INITRD_SRC=${BASE}/build/initrd
|
|
||||||
INITRD=${BASE}/build/initrd.tmp
|
|
||||||
|
|
||||||
QEMU=1
|
|
||||||
FORMAT=1
|
|
||||||
RM_USR=1
|
|
||||||
REBUILD=1
|
|
||||||
|
|
||||||
while [ "$#" -gt 0 ]; do
|
while [ "$#" -gt 0 ]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
@ -93,6 +53,10 @@ while [ "$#" -gt 0 ]; do
|
|||||||
--fresh)
|
--fresh)
|
||||||
FRESH=1
|
FRESH=1
|
||||||
;;
|
;;
|
||||||
|
--installed)
|
||||||
|
./scripts/create-installed
|
||||||
|
INSTALLED=1
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
@ -100,9 +64,6 @@ while [ "$#" -gt 0 ]; do
|
|||||||
shift 1
|
shift 1
|
||||||
done
|
done
|
||||||
|
|
||||||
QEMUARCH=${qemuarch["${ARCH}"]}
|
|
||||||
TTYCONS=${ttycons["${ARCH}"]}
|
|
||||||
|
|
||||||
if [ "$QEMU" == "1" ] && ! which qemu-system-${QEMUARCH}; then
|
if [ "$QEMU" == "1" ] && ! which qemu-system-${QEMUARCH}; then
|
||||||
QEMU=0
|
QEMU=0
|
||||||
fi
|
fi
|
||||||
@ -120,7 +81,7 @@ if [ "$REBUILD" == "1" ] || [ ! -e ${INITRD} ]; then
|
|||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
KERNEL_ARGS="quiet rancher.password=rancher console=${TTYCONS} rancher.autologin=${TTYCONS} ${QEMU_APPEND}"
|
KERNEL_ARGS="${DEFAULT_KERNEL_ARGS} ${QEMU_APPEND}"
|
||||||
if [ "$FORMAT" == "1" ]; then
|
if [ "$FORMAT" == "1" ]; then
|
||||||
KERNEL_ARGS="${KERNEL_ARGS} rancher.state.dev=LABEL=RANCHER_STATE rancher.state.formatzero=true rancher.state.autoformat=[/dev/sda,/dev/vda]"
|
KERNEL_ARGS="${KERNEL_ARGS} rancher.state.dev=LABEL=RANCHER_STATE rancher.state.formatzero=true rancher.state.autoformat=[/dev/sda,/dev/vda]"
|
||||||
fi
|
fi
|
||||||
@ -168,29 +129,51 @@ if [ "$QEMU" == "1" ]; then
|
|||||||
KVM_ENABLE="-enable-kvm"
|
KVM_ENABLE="-enable-kvm"
|
||||||
CPU="-cpu host"
|
CPU="-cpu host"
|
||||||
fi
|
fi
|
||||||
set -x
|
|
||||||
HOME=${HOME:-/}
|
HOME=${HOME:-/}
|
||||||
exec qemu-system-${QEMUARCH} -serial stdio \
|
if [ "$INSTALLED" == "1" ]; then
|
||||||
-rtc base=utc,clock=host \
|
set -x
|
||||||
${KVM_ENABLE} \
|
exec qemu-system-${QEMUARCH} -serial stdio \
|
||||||
${CPU} \
|
-rtc base=utc,clock=host \
|
||||||
${machine["$ARCH"]} \
|
${KVM_ENABLE} \
|
||||||
-kernel ${KERNEL} \
|
${CPU} \
|
||||||
-initrd ${INITRD} \
|
${machine["$ARCH"]} \
|
||||||
-m 2048 \
|
-m 2048 \
|
||||||
${network["$ARCH"]} \
|
${network["$ARCH"]} \
|
||||||
$(eval "${hd["$ARCH"]} ${HD}") \
|
$(eval "${hd["$ARCH"]} ${HD}") \
|
||||||
${SECOND_DRIVE_ENABLE} \
|
${SECOND_DRIVE_ENABLE} \
|
||||||
-smp 1 \
|
-smp 1 \
|
||||||
-append "${KERNEL_ARGS}" \
|
-nographic \
|
||||||
-nographic \
|
-display none \
|
||||||
-display none \
|
-fsdev local,security_model=passthrough,readonly,id=fsdev0,path=${CCROOT} \
|
||||||
-fsdev local,security_model=passthrough,readonly,id=fsdev0,path=${CCROOT} \
|
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=config-2 \
|
||||||
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=config-2 \
|
-fsdev local,security_model=none,id=fsdev1,path=${HOME} \
|
||||||
-fsdev local,security_model=none,id=fsdev1,path=${HOME} \
|
-device virtio-9p-pci,id=fs1,fsdev=fsdev1,mount_tag=home \
|
||||||
-device virtio-9p-pci,id=fs1,fsdev=fsdev1,mount_tag=home \
|
${QEMU_ARGS} \
|
||||||
${QEMU_ARGS} \
|
"${@}"
|
||||||
"${@}"
|
else
|
||||||
|
set -x
|
||||||
|
exec qemu-system-${QEMUARCH} -serial stdio \
|
||||||
|
-rtc base=utc,clock=host \
|
||||||
|
${KVM_ENABLE} \
|
||||||
|
${CPU} \
|
||||||
|
${machine["$ARCH"]} \
|
||||||
|
-kernel ${KERNEL} \
|
||||||
|
-initrd ${INITRD} \
|
||||||
|
-m 2048 \
|
||||||
|
${network["$ARCH"]} \
|
||||||
|
$(eval "${hd["$ARCH"]} ${HD}") \
|
||||||
|
${SECOND_DRIVE_ENABLE} \
|
||||||
|
-smp 1 \
|
||||||
|
-append "${KERNEL_ARGS}" \
|
||||||
|
-nographic \
|
||||||
|
-display none \
|
||||||
|
-fsdev local,security_model=passthrough,readonly,id=fsdev0,path=${CCROOT} \
|
||||||
|
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=config-2 \
|
||||||
|
-fsdev local,security_model=none,id=fsdev1,path=${HOME} \
|
||||||
|
-device virtio-9p-pci,id=fs1,fsdev=fsdev1,mount_tag=home \
|
||||||
|
${QEMU_ARGS} \
|
||||||
|
"${@}"
|
||||||
|
fi
|
||||||
|
|
||||||
elif [ "$QIND" == "1" ]; then
|
elif [ "$QIND" == "1" ]; then
|
||||||
|
|
||||||
|
49
scripts/run-common
Executable file
49
scripts/run-common
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
HOST_ARCH=${HOST_ARCH:-amd64}
|
||||||
|
ARCH=${ARCH:-amd64}
|
||||||
|
|
||||||
|
declare -A qemuarch=( ["amd64"]="x86_64" ["arm"]="arm" ["arm64"]="aarch64" )
|
||||||
|
declare -A ttycons=( ["amd64"]="ttyS0" ["arm"]="ttyAMA0" ["arm64"]="ttyAMA0" )
|
||||||
|
declare -A machine=( ["amd64"]="" ["arm"]="-M virt" ["arm64"]="-M virt" )
|
||||||
|
declare -A cpu=( ["amd64"]="" ["arm"]="-cpu cortex-a8" ["arm64"]="-cpu cortex-a57" )
|
||||||
|
declare -A network=(
|
||||||
|
["amd64"]="-net nic,vlan=0,model=virtio -net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher-dev"
|
||||||
|
["arm"]="-netdev user,id=unet,hostfwd=tcp::2222-:22,hostname=rancher-dev -device virtio-net-device,netdev=unet"
|
||||||
|
)
|
||||||
|
network["arm64"]=${network["arm"]}
|
||||||
|
|
||||||
|
hd_amd64() {
|
||||||
|
echo "-drive if=virtio,file=$1"
|
||||||
|
}
|
||||||
|
hd_arm() {
|
||||||
|
echo "-drive if=none,id=hd0,file=$1 -device virtio-blk-device,drive=hd0"
|
||||||
|
}
|
||||||
|
declare -A hd=( ["amd64"]="hd_amd64" ["arm"]="hd_arm" ["arm64"]="hd_arm" )
|
||||||
|
|
||||||
|
cd_amd64() {
|
||||||
|
echo "-hdc $1"
|
||||||
|
}
|
||||||
|
cd_arm() {
|
||||||
|
echo "-drive if=none,id=cd0,file=$1 -device virtio-blk-device,drive=cd0"
|
||||||
|
}
|
||||||
|
declare -A cd=( ["amd64"]="cd_amd64" ["arm"]="cd_arm" ["arm64"]="cd_arm" )
|
||||||
|
|
||||||
|
BUILD=build
|
||||||
|
BASE=$(pwd)
|
||||||
|
UNAME=$(uname)
|
||||||
|
|
||||||
|
KERNEL=${BASE}/dist/artifacts/vmlinuz
|
||||||
|
INITRD_SRC=${BASE}/build/initrd
|
||||||
|
INITRD=${BASE}/build/initrd.tmp
|
||||||
|
|
||||||
|
QEMU=1
|
||||||
|
FORMAT=1
|
||||||
|
RM_USR=1
|
||||||
|
REBUILD=1
|
||||||
|
|
||||||
|
QEMUARCH=${qemuarch["${ARCH}"]}
|
||||||
|
TTYCONS=${ttycons["${ARCH}"]}
|
||||||
|
|
||||||
|
DEFAULT_KERNEL_ARGS="quiet rancher.password=rancher console=${TTYCONS} rancher.autologin=${TTYCONS}"
|
@ -56,7 +56,23 @@ func (s *QemuSuite) RunQemu(additionalArgs ...string) error {
|
|||||||
}
|
}
|
||||||
runArgs = append(runArgs, additionalArgs...)
|
runArgs = append(runArgs, additionalArgs...)
|
||||||
|
|
||||||
s.qemuCmd = exec.Command(s.runCommand, runArgs...)
|
return s.runQemu(runArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *QemuSuite) RunQemuInstalled(additionalArgs ...string) error {
|
||||||
|
runArgs := []string{
|
||||||
|
"--qemu",
|
||||||
|
"--no-rebuild",
|
||||||
|
"--no-rm-usr",
|
||||||
|
"--installed",
|
||||||
|
}
|
||||||
|
runArgs = append(runArgs, additionalArgs...)
|
||||||
|
|
||||||
|
return s.runQemu(runArgs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *QemuSuite) runQemu(args ...string) error {
|
||||||
|
s.qemuCmd = exec.Command(s.runCommand, args...)
|
||||||
s.qemuCmd.Stdout = os.Stdout
|
s.qemuCmd.Stdout = os.Stdout
|
||||||
s.qemuCmd.Stderr = os.Stderr
|
s.qemuCmd.Stderr = os.Stderr
|
||||||
if err := s.qemuCmd.Start(); err != nil {
|
if err := s.qemuCmd.Start(); err != nil {
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
package integration
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
. "gopkg.in/check.v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *QemuSuite) TestInstall(c *C) {
|
|
||||||
err := s.RunQemu("--no-format")
|
|
||||||
c.Assert(err, IsNil)
|
|
||||||
|
|
||||||
s.LoadInstallerImage(c)
|
|
||||||
|
|
||||||
s.CheckCall(c, fmt.Sprintf(`
|
|
||||||
sudo mkfs.ext4 /dev/vda
|
|
||||||
sudo ros install -f --no-reboot -d /dev/vda -i rancher/os:%s%s`, Version, Suffix))
|
|
||||||
}
|
|
26
tests/upgrade_test.go
Normal file
26
tests/upgrade_test.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package integration
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
. "gopkg.in/check.v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *QemuSuite) TestUpgrade(c *C) {
|
||||||
|
err := s.RunQemuInstalled()
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
|
s.CheckCall(c, `
|
||||||
|
set -ex
|
||||||
|
sudo ros os upgrade -i rancher/os:v0.5.0 --force --no-reboot`)
|
||||||
|
|
||||||
|
s.Reboot(c)
|
||||||
|
|
||||||
|
s.CheckCall(c, "sudo ros -v | grep v0.5.0")
|
||||||
|
s.LoadInstallerImage(c)
|
||||||
|
s.CheckCall(c, fmt.Sprintf("sudo ros os upgrade -i rancher/os:%s%s --force --no-reboot", Version, Suffix))
|
||||||
|
|
||||||
|
s.Reboot(c)
|
||||||
|
|
||||||
|
s.CheckCall(c, fmt.Sprintf("sudo ros -v | grep %s", Version))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user