forked from rapido-linux/rapido
-
Notifications
You must be signed in to change notification settings - Fork 1
/
vm_autorun.env
156 lines (132 loc) · 4.35 KB
/
vm_autorun.env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#
# Copyright (C) SUSE LINUX GmbH 2016, all rights reserved.
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) version 3.
#
# This library 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 Lesser General Public
# License for more details.
. /rapido.conf
alias shutdown='echo 1 > /proc/sys/kernel/sysrq && echo o > /proc/sysrq-trigger'
alias reboot='echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger'
alias vi='vim'
alias view='vim -R'
alias l='ls -la'
function _fatal() {
shutdown
sleep 2
}
# create /etc/hosts file with the essential IPv4 and IPv6 lines
function _vm_ar_hosts_create
{
local hostname_fqn="`cat /proc/sys/kernel/hostname`" \
|| _fatal "hostname unavailable"
local hostname_short="${hostname_fqn%%.*}"
# need hosts file for hostname -s
cat > /etc/hosts <<EOF
127.0.0.1 localhost
127.0.1.1 $hostname_fqn $hostname_short
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF
}
# set a kcli_$param variable based on the presence of $param[=$value] in
# /proc/cmdline. Dots '.' in $param will be replaced in the variable with '_'.
# If $param is present but doesn't have an "=$value" component, then
# kcli_$param will be set to an empty string, otherwise it'll be set to
# $value.
function _vm_kcli_param_get()
{
local param=$1
[ -n "$param" ] || _fatal "invalid kcli param"
local variable="kcli_${param//./_}"
eval unset $variable
for i in $(cat /proc/cmdline); do
case "$i" in
"${param}="*)
val="${i#${param}=}"
eval ${variable}=${val}
return
;;
"${param}")
eval ${variable}=""
return
;;
esac
done
# $param not found, variable unset
}
function _vm_ar_hostname_set
{
# networkless VM, so get the rapido.vm_num value from the kernel command
# line and use HOSTNAME<vm_num> configured in rapido.conf
_vm_kcli_param_get "rapido.vm_num"
[ -z "$kcli_rapido_vm_num" ] && _fatal "rapido.vm_num missing in kcli"
eval local hostname='$HOSTNAME'${kcli_rapido_vm_num}
[ -z "$hostname" ] && hostname="rapido${kcli_rapido_vm_num}"
echo $hostname > /proc/sys/kernel/hostname \
|| _fatal "failed to set hostname"
}
# enable dynamic debug for all DYN_DEBUG_MODULES and DYN_DEBUG_FILES specified
# in rapido.conf. This should be called *after* all kernel modules are loaded.
function _vm_ar_dyn_debug_enable
{
if [ ! -d "/sys/kernel/debug/dynamic_debug" ]; then
mount -t debugfs debugfs /sys/kernel/debug/
fi
for i in $DYN_DEBUG_MODULES; do
echo "module $i +pf" > /sys/kernel/debug/dynamic_debug/control
done
for i in $DYN_DEBUG_FILES; do
echo "file $i +pf" > /sys/kernel/debug/dynamic_debug/control
done
}
function _vm_ar_virtfs_mount
{
[ -z "$VIRTFS_SHARE_PATH" ] && return
mkdir /host || _fail "unable to create /host"
mount -t 9p host0 /host || _fail "unable to mount host"
}
function _vm_ar_configfs_mount
{
cat /proc/mounts | grep -m1 configfs &> /dev/null
if [ $? -ne 0 ]; then
mount -t configfs configfs /sys/kernel/config/
fi
}
function _vm_ar_rbd_map
{
[ -z "$CEPH_USER" ] && _fatal "CEPH_USER not configured"
[ -z "$CEPH_RBD_POOL" ] && _fatal "CEPH_RBD_POOL not configured"
[ -z "$CEPH_RBD_IMAGE" ] && _fatal "CEPH_RBD_IMAGE not configured"
[ -z "$CEPH_MON_ADDRESS_V1" ] && _fatal "CEPH_MON_ADDRESS_V1 not configured"
[ -z "$CEPH_USER_KEY" ] && _fatal "CEPH_USER_KEY not configured"
# start udevd, otherwise rbd hangs in wait_for_udev_add()
ps -eo args | grep -v grep | grep /usr/lib/systemd/systemd-udevd \
|| /usr/lib/systemd/systemd-udevd --daemon
local add_path
for add_path in /sys/bus/rbd/add_single_major /sys/bus/rbd/add; do
[ -f "$add_path" ] || continue
echo -n "${CEPH_MON_ADDRESS_V1} \
name=${CEPH_USER},secret=${CEPH_USER_KEY} \
$CEPH_RBD_POOL $CEPH_RBD_IMAGE -" \
> "$add_path" || _fatal "RBD map failed"
udevadm settle || _fatal
return
done
echo "rbd sysfs interface not found"
_fatal
}
if [[ "$(cat /proc/cmdline)" == *"ip=none"* ]]; then
# networkless VM - set hostname manually
_vm_ar_hostname_set
fi
export TERM="linux"
export PS1="$(cat /proc/sys/kernel/hostname):\${PWD}# "
resize &> /dev/null
_vm_ar_virtfs_mount