176 lines
5.2 KiB
V
176 lines
5.2 KiB
V
module herocontainers
|
|
|
|
import freeflowuniverse.herolib.osal
|
|
import freeflowuniverse.herolib.ui.console
|
|
import os
|
|
|
|
@[params]
|
|
pub struct GetArgs {
|
|
pub mut:
|
|
reset bool
|
|
}
|
|
|
|
// builder machine based on arch and install vlang
|
|
pub fn (mut e CEngine) builder_base(args GetArgs) !Builder {
|
|
name := 'base'
|
|
if !args.reset && e.builder_exists(name)! {
|
|
return e.builder_get(name)!
|
|
}
|
|
console.print_header('buildah base build')
|
|
|
|
mut builder := e.builder_new(name: name, from: 'scratch', delete: true)!
|
|
mount_path := builder.mount_to_path()!
|
|
if mount_path.len < 4 {
|
|
return error('mount_path needs to be +4 chars')
|
|
}
|
|
osal.exec(
|
|
cmd: '
|
|
|
|
export MOUNT_PATH=\'${mount_path}\'
|
|
|
|
mmdebstrap --variant=minbase --components="main,universe" --include="apt,base-files,base-passwd,bash,coreutils" noble \${MOUNT_PATH}
|
|
|
|
echo "Binding essential directories..."
|
|
mount --bind /dev "\${MOUNT_PATH}/dev"
|
|
mount --bind /proc "\${MOUNT_PATH}/proc"
|
|
mount --bind /sys "\${MOUNT_PATH}/sys"
|
|
|
|
echo "tzdata tzdata/Areas select Europe" | chroot "\${MOUNT_PATH}" debconf-set-selections
|
|
echo "tzdata tzdata/Zones/Europe select Brussels" | chroot "\${MOUNT_PATH}" debconf-set-selections
|
|
|
|
chroot \${MOUNT_PATH} apt update
|
|
|
|
# Set up APT for non-interactive installation
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
export DEBCONF_NONINTERACTIVE_SEEN=true
|
|
|
|
# Update package lists
|
|
echo "Updating package lists in chroot..."
|
|
chroot \${MOUNT_PATH} apt-get update -yq
|
|
|
|
# Install required packages
|
|
echo "Installing essential packages..."
|
|
chroot \${MOUNT_PATH} apt-get install -yq screen bash coreutils curl mc unzip sudo which openssh-client openssh-server redis wget
|
|
|
|
echo "Cleaning up..."
|
|
umount "\${MOUNT_PATH}/dev" || true
|
|
umount "\${MOUNT_PATH}/proc" || true
|
|
umount "\${MOUNT_PATH}/sys" || true
|
|
|
|
'
|
|
)!
|
|
builder.install_zinit()!
|
|
// builder.set_entrypoint('redis-server')!
|
|
builder.commit('localhost/${name}')!
|
|
return builder
|
|
}
|
|
|
|
// builder machine based on arch and install vlang
|
|
pub fn (mut e CEngine) builder_go_rust(args GetArgs) !Builder {
|
|
console.print_header('buildah builder go rust')
|
|
name := 'builder_go_rust'
|
|
e.builder_base(reset: false)!
|
|
if !args.reset && e.builder_exists(name)! {
|
|
return e.builder_get(name)!
|
|
}
|
|
mut builder := e.builder_new(name: name, from: 'localhost/base', delete: true)!
|
|
builder.hero_execute_cmd('installers -n golang,rust')!
|
|
// builder.clean()!
|
|
builder.commit('localhost/${name}')!
|
|
e.load()!
|
|
return builder
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_js(args GetArgs) !Builder {
|
|
console.print_header('buildah builder js')
|
|
name := 'builder_js'
|
|
e.builder_base(reset: false)!
|
|
if !args.reset && e.builder_exists(name)! {
|
|
return e.builder_get(name)!
|
|
}
|
|
mut builder := e.builder_new(name: name, from: 'localhost/base', delete: true)!
|
|
builder.hero_execute_cmd('installers -n nodejs')!
|
|
// builder.clean()!
|
|
builder.commit('localhost/${name}')!
|
|
e.load()!
|
|
return builder
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_js_python(args GetArgs) !Builder {
|
|
console.print_header('buildah builder js python')
|
|
name := 'builder_js_python'
|
|
e.builder_js(reset: false)!
|
|
if !args.reset && e.builder_exists(name)! {
|
|
return e.builder_get(name)!
|
|
}
|
|
mut builder := e.builder_new(name: name, from: 'localhost/builder_js', delete: true)!
|
|
builder.hero_execute_cmd('installers -n python')!
|
|
// builder.clean()!
|
|
builder.commit('localhost/${name}')!
|
|
e.load()!
|
|
return builder
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_hero(args GetArgs) !Builder {
|
|
console.print_header('buildah builder hero dev')
|
|
name := 'builder_hero'
|
|
e.builder_js_python(reset: false)!
|
|
if !args.reset && e.builder_exists(name)! {
|
|
return e.builder_get(name)!
|
|
}
|
|
mut builder := e.builder_new(name: name, from: 'localhost/builder_js_python', delete: true)!
|
|
builder.hero_execute_cmd('installers -n hero')!
|
|
// builder.clean()!
|
|
builder.commit('localhost/${name}')!
|
|
e.load()!
|
|
return builder
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_herodev(args GetArgs) !Builder {
|
|
console.print_header('buildah builder hero dev')
|
|
name := 'builder_herodev'
|
|
e.builder_js_python(reset: false)!
|
|
if !args.reset && e.builder_exists(name)! {
|
|
return e.builder_get(name)!
|
|
}
|
|
mut builder := e.builder_new(name: name, from: 'localhost/builder_hero', delete: true)!
|
|
builder.hero_execute_cmd('installers -n herodev')!
|
|
// builder.clean()!
|
|
builder.commit('localhost/${name}')!
|
|
e.load()!
|
|
return builder
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_heroweb(args GetArgs) !Builder {
|
|
console.print_header('buildah builder hero web')
|
|
name := 'builder_heroweb'
|
|
e.builder_go_rust(reset: false)!
|
|
e.builder_hero(reset: false)!
|
|
if !args.reset && e.builder_exists(name)! {
|
|
return e.builder_get(name)!
|
|
}
|
|
mut builder0 := e.builder_new(
|
|
name: 'builder_heroweb_temp'
|
|
from: 'localhost/builder_go_rust'
|
|
delete: true
|
|
)!
|
|
builder0.hero_execute_cmd('installers -n heroweb')!
|
|
// builder0.hero_execute_cmd("installers -n heroweb")!
|
|
mpath := builder0.mount_to_path()!
|
|
|
|
// copy the built binary to host
|
|
osal.exec(
|
|
cmd: '
|
|
mkdir -p ${os.home_dir()}/hero/var/bin
|
|
cp ${mpath}/usr/local/bin/* ${os.home_dir()}/hero/var/bin/
|
|
'
|
|
)!
|
|
|
|
builder0.delete()!
|
|
mut builder2 := e.builder_new(name: name, from: 'localhost/builder_hero', delete: true)!
|
|
builder2.copy('${os.home_dir()}/hero/var/bin/', '/usr/local/bin/')!
|
|
builder2.commit('localhost/${name}')!
|
|
e.load()!
|
|
return builder2
|
|
}
|