1
0
mirror of https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git synced 2026-02-04 04:22:43 +03:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Natanael Copa
4bb4a48074 Merge branch 'man-pages' into 'main'
Draft: docs: add initial manpage for tiny-cloud.8

See merge request alpine/cloud/tiny-cloud!106
2025-12-18 19:41:59 +00:00
Jake Buchholz Göktürk
c2810d16ea update changelog for v3.2.3 2025-12-07 07:58:47 -08:00
Jake Buchholz Göktürk
f91de06fee Extra test for cloud-config doas when adding extra users to default. 2025-12-04 19:47:54 +00:00
Jake Buchholz Göktürk
3e44e41603 properly detect empty userdata 2025-11-30 19:56:46 +00:00
Natanael Copa
921c5cf1d3 docs: add initial manpage for tiny-cloud.8 2024-05-23 12:29:32 +02:00
8 changed files with 114 additions and 8 deletions

View File

@ -8,11 +8,12 @@ test-default:
- docker-alpine - docker-alpine
- x86_64 - x86_64
test-dash: # disabled - 0.13.1 has globbing bug
extends: test-default #test-dash:
before_script: # extends: test-default
- apk add dash # before_script:
- ln -sf /usr/bin/dash /bin/sh # - apk add dash
# - ln -sf /usr/bin/dash /bin/sh
test-oksh: test-oksh:
extends: test-default extends: test-default

View File

@ -1,5 +1,9 @@
# CHANGELOG # CHANGELOG
## 2025:12-07 - Tiny Cloud v3.2.3
* Correctly identify empty `user-data` content instead of flagging it as "unknown".
## 2025-06-11 - Tiny Cloud v3.2.2 ## 2025-06-11 - Tiny Cloud v3.2.2
* Fix `Makefile` to dynamically generate the list of clouds, allowing the new * Fix `Makefile` to dynamically generate the list of clouds, allowing the new

View File

@ -18,6 +18,10 @@
* Support additional features of `#cloud-config` as needed * Support additional features of `#cloud-config` as needed
* Support for multipart `user-data` payload?
* Support for `#network-config`?
* Support LVM partitioning and non-`ext[234]` filesystems? * Support LVM partitioning and non-`ext[234]` filesystems?
* Support other cloud providers... * Support other cloud providers...

58
docs/tiny-cloud.8.scd Normal file
View File

@ -0,0 +1,58 @@
TINY-CLOUD(1)
# NAME
tiny-cloud - perform critical initialization tasks for cloud instances
# SYNOPSIS
*tiny-cloud* [-h | --help] { boot | early | main | final | --bootstrap {complete|incomplete|status} | --enable | --disable }
# DESCRIPTION
*tiny-cloud* performs critical initialization tasks for cloud instaces during
their first boot. *tiny-cloud* is designed to run in different stages during
first boot.
# COMMANDS
*boot*
Initiate the boot process of the cloud instance.
*early*
Perform early-stage operations in the boot process.
*main*
Execute main-stage operations during the boot process.
*final*
Conduct final-stage operations, completing the boot process.
# OPTIONS
*-h, --help*
Display help information.
*--bootstrap* {_complete|incomplete|status_}
Manage the bootstrap state of the instance.
_complete_
Mark the bootstrap process as complete.
_incomplete_
Mark the bootstrap process as incomplete.
_status_
Display the current status of the bootstrap process.
*--enable*
Enable the cloud instance, allowing it to be managed or accessed.
*--disable*
Disable the cloud instance, preventing it from being managed or accessed.
# EXIT STATUS
*tiny-cloud* exists 0 on success and >0 on error.

View File

@ -178,9 +178,11 @@ init__create_default_user() {
echo '%wheel ALL=(ALL) NOPASSWD: ALL' > "$ETC/sudoers.d/wheel" echo '%wheel ALL=(ALL) NOPASSWD: ALL' > "$ETC/sudoers.d/wheel"
fi fi
if [ -d "$ETC/doas.d" ]; then if [ -d "$ETC/doas.d" ]; then
echo 'permit nopass :wheel' > "$TARGET/etc/doas.d/wheel.conf" echo 'permit nopass :wheel' > "$ETC/doas.d/wheel.conf"
#echo 'permit nopass :wheel' > "$TARGET/etc/doas.d/wheel.conf"
elif [ -f "$ETC/doas.conf" ]; then elif [ -f "$ETC/doas.conf" ]; then
add_once "$TARGET/etc/doas.conf" "permit nopass :wheel" add_once "$ETC/doas.conf" "permit nopass :wheel"
#add_once "$TARGET/etc/doas.conf" "permit nopass :wheel"
fi fi
} }
@ -294,6 +296,9 @@ userdata_type() {
if [ ! -f "$TINY_CLOUD_VAR/user-data" ]; then if [ ! -f "$TINY_CLOUD_VAR/user-data" ]; then
echo missing echo missing
return return
elif [ ! -s "$TINY_CLOUD_VAR/user-data" ]; then
echo empty
return
fi fi
header=$(head -n1 "$TINY_CLOUD_VAR/user-data" | sed -e 's/[[:space:]].*//g') header=$(head -n1 "$TINY_CLOUD_VAR/user-data" | sed -e 's/[[:space:]].*//g')
case "$header" in case "$header" in

View File

@ -0,0 +1,9 @@
# Empty UserData Functions
# vim:set filetype=sh:
# shellcheck shell=sh
init__empty_userdata() {
log -i -t "$phase" notice "$ACTION: empty user-data found"
}
INIT_ACTIONS_MAIN="empty_userdata ${INIT_ACTIONS_MAIN}"

View File

@ -197,6 +197,11 @@ userdata_type_body() {
-o match:"missing" \ -o match:"missing" \
sh -c ". \"$lib\"; userdata_type" sh -c ". \"$lib\"; userdata_type"
touch var/lib/cloud/user-data
CLOUD="$c" atf_check \
-o match:"empty" \
sh -c ". \"$lib\"; userdata_type"
echo "#tiny-cloud-config" > var/lib/cloud/user-data echo "#tiny-cloud-config" > var/lib/cloud/user-data
CLOUD="$c" atf_check \ CLOUD="$c" atf_check \
-o match:"tiny-cloud-config" \ -o match:"tiny-cloud-config" \

View File

@ -32,6 +32,7 @@ init_tests \
userdata_users_groups \ userdata_users_groups \
userdata_users_lock_passwd \ userdata_users_lock_passwd \
userdata_users_doas \ userdata_users_doas \
userdata_users_doas_with_default \
userdata_users_ssh_authorized_keys \ userdata_users_ssh_authorized_keys \
userdata_ssh_authorized_keys \ userdata_ssh_authorized_keys \
userdata_groups \ userdata_groups \
@ -420,6 +421,26 @@ userdata_users_doas_body() {
|| atf_fail "etc/doas.d/foo.conf is not as expected" || atf_fail "etc/doas.d/foo.conf is not as expected"
} }
userdata_users_doas_with_default_body() {
# first specified user keeps the default user
fake_userdata_nocloud <<-EOF
#cloud-config
users:
- default
- name: foo
doas: ["permit nopass foo"]
EOF
mkdir -p etc/doas.d
atf_check -e ignore -o ignore tiny-cloud early
atf_check \
-e match:"userdata_users: done" \
-o ignore \
tiny-cloud main
find .
grep "permit nopass foo" etc/doas.d/foo.conf \
|| atf_fail "etc/doas.d/foo.conf is not as expected"
}
userdata_users_ssh_authorized_keys_body() { userdata_users_ssh_authorized_keys_body() {
fake_bin getent <<-EOF fake_bin getent <<-EOF
#!/bin/sh #!/bin/sh
@ -923,4 +944,3 @@ userdata_autoinstall_lvm_body() {
-o match:"reboot" \ -o match:"reboot" \
tiny-cloud final tiny-cloud final
} }