First full-fledged minimal-live blend

This commit is contained in:
KatolaZ 2017-12-12 00:08:19 +00:00
parent 9a912fe833
commit d02b803b8e
11 changed files with 691 additions and 339 deletions

View File

@ -0,0 +1,292 @@
#!/usr/bin/env zsh
## configuration file for devuan-live blend -- ASCII release
version="2.0.0_beta"
##
## definition of package sets
##
### base package set
minimal_base_packages+=(
acpi
acpi-support-base
acpid
at
bash
bash-completion
bc
busybox
console-common
console-data
console-setup
console-setup-linux
coreutils
dash
dc
dialog
discover
dselect
file
groff-base
info
kbd
laptop-detect
locales
lsof
syslinux
util-linux-locales
zsh
)
## admin package set
minimal_admin_packages+=(
debootstrap
entr
gddrescue
gdisk
htop
iftop
iotop
iw
mtr-tiny
multitail
ncdu
parted
pciutils
psmisc
sudo
time
wavemon
wireless-tools
wpasupplicant
)
## editors package set
minimal_editors_packages+=(
ed
nano
vim-tiny
zile
)
## networking package set
minimal_net_packages+=(
bind9-host
bittornado
curl
dnsutils
edbrowse
fetchmail
ftp
geoip-bin
irssi
lftp
links2
lrzsz
mcabber
minicom
mosh
msmtp
mutt
netcat
net-tools
nfacct
nrss
openssh-client
openssh-server
procmail
rsync
telnet
tin
traceroute
w3m
wget
whois
)
## productivity package set
minimal_prod_packages+=(
abook
apcalc
aspell
aspell-en
calcurse
clex
dvtm
fbi
fbterm
ghostscript
gnupg
gnupg2
gnupg-agent
mc
parallel
poppler-utils
rpl
rename
sc
screen
taskwarrior
tmux
)
## programming package set
minimal_devel_packages+=(
tcc
libc6-dev
m4
patch
perl
perl-base
perl-modules-5.24
python2.7-minimal
python3.5-minimal
gawk
guile-2.0
guile-2.0-libs
)
## games package set
minimal_games_packages+=(
bastet
bombardier
bsdgames
cavezofphear
crawl
curseofwar
empire
freesweep
gnuchess
greed
matanza
moria
nethack-console
ninvaders
omega-rpg
pacman4console
pente
sudoku
)
## accessibility package set
minimal_a11y_packages+=(
beep
brltty
espeak
espeakup
yasr
)
## multimedia package set
minimal_media_packages+=(
alsa-utils
caca-utils
hasciicam
imagemagick
jhead
moc
radio
sox
)
## misc package set
minimal_misc_packages+=(
cmatrix
cowsay
eject
figlet
fortunes-min
fortune-mod
gpm
man-db
manpages
manpages-dev
mlocate
termsaver
toilet
toilet-fonts
ttyrec
unzip
)
### now we include all the package sets
base_packages+=(
$minimal_base_packages
$minimal_admin_packages
$minimal_editors_packages
$minimal_net_packages
$minimal_prod_packages
$minimal_devel_packages
$minimal_games_packages
$minimal_a11y_packages
$minimal_media_packages
$minimal_misc_packages
)
#### TODO: ADD setnet
#### TODO: REPLACE twidge (twitter client)
#### TODO: ADD refractasnapshot
#### TODO: ADD refractainstaller
#### ADDED: geoip-bin
#extra_packages+=(
# b43-fwcutter
# firmware-atheros
# firmware-b43-installer
# firmware-b43legacy-installer
# firmware-bnx2
# firmware-bnx2x
# firmware-brcm80211
# firmware-intelwimax
# firmware-iwlwifi
# firmware-libertas
# firmware-linux-nonfree
# firmware-myricom
# firmware-netxen
# firmware-qlogic
# firmware-ralink
# firmware-realtek
# firmware-ti-connectivity
# firmware-zd1211
#)
purge_packages=(
btrfs-tools
cryptsetup
cryptsetup-bin
debian-keyring
elinks
elinks-data
git
git-core
git-man
liberror-perl
libfsplib0
libtre5
openntpd
tasksel
tasksel-data
vim
vim-runtime
)
# yad needs to be first
#custom_deb_packages+=(yad_0.27.0-1_${arch}.deb)
#
#
#custom_deb_packages+=(
# refractainstaller-base_9.3.0_all.deb
# refractainstaller-gui_9.2.2_all.deb
# refractasnapshot-base_10.0.2_all.deb
# refractasnapshot-gui_9.0.2_all.deb
# setnet_0.3.2-1_all.deb
#)

View File

@ -0,0 +1,58 @@
ui vesamenu.c32
prompt 0
#menu title devuan-live boot menu
#timeout 70
menu background /isolinux/splash.png
menu color title * #ff000000 #00ffffff none
menu color border * #00000000 #00000000 none
menu color sel 1;7;37;30 #ffffffff #ff000000 none
menu color unsel 1;30;37 #ff000000 #ffffffff none
menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *
menu color tabmsg 1;30;37 #ff000000 #ffffffff none
menu color cmdline 1;30;37 #ff000000 #ffffffff none
menu color help 37;40 #ffdddd00 #00000000 none
menu vshift 8
menu rows 12
#menu helpmsgrow 15
#menu cmdlinerow 25
#menu timeoutrow 26
#menu tabmsgrow 14
menu tabmsg Press ENTER to boot or TAB to edit a menu entry
label std
menu label Devuan Live Minimal (std)
kernel /live/vmlinuz
append initrd=/live/initrd.img boot=live noautologin vga=auto
label accessible
menu label Devuan Live Minimal (access) 
kernel /live/vmlinuz
append initrd=/live/initrd.img boot=live noautologin 4 vga=normal
label std-toram
menu label Devuan Live Minimal (std-toram)
kernel /live/vmlinuz
append initrd=/live/initrd.img boot=live noautologin vga=auto toram
label accessible-toram
menu label Devuan Live Minimal (access-toram) 
kernel /live/vmlinuz
append initrd=/live/initrd.img boot=live noautologin 4 vga=normal toram
label noprobe
menu label Devuan Live Minimal (no probe)
kernel /live/vmlinuz noapic noapm nodma nomce nolapic nosmp vga=normal
append initrd=/live/initrd.img boot=live
label memtest
menu label Memory test
kernel /live/memtest86+.bin
label chain.c32 hd0,0
menu label Boot hard disk
chain.c32 hd0,0
label harddisk
menu label Boot hard disk (old way)
localboot 0x80

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,74 @@
#/bin/bash
# ----------------------------------------------------------------------
#
# This file is part of microdevuan, a set of scripts to create minimal
# devuan live images
#
# ----------------------------------------------------------------------
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ----------------------------------------------------------------------
#
# (c) KatolaZ <katolaz@freaknet.org> (2016)
#
# ----------------------------------------------------------------------
##
## A small daemon that just beeps every second, until the process
## BB_PROCESS is ready...
##
. /etc/default/boot_beep
##
## First, daemonize the script
##
if [ "x$1" != "x--" ]; then
$0 -- 1> /dev/null 2> /dev/null &
exit 0
fi
check_process(){
while [ 1 -gt 0 ]; do
login_ready=`ps ax | grep -E "${BB_PROCESS}" | grep -v "grep" | wc -l`
if [ $((${login_ready})) -ge 1 ]; then
###
### These lines should be put in a separate script, whose name is
### specified in bb_defaults, to allow custom chimes....
###
###
beep -D 50 -l 150 -f 523.25
beep -D 50 -l 150 -f 629.25
beep -D 50 -l 150 -f 784.00
beep -D 50 -l 150 -f 629.25
beep -D 50 -l 150 -f 523.25
exit 0;
else
if [[ ${BB_BOOT_BEEP} = "TRUE" ]]; then
beep -D 100 -l 250 -f 523.25
fi
sleep ${BB_INTERVAL};
fi
done
}
echo $$ >> ${BB_TMPFILE}
check_process

View File

@ -0,0 +1,132 @@
#!/bin/sh
# ----------------------------------------------------------------------
#
# This file is part of microdevuan, a set of scripts to create minimal
# devuan live images
#
# ----------------------------------------------------------------------
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ----------------------------------------------------------------------
#
# (c) KatolaZ <katolaz@freaknet.org> (2016)
#
# ----------------------------------------------------------------------
### BEGIN INIT INFO
# Provides: boot_beep
# Required-Start: mountall
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Boot Beep Daemon
### END INIT INFO
. /etc/default/boot_beep
rm_hanging_instances(){
if [ -f ${BB_TMPFILE} ]; then
for i in `cat ${BB_TMPFILE}`; do
is_alive=`ps ax | grep "^${i} " | wc -l`
if [ $((${is_alive})) -gt 0 ]; then
kill -9 ${i}
fi
done
rm ${BB_TMPFILE}; touch ${BB_TMPFILE}
fi
}
check_active(){
ALIVE=0
if [ -f ${BB_TMPFILE} ]; then
for i in `cat ${BB_TMPFILE}`; do
is_alive=`ps ax | grep "^${i} " | wc -l`
if [ $((${is_alive})) -gt 0 ]; then
ALIVE=1
fi
done
if [ ${ALIVE} -ge 1 ]; then
return 1;
else
return 0;
fi
else
return 0
fi
}
start_bb(){
check_active
if [ $? != 0 ]; then
echo "beep_boot is already running"
exit 1;
fi
rm_hanging_instances
nohup ${BB_SCRIPTFILE} 2>&1 >/dev/null &
exit 0;
}
stop_bb(){
check_active
if [ $? == 0 ]; then
echo "beep_boot is not running"
rm ${BB_TMPFILE}
exit 1;
fi
rm_hanging_instances
exit 0;
}
case $1 in
start)
start_bb
exit 0;
;;
stop)
stop_bb;
exit 0;
;;
status)
check_active
if [ $? == 0 ]; then
echo "boot_beep is not up"
else
echo "boot_beep is up and running"
fi
exit 0
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1;
esac

View File

@ -0,0 +1,84 @@
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:2:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:235:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
##
## KatolaZ -- 20160604 -- Accessible runlevel
##
## Runlevel 4 is the "accessible" runlevel. Autologin configured on
## all the ttys. tty1 is root shell
##
a1:4:respawn:/sbin/getty -a root 38400 tty1
a2:4:respawn:/sbin/getty -a devuan 38400 tty2
a3:4:respawn:/sbin/getty -a devuan 38400 tty3
a4:4:respawn:/sbin/getty -a devuan 38400 tty4
a5:4:respawn:/sbin/getty -a devuan 38400 tty5
a6:4:respawn:/sbin/getty -a devuan 38400 tty6
# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

View File

@ -0,0 +1,7 @@
Devuan ASCII 2.0.0-beta -- Minimal Live
Devuan GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law. 

View File

@ -0,0 +1,2 @@
ctrl_interface=/run/wpa_supplicant
update_config=1

View File

@ -1,11 +1,14 @@
#!/usr/bin/env zsh
## configuration file for devuan-live blend
## configuration file for devuan-minimal-live blend
vars+=(username userpass default_shell mkefi grubversion hookscripts)
arrs+=(custom_deb_packages)
blend_name="devuan-minimal-live_"
release="ascii"
username="devuan"
userpass="devuan"
default_shell="/bin/bash"
@ -20,299 +23,24 @@ default_shell="/bin/bash"
#grubversion="grub-pc"
#grubversion="grub-efi-amd64"
release="ascii"
version="2.0.0_beta"
##release="ascii"
mirror="http://devuan.mine.nu/merged"
section="main"
image_name="${os}_${release}_${version}_${arch}_minimal"
base_packages_option=(--no-install-recommends)
extra_packages_option=(--no-install-recommends)
### base package set
minimal_base_packages+=(
acpi
acpi-support-base
acpid
at
bash
bash-completion
bc
busybox
console-common
console-data
console-setup
console-setup-linux
coreutils
dash
dc
dialog
discover
dselect
file
groff-base
info
kbd
laptop-detect
locales
lsof
syslinux
util-linux-locales
zsh
)
## admin package set
minimal_admin_packages+=(
debootstrap
entr
gddrescue
gdisk
htop
iftop
iotop
iw
mtr-tiny
multitail
ncdu
parted
pciutils
psmisc
sudo
time
wavemon
wireless-tools
wpasupplicant
)
## editors package set
minimal_editors_packages+=(
ed
nano
vim-tiny
zile
)
release_conf="$BLENDPATH/$release/config"
## networking package set
minimal_net_packages+=(
bind9-host
bittornado
curl
dnsutils
edbrowse
fetchmail
ftp
geoip-bin
irssi
lftp
links2
lrzsz
mcabber
minicom
mosh
msmtp
mutt
netcat
net-tools
nfacct
nrss
openssh-client
openssh-server
procmail
rsync
telnet
tin
traceroute
w3m
wget
whois
)
### package sets are defined in the corresponding $release/config file
source $release_conf
## image_name depends on release and version
image_name="${os}_${release}_${version}_${arch}_minimal"
## productivity package set
minimal_prod_packages+=(
abook
apcalc
aspell
aspell-en
calcurse
clex
dvtm
fbi
fbterm
ghostscript
gnupg
gnupg2
gnupg-agent
mc
parallel
poppler-utils
rpl
rename
sc
screen
taskwarrior
tmux
)
## programming package set
minimal_devel_packages+=(
tcc
libc6-dev
m4
patch
perl
perl-base
perl-modules-5.24
python2.7-minimal
python3.5-minimal
gawk
guile-2.0
guile-2.0-libs
)
## games package set
minimal_games_packages+=(
bastet
bombardier
bsdgames
cavezofphear
crawl
curseofwar
empire
freesweep
gnuchess
greed
matanza
moria
nethack-console
ninvaders
omega-rpg
pacman4console
pente
sudoku
)
## accessibility package set
minimal_a11y_packages+=(
beep
brltty
espeak
espeakup
yasr
)
## multimedia package set
minimal_media_packages+=(
alsa-utils
caca-utils
hasciicam
imagemagick
jhead
moc
radio
sox
)
## misc package set
minimal_misc_packages+=(
cmatrix
cowsay
eject
figlet
fortunes-min
fortune-mod
gpm
man-db
manpages
manpages-dev
mlocate
termsaver
toilet
toilet-fonts
ttyrec
unzip
)
### now we include all the package sets
base_packages+=(
$minimal_base_packages
$minimal_admin_packages
$minimal_editors_packages
$minimal_net_packages
$minimal_prod_packages
$minimal_devel_packages
$minimal_games_packages
$minimal_a11y_packages
$minimal_media_packages
$minimal_misc_packages
)
##echo "extra_packages: ${extra_packages}"
#### TODO: ADD setnet
#### TODO: REPLACE twidge (twitter client)
#### TODO: ADD refractasnapshot
#### TODO: ADD refractainstaller
#### TODO: ADD setnet
#### ADDED: geoip-bin
#extra_packages+=(
# b43-fwcutter
# firmware-atheros
# firmware-b43-installer
# firmware-b43legacy-installer
# firmware-bnx2
# firmware-bnx2x
# firmware-brcm80211
# firmware-intelwimax
# firmware-iwlwifi
# firmware-libertas
# firmware-linux-nonfree
# firmware-myricom
# firmware-netxen
# firmware-qlogic
# firmware-ralink
# firmware-realtek
# firmware-ti-connectivity
# firmware-zd1211
#)
purge_packages=(
btrfs-tools
cryptsetup
cryptsetup-bin
debian-keyring
elinks
elinks-data
git
git-core
git-man
liberror-perl
libfsplib0
libtre5
openntpd
tasksel
tasksel-data
vim
vim-runtime
)
# yad needs to be first
#custom_deb_packages+=(yad_0.27.0-1_${arch}.deb)
#
#
#custom_deb_packages+=(
# refractainstaller-base_9.3.0_all.deb
# refractainstaller-gui_9.2.2_all.deb
# refractasnapshot-base_10.0.2_all.deb
# refractasnapshot-gui_10.0.2_all.deb
# setnet_0.3.2-1_all.deb
#)

View File

@ -22,6 +22,10 @@ BLENDPATH="${BLENDPATH:-$(dirname $0)}"
source $BLENDPATH/config
blend_release_path=$BLENDPATH/$release/
###source $BLENDPATH/$release/devuan-minimal-live.release
blend_preinst() {
fn blend_preinst
req=(blend_name username userpass)
@ -31,8 +35,8 @@ blend_preinst() {
add-user $username $userpass
#notice "copying blend-specific debs"
#cp -fv "$BLENDPATH"/*.deb "$R/extra/custom-packages"
notice "copying blend-specific debs"
##cp -fv "$blend_release_path"/custom_debs/*.deb "$R/extra/custom-packages"
}
blend_postinst() {
@ -47,10 +51,14 @@ blend_postinst() {
iso_write_grub_cfg
}
## TODO:
#install-custdebs || zerr
#pushd "$strapdir"
# sudo rsync -avx --no-o --no-g "$BLENDPATH"/rootfs-overlay/* . || zerr
#popd
pushd "$strapdir"
sudo rsync -avx --no-o --no-g "$blend_release_path"/rootfs_overlay/* . || zerr
chmod 755 etc/init.d/boot_beep
## TODO:
## insserv boot_beep
popd
blend_finalize || zerr
}
@ -60,55 +68,9 @@ iso_write_isolinux_cfg() {
req=(workdir arch username)
ckreq || return 1
notice "writing isolinux configuration"
cat <<EOF | sudo tee ${workdir}/binary/isolinux/isolinux.cfg >/dev/null
ui vesamenu.c32
prompt 0
menu title devuan-live boot menu
timeout 70
menu background /isolinux/splash.png
menu color title * #FFFFFFFF *
menu color border * #00000000 #00000000 none
menu color sel * #ffffffff #A1B067 *
menu color hotsel 1;7;37;40 #ffffffff #A1B067 *
menu color tabmsg * #E5FD91 #00000000 *
menu color cmdline 0 #E5FD91 #00000000
menu tabmsg Press ENTER to boot or TAB to edit a menu entry
menu vshift 12
menu rows 12
label live
menu label ${os}-live (${arch})
menu default
linux /live/vmlinuz
append initrd=/live/initrd.img boot=live username=${username}
label lang
menu label Other language (TAB to edit)
linux /live/vmlinuz
append initrd=/live/initrd.img boot=live username=${username} hooks=file:///lib/live/mount/medium/live/hooks/fix-lang.sh locales=it_IT.UTF-8
label toram
menu label ${os}-live (${arch}) (load to RAM)
linux /live/vmlinuz
append initrd=/live/initrd.img boot=live username=${username} toram
label failsafe
menu label ${os}-live (${arch}) (failsafe)
kernel /live/vmlinuz noapic noapm nodma nomce nolapic nosmp nomodeset vga=normal
append initrd=/live/initrd.img boot=live
label memtest
menu label Memory test
kernel /live/memtest
endtext
EOF
notice "copying isolinux overlay"
sudo mkdir -p "$workdir"/binary/{live,isolinux}
#sudo cp -rav "$BLENDPATH"/isolinux-overlay/* "$workdir"/binary/isolinux/
sudo cp -rav "$blend_release_path"/isolinux_overlay/* "$workdir"/binary/isolinux/
#[[ -n "$hookscripts" ]] && {
# sudo cp -av "$BLENDPATH"/hooks "$workdir"/binary/live/
#}
@ -200,7 +162,7 @@ EOF
cp $strapdir/usr/share/grub/unicode.pf2 boot/grub/font.pf2
# copy splash
sudo cp -rav "$BLENDPATH"/isolinux-overlay/splash.png boot/grub/splash.png
sudo cp -rav "$blend_release_path"/isolinux_overlay/splash.png boot/grub/splash.png
# Cleanup efi temps
sudo umount img-mnt
@ -321,5 +283,12 @@ apt-get update
apt-get clean
updatedb
EOF
## TODO:
##
## - configure framebuffer
## - updatedb
## - insserv boot_beep
##
chroot-script -d finalize || zerr
}

8
sdk
View File

@ -30,6 +30,7 @@ source $R/lib/zuper/zuper
vars+=(livesdk_version)
vars+=(R workdir strapdir)
vars+=(os oslib blendlib)
vars+=(release)
vars+=(MAKEOPTS)
## global arrs
@ -49,6 +50,9 @@ load() {
os="$1"
arch="$2"
blend="$3"
[[ $# -gt 3 ]] && release="$4"
req=(os arch)
ckreq || return 1
@ -87,7 +91,7 @@ load() {
source $oslib
[[ -f $blendlib ]] && {
source $blendlib || zerr
act "$os blend loaded"
act "$os blend loaded -- ($blend -- release: $release)"
export BLEND=1
}
@ -105,3 +109,5 @@ TRAPZERR() { zerr; return $? }
notice "live-sdk loaded"
export PROMPT="%F{yellow}%(?..%? )%{$reset_color%}livesdk@%{$fg[red]%}%m %{$reset_color%} %{$fg[blue]%}%#%{$fg_bold[blue]%}%{$reset_color%} "
echo "release is: $release"