mirror of
https://github.com/rancher/os.git
synced 2025-08-10 11:03:16 +00:00
make the iso run also get the ssh and cloud-init so testing the installer is easier
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
This commit is contained in:
parent
087bc6fd2d
commit
cc78ff7bd1
@ -10,6 +10,7 @@ RUN apt-get update && \
|
|||||||
dosfstools \
|
dosfstools \
|
||||||
gccgo \
|
gccgo \
|
||||||
genisoimage \
|
genisoimage \
|
||||||
|
gettext \
|
||||||
git \
|
git \
|
||||||
isolinux \
|
isolinux \
|
||||||
less \
|
less \
|
||||||
@ -34,7 +35,7 @@ RUN apt-get update && \
|
|||||||
ENV DAPPER_ENV VERSION DEV_BUILD RUNTEST
|
ENV DAPPER_ENV VERSION DEV_BUILD RUNTEST
|
||||||
ENV DAPPER_DOCKER_SOCKET true
|
ENV DAPPER_DOCKER_SOCKET true
|
||||||
ENV DAPPER_SOURCE /go/src/github.com/rancher/os
|
ENV DAPPER_SOURCE /go/src/github.com/rancher/os
|
||||||
ENV DAPPER_OUTPUT ./bin ./dist ./build/initrd
|
ENV DAPPER_OUTPUT ./bin ./dist ./build/initrd ./build/kernel
|
||||||
ENV DAPPER_RUN_ARGS --privileged
|
ENV DAPPER_RUN_ARGS --privileged
|
||||||
ENV TRASH_CACHE ${DAPPER_SOURCE}/.trash-cache
|
ENV TRASH_CACHE ${DAPPER_SOURCE}/.trash-cache
|
||||||
ENV SHELL /bin/bash
|
ENV SHELL /bin/bash
|
||||||
@ -55,7 +56,8 @@ ARG DOCKER_BUILD_VERSION=1.10.3
|
|||||||
ARG DOCKER_BUILD_PATCH_VERSION=v${DOCKER_BUILD_VERSION}-ros1
|
ARG DOCKER_BUILD_PATCH_VERSION=v${DOCKER_BUILD_VERSION}-ros1
|
||||||
ARG SELINUX_POLICY_URL=https://github.com/rancher/refpolicy/releases/download/v0.0.3/policy.29
|
ARG SELINUX_POLICY_URL=https://github.com/rancher/refpolicy/releases/download/v0.0.3/policy.29
|
||||||
|
|
||||||
ARG KERNEL_URL_amd64=https://github.com/rancher/os-kernel/releases/download/v4.9-rancher2/linux-4.9-rancher2-x86.tar.gz
|
ARG KERNEL_VERSION_amd64=4.9.3-rancher
|
||||||
|
ARG KERNEL_URL_amd64=https://github.com/rancher/os-kernel/releases/download/v${KERNEL_VERSION_amd64}/linux-${KERNEL_VERSION_amd64}-x86.tar.gz
|
||||||
ARG KERNEL_URL_arm64=https://github.com/imikushin/os-kernel/releases/download/Estuary-4.4.0-arm64.8/linux-4.4.0-rancher-arm64.tar.gz
|
ARG KERNEL_URL_arm64=https://github.com/imikushin/os-kernel/releases/download/Estuary-4.4.0-arm64.8/linux-4.4.0-rancher-arm64.tar.gz
|
||||||
|
|
||||||
ARG DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz
|
ARG DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz
|
||||||
@ -100,6 +102,7 @@ ENV BUILD_DOCKER_URL=BUILD_DOCKER_URL_${ARCH} \
|
|||||||
GOARCH=$ARCH \
|
GOARCH=$ARCH \
|
||||||
HOSTNAME_DEFAULT=${HOSTNAME_DEFAULT} \
|
HOSTNAME_DEFAULT=${HOSTNAME_DEFAULT} \
|
||||||
IMAGE_NAME=${IMAGE_NAME} \
|
IMAGE_NAME=${IMAGE_NAME} \
|
||||||
|
KERNEL_VERSION=${KERNEL_VERSION_amd64} \
|
||||||
KERNEL_URL=KERNEL_URL_${ARCH} \
|
KERNEL_URL=KERNEL_URL_${ARCH} \
|
||||||
KERNEL_URL_amd64=${KERNEL_URL_amd64} \
|
KERNEL_URL_amd64=${KERNEL_URL_amd64} \
|
||||||
KERNEL_URL_arm64=${KERNEL_URL_arm64} \
|
KERNEL_URL_arm64=${KERNEL_URL_arm64} \
|
||||||
@ -119,7 +122,8 @@ RUN mkdir -p ${DOWNLOADS}
|
|||||||
|
|
||||||
# Download kernel
|
# Download kernel
|
||||||
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
|
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
|
||||||
RUN if [ -n "${!KERNEL_URL}" ]; then \
|
RUN echo "... Downloading ${!KERNEL_URL}"; \
|
||||||
|
if [ -n "${!KERNEL_URL}" ]; then \
|
||||||
curl -fL ${!KERNEL_URL} > ${DOWNLOADS}/kernel.tar.gz \
|
curl -fL ${!KERNEL_URL} > ${DOWNLOADS}/kernel.tar.gz \
|
||||||
;fi
|
;fi
|
||||||
|
|
||||||
|
@ -189,10 +189,6 @@ func runInstall(image, installType, cloudConfig, device, kappend string, force,
|
|||||||
"install",
|
"install",
|
||||||
"-t", installType,
|
"-t", installType,
|
||||||
"-d", device,
|
"-d", device,
|
||||||
// "-f", strconv.FormatBool(force),
|
|
||||||
// "--no-reboot", strconv.FormatBool(!reboot),
|
|
||||||
// "-c", `"`+cloudConfig+`"`,
|
|
||||||
// "-a", `"`+kappend+`"`
|
|
||||||
}
|
}
|
||||||
if force {
|
if force {
|
||||||
installerCmd = append(installerCmd, "-f")
|
installerCmd = append(installerCmd, "-f")
|
||||||
@ -280,9 +276,11 @@ func layDownOS(image, installType, cloudConfig, device, kappend string) error {
|
|||||||
log.Errorf("%s", err)
|
log.Errorf("%s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Infof("defer")
|
//log.Infof("installGrub")
|
||||||
log.Infof("installGrub")
|
//err = installGrub(baseName, device)
|
||||||
err = installGrub(baseName, device)
|
log.Infof("installSyslinux")
|
||||||
|
err = installSyslinux(device, baseName, bootDir)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("%s", err)
|
log.Errorf("%s", err)
|
||||||
return err
|
return err
|
||||||
@ -529,6 +527,7 @@ p
|
|||||||
1
|
1
|
||||||
|
|
||||||
|
|
||||||
|
a
|
||||||
w
|
w
|
||||||
`))
|
`))
|
||||||
w.Close()
|
w.Close()
|
||||||
@ -566,7 +565,8 @@ func formatdevice(device, partition string) error {
|
|||||||
log.Debugf("formatdevice %s", partition)
|
log.Debugf("formatdevice %s", partition)
|
||||||
|
|
||||||
//mkfs.ext4 -F -i 4096 -L RANCHER_STATE ${partition}
|
//mkfs.ext4 -F -i 4096 -L RANCHER_STATE ${partition}
|
||||||
cmd := exec.Command("mkfs.ext4", "-F", "-i", "4096", "-L", "RANCHER_STATE", partition)
|
// -O ^64bit: for syslinux: http://www.syslinux.org/wiki/index.php?title=Filesystem#ext
|
||||||
|
cmd := exec.Command("mkfs.ext4", "-F", "-i", "4096", "-O", "^64bit", "-L", "RANCHER_STATE", partition)
|
||||||
log.Debugf("Run(%v)", cmd)
|
log.Debugf("Run(%v)", cmd)
|
||||||
cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr
|
cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
@ -645,21 +645,33 @@ func installSyslinux(device, baseName, bootDir string) error {
|
|||||||
log.Debugf("installSyslinux")
|
log.Debugf("installSyslinux")
|
||||||
|
|
||||||
//dd bs=440 count=1 if=/usr/lib/syslinux/mbr/mbr.bin of=${device}
|
//dd bs=440 count=1 if=/usr/lib/syslinux/mbr/mbr.bin of=${device}
|
||||||
cmd := exec.Command("dd", "bs=440", "count=1", "if=/usr/lib/syslinux/mbr/mbr.bin", "of="+device)
|
// ubuntu: /usr/lib/syslinux/mbr/mbr.bin
|
||||||
|
// alpine: /usr/share/syslinux/mbr.bin
|
||||||
|
cmd := exec.Command("dd", "bs=440", "count=1", "if=/usr/share/syslinux/mbr.bin", "of="+device)
|
||||||
|
cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr
|
||||||
|
log.Debugf("Run(%v)", cmd)
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
log.Printf("%s", err)
|
log.Printf("dd: %s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
//cp /usr/lib/syslinux/modules/bios/* ${baseName}/${bootDir}syslinux
|
//cp /usr/lib/syslinux/modules/bios/* ${baseName}/${bootDir}syslinux
|
||||||
cmd = exec.Command("sh", "-c", "cp", "/usr/lib/syslinux/modules/bios/*", filepath.Join(baseName, bootDir+"syslinux"))
|
files, _ := ioutil.ReadDir("/usr/share/syslinux/")
|
||||||
if err := cmd.Run(); err != nil {
|
for _, file := range files {
|
||||||
log.Printf("%s", err)
|
if file.IsDir() {
|
||||||
return err
|
continue
|
||||||
|
}
|
||||||
|
if err := dfs.CopyFile(filepath.Join("/usr/share/syslinux/", file.Name()), filepath.Join(baseName, bootDir, "syslinux"), file.Name()); err != nil {
|
||||||
|
log.Errorf("copy syslinux: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//extlinux --install ${baseName}/${bootDir}syslinux
|
//extlinux --install ${baseName}/${bootDir}syslinux
|
||||||
cmd = exec.Command("extlinux", "--install", filepath.Join(baseName, bootDir+"syslinux"))
|
cmd = exec.Command("extlinux", "--install", filepath.Join(baseName, bootDir+"syslinux"))
|
||||||
|
cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr
|
||||||
|
log.Debugf("Run(%v)", cmd)
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
log.Printf("%s", err)
|
log.Printf("extlinuux: %s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -672,20 +684,26 @@ func installSyslinuxRaid(baseName, bootDir string) error {
|
|||||||
//dd bs=440 count=1 if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sdb
|
//dd bs=440 count=1 if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sdb
|
||||||
//cp /usr/lib/syslinux/modules/bios/* ${baseName}/${bootDir}syslinux
|
//cp /usr/lib/syslinux/modules/bios/* ${baseName}/${bootDir}syslinux
|
||||||
//extlinux --install --raid ${baseName}/${bootDir}syslinux
|
//extlinux --install --raid ${baseName}/${bootDir}syslinux
|
||||||
cmd := exec.Command("dd", "bs=440", "count=1", "if=/usr/lib/syslinux/mbr/mbr.bin", "of=/dev/sda")
|
cmd := exec.Command("dd", "bs=440", "count=1", "if=/usr/share/syslinux/mbr.bin", "of=/dev/sda")
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
log.Printf("%s", err)
|
log.Printf("%s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd = exec.Command("dd", "bs=440", "count=1", "if=/usr/lib/syslinux/mbr/mbr.bin", "of=/dev/sdb")
|
cmd = exec.Command("dd", "bs=440", "count=1", "if=/usr/share/syslinux/mbr.bin", "of=/dev/sdb")
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
log.Printf("%s", err)
|
log.Printf("%s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd = exec.Command("sh", "-c", "cp", "/usr/lib/syslinux/modules/bios/*", filepath.Join(baseName, bootDir+"syslinux"))
|
//cp /usr/lib/syslinux/modules/bios/* ${baseName}/${bootDir}syslinux
|
||||||
if err := cmd.Run(); err != nil {
|
files, _ := ioutil.ReadDir("/usr/share/syslinux/")
|
||||||
log.Printf("%s", err)
|
for _, file := range files {
|
||||||
return err
|
if file.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if err := dfs.CopyFile(filepath.Join("/usr/share/syslinux/", file.Name()), filepath.Join(baseName, bootDir, "syslinux"), file.Name()); err != nil {
|
||||||
|
log.Errorf("copy syslinux: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cmd = exec.Command("extlinux", "--install", filepath.Join(baseName, bootDir+"syslinux"))
|
cmd = exec.Command("extlinux", "--install", filepath.Join(baseName, bootDir+"syslinux"))
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
@ -784,13 +802,13 @@ func installRancher(baseName, bootDir, VERSION, DIST string) error {
|
|||||||
log.Debugf("installRancher")
|
log.Debugf("installRancher")
|
||||||
|
|
||||||
//cp ${DIST}/initrd ${baseName}/${bootDir}initrd-${VERSION}-rancheros
|
//cp ${DIST}/initrd ${baseName}/${bootDir}initrd-${VERSION}-rancheros
|
||||||
if err := dfs.CopyFile(DIST+"/initrd", baseName, bootDir+"initrd-"+VERSION+"-rancheros"); err != nil {
|
if err := dfs.CopyFile(DIST+"/initrd", filepath.Join(baseName, bootDir), "initrd-"+VERSION+"-rancheros"); err != nil {
|
||||||
log.Errorf("copy initrd: ", err)
|
log.Errorf("copy initrd: ", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
//cp ${DIST}/vmlinuz ${baseName}/${bootDir}vmlinuz-${VERSION}-rancheros
|
//cp ${DIST}/vmlinuz ${baseName}/${bootDir}vmlinuz-${VERSION}-rancheros
|
||||||
if err := dfs.CopyFile(DIST+"/vmlinuz", baseName, bootDir+"vmlinuz-"+VERSION+"-rancheros"); err != nil {
|
if err := dfs.CopyFile(DIST+"/vmlinuz", filepath.Join(baseName, bootDir), "vmlinuz-"+VERSION+"-rancheros"); err != nil {
|
||||||
log.Errorf("copy vmlinuz: %s", err)
|
log.Errorf("copy vmlinuz: %s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
21
init/init.go
21
init/init.go
@ -71,7 +71,6 @@ func loadModules(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sysInit(c *config.CloudConfig) (*config.CloudConfig, error) {
|
func sysInit(c *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("sysInit")
|
|
||||||
args := append([]string{config.SysInitBin}, os.Args[1:]...)
|
args := append([]string{config.SysInitBin}, os.Args[1:]...)
|
||||||
|
|
||||||
cmd := &exec.Cmd{
|
cmd := &exec.Cmd{
|
||||||
@ -225,12 +224,10 @@ func RunInit() error {
|
|||||||
var metadataFile []byte
|
var metadataFile []byte
|
||||||
initFuncs := []config.CfgFunc{
|
initFuncs := []config.CfgFunc{
|
||||||
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("dfs.PrepareFs")
|
|
||||||
return c, dfs.PrepareFs(&mountConfig)
|
return c, dfs.PrepareFs(&mountConfig)
|
||||||
},
|
},
|
||||||
mountOem,
|
mountOem,
|
||||||
func(_ *config.CloudConfig) (*config.CloudConfig, error) {
|
func(_ *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("showconfig")
|
|
||||||
cfg := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
|
|
||||||
if cfg.Rancher.Debug {
|
if cfg.Rancher.Debug {
|
||||||
@ -246,7 +243,6 @@ func RunInit() error {
|
|||||||
},
|
},
|
||||||
loadModules,
|
loadModules,
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("read B2D_STATE")
|
|
||||||
if util.ResolveDevice("LABEL=B2D_STATE") != "" {
|
if util.ResolveDevice("LABEL=B2D_STATE") != "" {
|
||||||
boot2DockerEnvironment = true
|
boot2DockerEnvironment = true
|
||||||
cfg.Rancher.State.Dev = "LABEL=B2D_STATE"
|
cfg.Rancher.State.Dev = "LABEL=B2D_STATE"
|
||||||
@ -274,7 +270,6 @@ func RunInit() error {
|
|||||||
return cfg, nil
|
return cfg, nil
|
||||||
},
|
},
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("tryMountAndBootstrap")
|
|
||||||
var err error
|
var err error
|
||||||
cfg, shouldSwitchRoot, err = tryMountAndBootstrap(cfg)
|
cfg, shouldSwitchRoot, err = tryMountAndBootstrap(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -283,7 +278,6 @@ func RunInit() error {
|
|||||||
return cfg, nil
|
return cfg, nil
|
||||||
},
|
},
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("cloudinit")
|
|
||||||
if err := os.MkdirAll(config.CloudConfigDir, os.ModeDir|0755); err != nil {
|
if err := os.MkdirAll(config.CloudConfigDir, os.ModeDir|0755); err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
@ -319,7 +313,6 @@ func RunInit() error {
|
|||||||
return cfg, nil
|
return cfg, nil
|
||||||
},
|
},
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("readconfig")
|
|
||||||
var err error
|
var err error
|
||||||
cloudConfigBootFile, err = ioutil.ReadFile(config.CloudConfigBootFile)
|
cloudConfigBootFile, err = ioutil.ReadFile(config.CloudConfigBootFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -332,7 +325,6 @@ func RunInit() error {
|
|||||||
return cfg, nil
|
return cfg, nil
|
||||||
},
|
},
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("switchroot")
|
|
||||||
if !shouldSwitchRoot {
|
if !shouldSwitchRoot {
|
||||||
return cfg, nil
|
return cfg, nil
|
||||||
}
|
}
|
||||||
@ -344,7 +336,6 @@ func RunInit() error {
|
|||||||
},
|
},
|
||||||
mountOem,
|
mountOem,
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("write meta")
|
|
||||||
if err := os.MkdirAll(config.CloudConfigDir, os.ModeDir|0755); err != nil {
|
if err := os.MkdirAll(config.CloudConfigDir, os.ModeDir|0755); err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
@ -357,7 +348,6 @@ func RunInit() error {
|
|||||||
return cfg, nil
|
return cfg, nil
|
||||||
},
|
},
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("set sate")
|
|
||||||
if boot2DockerEnvironment {
|
if boot2DockerEnvironment {
|
||||||
if err := config.Set("rancher.state.dev", cfg.Rancher.State.Dev); err != nil {
|
if err := config.Set("rancher.state.dev", cfg.Rancher.State.Dev); err != nil {
|
||||||
log.Errorf("Failed to update rancher.state.dev: %v", err)
|
log.Errorf("Failed to update rancher.state.dev: %v", err)
|
||||||
@ -370,12 +360,10 @@ func RunInit() error {
|
|||||||
return config.LoadConfig(), nil
|
return config.LoadConfig(), nil
|
||||||
},
|
},
|
||||||
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("preparefs2")
|
|
||||||
return c, dfs.PrepareFs(&mountConfig)
|
return c, dfs.PrepareFs(&mountConfig)
|
||||||
},
|
},
|
||||||
loadModules,
|
loadModules,
|
||||||
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
showMounts("setproxy")
|
|
||||||
network.SetProxyEnvironmentVariables(c)
|
network.SetProxyEnvironmentVariables(c)
|
||||||
return c, nil
|
return c, nil
|
||||||
},
|
},
|
||||||
@ -400,12 +388,3 @@ func RunInit() error {
|
|||||||
|
|
||||||
return pidOne()
|
return pidOne()
|
||||||
}
|
}
|
||||||
|
|
||||||
func showMounts(msg string) {
|
|
||||||
mounts, err := ioutil.ReadFile("/proc/mounts")
|
|
||||||
if err != nil {
|
|
||||||
log.Infof("+++++++++ showMounts(%s) ERROR: %s", msg, err)
|
|
||||||
} else {
|
|
||||||
log.Infof("+++++++++ showMounts(%s) %s", msg, mounts)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
FROM ubuntu:16.04
|
FROM rancher/os-alpineconsole
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
# TODO: redo as cross platform
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install --no-install-recommends -y udev grub2 parted kexec-tools extlinux syslinux-common && \
|
|
||||||
rm -rf /var/lib/apt/*
|
|
||||||
|
|
||||||
COPY ./build/vmlinuz ./build/initrd /dist/
|
# not installed atm udev, grub2, kexe-toos
|
||||||
COPY conf ./build/ros /scripts/
|
# parted: partprobe, e2fsprogs: mkfs.ext4, syslinux: extlinux&syslinux
|
||||||
|
RUN apk --no-cache add syslinux parted e2fsprogs
|
||||||
|
|
||||||
|
COPY conf /scripts/
|
||||||
|
|
||||||
ARG VERSION
|
ARG VERSION
|
||||||
|
ARG KERNEL_VERSION
|
||||||
ENV VERSION=${VERSION}
|
ENV VERSION=${VERSION}
|
||||||
|
ENV KERNEL_VERSION=${KERNEL_VERSION}
|
||||||
|
|
||||||
|
# TODO: separate out the 3 elements below - so we can mix and match updates
|
||||||
|
COPY ./build/vmlinuz-${KERNEL_VERSION} ./build/initrd ./build/ros /dist/
|
||||||
ENTRYPOINT ["/scripts/ros"]
|
ENTRYPOINT ["/scripts/ros"]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
default rancheros
|
default rancheros
|
||||||
label rancheros
|
label rancheros
|
||||||
kernel /boot/vmlinuz
|
kernel /boot/vmlinuz-${KERNEL_VERSION}
|
||||||
initrd /boot/initrd
|
initrd /boot/initrd
|
||||||
append quiet rancher.autologin=tty1 rancher.autologin=ttyS0
|
append quiet rancher.autologin=tty1 rancher.autologin=ttyS0
|
||||||
|
@ -44,7 +44,11 @@ if [ -e ${DOWNLOADS}/kernel.tar.gz ]; then
|
|||||||
for i in vmlinuz vmlinux; do
|
for i in vmlinuz vmlinux; do
|
||||||
if [ -e ${BUILD}/kernel/boot/${i}-* ]; then
|
if [ -e ${BUILD}/kernel/boot/${i}-* ]; then
|
||||||
mkdir -p dist/artifacts
|
mkdir -p dist/artifacts
|
||||||
cp ${BUILD}/kernel/boot/${i}-* dist/artifacts/vmlinuz
|
# frustratingly, the vmlinuz versioned filename != the tag name, so we need to do some guessing
|
||||||
|
# for eg, 4.9-rc8-rancher2 is called vmlinuz-4.9.0-rc8-rancher
|
||||||
|
echo "Copy ${BUILD}/kernel/boot/${i}-* to dist/artifacts/vmlinuz-${KERNEL_VERSION}"
|
||||||
|
cp ${BUILD}/kernel/boot/${i}-* "dist/artifacts/vmlinuz-${KERNEL_VERSION}"
|
||||||
|
cp ${BUILD}/kernel/boot/${i}-* ${BUILD}/kernel/vmlinuz
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@ -54,6 +58,15 @@ if [ -e ${DOWNLOADS}/kernel.tar.gz ]; then
|
|||||||
cp -rf ${BUILD}/kernel/lib ${INITRD_DIR}/usr/
|
cp -rf ${BUILD}/kernel/lib ${INITRD_DIR}/usr/
|
||||||
depmod -b ${INITRD_DIR}/usr $(basename ${INITRD_DIR}/usr/lib/modules/*)
|
depmod -b ${INITRD_DIR}/usr $(basename ${INITRD_DIR}/usr/lib/modules/*)
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "no ${DOWNLOADS}/kernel.tar.gz found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ls -lah dist/artifacts/vmlinuz-*
|
||||||
|
if [ ! -e "dist/artifacts/vmlinuz-${KERNEL_VERSION}" ]; then
|
||||||
|
echo "Can't find dist/artifacts/vmlinuz-${KERNEL_VERSION}"
|
||||||
|
exit -1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e ${DOWNLOADS}/policy.29 ]; then
|
if [ -e ${DOWNLOADS}/policy.29 ]; then
|
||||||
|
@ -10,7 +10,7 @@ INITRD=${ARTIFACTS}/initrd
|
|||||||
|
|
||||||
mkdir -p ${ARTIFACTS}
|
mkdir -p ${ARTIFACTS}
|
||||||
|
|
||||||
if [ ! -f ${ARTIFACTS}/vmlinuz ]; then
|
if [ ! -f ${ARTIFACTS}/vmlinuz-${KERNEL_VERSION} ]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -7,16 +7,22 @@ source ./scripts/version
|
|||||||
|
|
||||||
DOCKERFILE=./scripts/installer/Dockerfile.${ARCH}
|
DOCKERFILE=./scripts/installer/Dockerfile.${ARCH}
|
||||||
|
|
||||||
if [ ! -f $DOCKERFILE ] || [ ! -f dist/artifacts/vmlinuz ] || [ ! -f dist/artifacts/initrd ]; then
|
if [ ! -f $DOCKERFILE ] || [ ! -f dist/artifacts/vmlinuz-${KERNEL_VERSION} ] || [ ! -f dist/artifacts/initrd ]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p ./scripts/installer/build
|
mkdir -p ./scripts/installer/build
|
||||||
cp ./dist/artifacts/{initrd,vmlinuz} ./scripts/installer/build
|
cp ./dist/artifacts/initrd ./scripts/installer/build
|
||||||
|
cp ./dist/artifacts/vmlinuz-${KERNEL_VERSION} ./scripts/installer/build
|
||||||
cp ./bin/ros ./scripts/installer/build
|
cp ./bin/ros ./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} \
|
||||||
|
--build-arg KERNEL_VERSION=${KERNEL_VERSION} \
|
||||||
|
-f $DOCKERFILE \
|
||||||
|
./scripts/installer
|
||||||
docker save -o dist/artifacts/installer.tar ${OS_REPO}/os:${VERSION}${SUFFIX}
|
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}
|
||||||
|
@ -13,13 +13,13 @@ CHECKSUM=iso-checksums.txt
|
|||||||
mkdir -p ${CD}/boot/isolinux
|
mkdir -p ${CD}/boot/isolinux
|
||||||
mkdir -p ${CD}/rancheros
|
mkdir -p ${CD}/rancheros
|
||||||
|
|
||||||
if [ ! -f ${ARTIFACTS}/vmlinuz ] || [ ! -f ${ARTIFACTS}/initrd ]; then
|
if [ ! -f ${ARTIFACTS}/vmlinuz-${KERNEL_VERSION} ] || [ ! -f ${ARTIFACTS}/initrd ]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp ${ARTIFACTS}/initrd ${CD}/boot
|
cp ${ARTIFACTS}/initrd ${CD}/boot
|
||||||
cp ${ARTIFACTS}/vmlinuz ${CD}/boot
|
cp ${ARTIFACTS}/vmlinuz-${KERNEL_VERSION} ${CD}/boot
|
||||||
cp scripts/isolinux.cfg ${CD}/boot/isolinux
|
cat scripts/isolinux.cfg | envsubst > ${CD}/boot/isolinux/isolinux.cfg
|
||||||
cp /usr/lib/ISOLINUX/isolinux.bin ${CD}/boot/isolinux
|
cp /usr/lib/ISOLINUX/isolinux.bin ${CD}/boot/isolinux
|
||||||
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 ${CD}/boot/isolinux
|
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 ${CD}/boot/isolinux
|
||||||
# add the installer image to the iso for non-network / dev/test
|
# add the installer image to the iso for non-network / dev/test
|
||||||
|
11
scripts/run
11
scripts/run
@ -125,8 +125,7 @@ if [ "$QEMU" == "1" ] || [ "$BOOT_ISO" == "1" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$QIND" != "1" ]; then
|
||||||
if [ "$QEMU" == "1" ]; then
|
|
||||||
CCROOT=${BUILD}/cloud-config
|
CCROOT=${BUILD}/cloud-config
|
||||||
rm -rf ${CCROOT}
|
rm -rf ${CCROOT}
|
||||||
mkdir -p ${CCROOT}
|
mkdir -p ${CCROOT}
|
||||||
@ -143,6 +142,10 @@ if [ "$QEMU" == "1" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
HOME=${HOME:-/}
|
HOME=${HOME:-/}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$QEMU" == "1" ]; then
|
||||||
|
|
||||||
if [ "$INSTALLED" == "1" ]; then
|
if [ "$INSTALLED" == "1" ]; then
|
||||||
# kernel args only works when using -kernel
|
# kernel args only works when using -kernel
|
||||||
KERNEL_ARGS=""
|
KERNEL_ARGS=""
|
||||||
@ -185,6 +188,10 @@ elif [ "$BOOT_ISO" == "1" ]; then
|
|||||||
$(eval "${hd["$ARCH"]} ${HD}") \
|
$(eval "${hd["$ARCH"]} ${HD}") \
|
||||||
${SECOND_DRIVE_ENABLE} \
|
${SECOND_DRIVE_ENABLE} \
|
||||||
-smp 1 \
|
-smp 1 \
|
||||||
|
-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 \
|
||||||
-boot d \
|
-boot d \
|
||||||
-cdrom ./dist/artifacts/rancheros.iso
|
-cdrom ./dist/artifacts/rancheros.iso
|
||||||
elif [ "$QIND" == "1" ]; then
|
elif [ "$QIND" == "1" ]; then
|
||||||
|
@ -34,7 +34,8 @@ BUILD=build
|
|||||||
BASE=$(pwd)
|
BASE=$(pwd)
|
||||||
UNAME=$(uname)
|
UNAME=$(uname)
|
||||||
|
|
||||||
KERNEL=${BASE}/dist/artifacts/vmlinuz
|
#KERNEL=${BASE}/dist/artifacts/vmlinuz-${KERNEL_VERSION}*
|
||||||
|
KERNEL=${BASE}/build/kernel/vmlinuz
|
||||||
INITRD_SRC=${BASE}/build/initrd
|
INITRD_SRC=${BASE}/build/initrd
|
||||||
INITRD=${BASE}/build/initrd.tmp
|
INITRD=${BASE}/build/initrd.tmp
|
||||||
|
|
||||||
|
@ -46,29 +46,37 @@ func (s *QemuSuite) TearDownTest(c *C) {
|
|||||||
time.Sleep(time.Millisecond * 1000)
|
time.Sleep(time.Millisecond * 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *QemuSuite) RunQemu(c *C, additionalArgs ...string) {
|
// RunQemuWith requires user to specify all the `scripts/run` arguments
|
||||||
runArgs := []string{
|
func (s *QemuSuite) RunQemuWith(c *C, additionalArgs ...string) error {
|
||||||
"--qemu",
|
|
||||||
"--no-rebuild",
|
|
||||||
"--no-rm-usr",
|
|
||||||
"--fresh",
|
|
||||||
}
|
|
||||||
runArgs = append(runArgs, additionalArgs...)
|
|
||||||
|
|
||||||
c.Assert(s.runQemu(runArgs...), IsNil)
|
err := s.runQemu(additionalArgs...)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *QemuSuite) RunQemuInstalled(c *C, additionalArgs ...string) {
|
func (s *QemuSuite) RunQemu(c *C, additionalArgs ...string) error {
|
||||||
runArgs := []string{
|
runArgs := []string{
|
||||||
"--qemu",
|
"--qemu",
|
||||||
"--no-rebuild",
|
"--no-rebuild",
|
||||||
"--no-rm-usr",
|
"--no-rm-usr",
|
||||||
"--installed",
|
|
||||||
"--fresh",
|
"--fresh",
|
||||||
}
|
}
|
||||||
runArgs = append(runArgs, additionalArgs...)
|
runArgs = append(runArgs, additionalArgs...)
|
||||||
|
|
||||||
c.Assert(s.runQemu(runArgs...), IsNil)
|
err := s.RunQemuWith(c, runArgs...)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *QemuSuite) RunQemuInstalled(c *C, additionalArgs ...string) error {
|
||||||
|
runArgs := []string{
|
||||||
|
"--fresh",
|
||||||
|
}
|
||||||
|
runArgs = append(runArgs, additionalArgs...)
|
||||||
|
|
||||||
|
err := s.RunQemu(c, runArgs...)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *QemuSuite) runQemu(args ...string) error {
|
func (s *QemuSuite) runQemu(args ...string) error {
|
||||||
@ -136,6 +144,14 @@ func (s *QemuSuite) CheckCall(c *C, additionalArgs ...string) {
|
|||||||
c.Assert(s.MakeCall(additionalArgs...), IsNil)
|
c.Assert(s.MakeCall(additionalArgs...), IsNil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *QemuSuite) Stop(c *C) {
|
||||||
|
//s.MakeCall("sudo halt")
|
||||||
|
//time.Sleep(2000 * time.Millisecond)
|
||||||
|
//c.Assert(s.WaitForSSH(), IsNil)
|
||||||
|
c.Assert(s.qemuCmd.Process.Kill(), IsNil)
|
||||||
|
time.Sleep(time.Millisecond * 1000)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *QemuSuite) Reboot(c *C) {
|
func (s *QemuSuite) Reboot(c *C) {
|
||||||
s.MakeCall("sudo reboot")
|
s.MakeCall("sudo reboot")
|
||||||
time.Sleep(3000 * time.Millisecond)
|
time.Sleep(3000 * time.Millisecond)
|
||||||
|
29
tests/installer_test.go
Normal file
29
tests/installer_test.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package integration
|
||||||
|
|
||||||
|
import . "gopkg.in/check.v1"
|
||||||
|
|
||||||
|
func (s *QemuSuite) TestInstall(c *C) {
|
||||||
|
// ./scripts/run --no-format --append "rancher.debug=true" --iso --fresh
|
||||||
|
runArgs := []string{
|
||||||
|
"--iso",
|
||||||
|
"--fresh",
|
||||||
|
"--no-format",
|
||||||
|
"--append", "rancher.debug=true",
|
||||||
|
}
|
||||||
|
s.RunQemuWith(c, runArgs...)
|
||||||
|
|
||||||
|
s.CheckCall(c, `
|
||||||
|
set -ex
|
||||||
|
sudo ros install --force --no-reboot --device /dev/vda`)
|
||||||
|
|
||||||
|
s.Stop(c)
|
||||||
|
|
||||||
|
// ./scripts/run --no-format --append "rancher.debug=true"
|
||||||
|
runArgs = []string{
|
||||||
|
"--no-format",
|
||||||
|
"--append", "rancher.debug=true",
|
||||||
|
}
|
||||||
|
s.RunQemuWith(c, runArgs...)
|
||||||
|
|
||||||
|
s.CheckCall(c, "sudo ros -v")
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user