mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-15 19:32:44 +03:00
yash[1] and zsh does not handle 8-bit bytes in strings good. Work around it by using printf ... | cmp ... to compare the header. This should be 100% posix compatible. Also fix some of the compression header magic bytes: - unxz: Use octal aas the string '\3757zXZ\000' was misinterpreted by some shells. - lzma: the third byte represents compression mode[2], and we want support all compression modes not only '8', so we only check the first three bytes instead of 4. [1]: Upstream report: https://osdn.net/projects/yash/ticket/47772 [2]: https://github.com/frizb/FirmwareReverseEngineering/blob/master/IdentifyingCompressionAlgorithms.md#lzma
75 lines
2.2 KiB
Bash
75 lines
2.2 KiB
Bash
# Tiny Cloud - Main Phase Functions
|
|
# vim:set ts=4 et ft=sh:
|
|
|
|
: "${LIBDIR:=$PREFIX/lib}"
|
|
. "$LIBDIR"/tiny-cloud/init-common
|
|
|
|
# ensure existence of output directories
|
|
[ ! -d "$TINY_CLOUD_LOGS" ] && mkdir -p "$TINY_CLOUD_LOGS"
|
|
[ ! -d "$TINY_CLOUD_VAR" ] && mkdir -p "$TINY_CLOUD_VAR"
|
|
|
|
set_hostname() {
|
|
skip_action set_hostname && return
|
|
|
|
local fqdn=$(imds @hostname)
|
|
local host="${fqdn%%\.*}"
|
|
|
|
mkdir -p "$ROOT"/etc
|
|
echo "$host" > "$ROOT"/etc/hostname
|
|
$MOCK hostname -F "$ROOT"/etc/hostname
|
|
echo -e "127.0.1.1\t$fqdn $host" >> "$ROOT"/etc/hosts
|
|
}
|
|
|
|
set_ssh_keys() {
|
|
skip_action set_ssh_keys && return
|
|
|
|
local user="$CLOUD_USER"
|
|
local pwent="$(getent passwd "$user")"
|
|
local group=$(echo "$pwent" | cut -d: -f4)
|
|
local ssh_dir="${ROOT}$(echo "$pwent" | cut -d: -f6)/.ssh"
|
|
local keys_file="$ssh_dir/authorized_keys"
|
|
|
|
if [ ! -d "$ssh_dir" ]; then
|
|
mkdir -p "$ssh_dir"
|
|
chmod 700 "$ssh_dir"
|
|
fi
|
|
|
|
touch "$keys_file"
|
|
chmod 600 "$keys_file"
|
|
$MOCK chown -R "$user:$group" "$ssh_dir"
|
|
imds @ssh-keys > "$keys_file"
|
|
}
|
|
|
|
save_userdata() {
|
|
skip_action save_userdata && return
|
|
|
|
local userdata="$TINY_CLOUD_VAR/user-data"
|
|
local tmpfile=$(mktemp "$userdata.XXXXXX")
|
|
local cmd
|
|
|
|
imds -e @userdata > "$tmpfile"
|
|
cmd="cat"
|
|
if ! skip_action decompress_userdata; then
|
|
if printf '\037\213\010' | cmp -s -n 3 "$tmpfile"; then
|
|
gzip -dc "$tmpfile" > "$userdata"
|
|
elif printf 'BZh' | cmp -s -n 3 "$tmpfile"; then
|
|
bzip2 -dc "$tmpfile" > "$userdata"
|
|
elif printf '\375\067\172\130\132\000' | cmp -s -n 6 "$tmpfile"; then
|
|
unxz -c "$tmpfile" > "$userdata"
|
|
elif printf '\135\000\000' | cmp -s -n 3 "$tmpfile"; then
|
|
lzma -dc "$tmpfile" > "$userdata"
|
|
elif printf '\211\114\132' | cmp -s -n 3 "$tmpfile"; then
|
|
lzop -dc "$tmpfile" > "$userdata"
|
|
elif printf '\004\042\115\030' | cmp -s -n 4 "$tmpfile"; then
|
|
lz4 -dc "$tmpfile" > "$userdata"
|
|
elif printf '(\265/\375' | cmp -s -n 4 "$tmpfile"; then
|
|
zstd -dc "$tmpfile" > "$userdata"
|
|
else
|
|
cp "$tmpfile" "$userdata"
|
|
fi
|
|
else
|
|
cp "$tmpfile" "$userdata"
|
|
fi
|
|
rm "$tmpfile"
|
|
}
|