modified
This commit is contained in:
parent
81f3f4a1df
commit
67addcc131
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
devroot
|
||||
32
enabled-service-order.sh
Normal file → Executable file
32
enabled-service-order.sh
Normal file → Executable file
@ -7,32 +7,36 @@ done)
|
||||
|
||||
# Get ordered list using rcorder
|
||||
ordered_scripts=$(rcorder -s nostart ${scripts})
|
||||
|
||||
. /etc/rc.conf
|
||||
# Function to check if service is enabled
|
||||
is_service_enabled() {
|
||||
local script=$1
|
||||
local service_name=$(basename "$script")
|
||||
|
||||
# local disabled="false"
|
||||
# First check /etc/rc.conf
|
||||
if grep -q "^${service_name}=YES" /etc/rc.conf 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
# if grep -q "^${service_name}=NO" /etc/rc.conf 2>/dev/null; then
|
||||
# # return 1
|
||||
# disabled=true
|
||||
# fi
|
||||
|
||||
# Then check /etc/defaults/rc.conf
|
||||
if grep -q "^${service_name}=YES" /etc/defaults/rc.conf 2>/dev/null; then
|
||||
return 0
|
||||
# # Then check /etc/defaults/rc.conf
|
||||
# if grep -q "^${service_name}=NO" /etc/defaults/rc.conf 2>/dev/null; then
|
||||
# # return 1
|
||||
# fi
|
||||
eval "value=\$$service_name"
|
||||
if [ "$value" = "NO" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
# Filter and display enabled services in order
|
||||
echo "Enabled services in boot order:"
|
||||
echo "------------------------------"
|
||||
# echo "Enabled services in boot order:"
|
||||
# echo "------------------------------"
|
||||
for script in ${ordered_scripts}; do
|
||||
if is_service_enabled "$script"; then
|
||||
# Extract PROVIDE line to show service name
|
||||
provide=$(grep "^# PROVIDE:" "$script" | cut -d: -f2-)
|
||||
echo "$(basename "$script")${provide:+ ($provide)}"
|
||||
# provide=$(grep "^# PROVIDE:" "$script" | cut -d: -f2-)
|
||||
echo "$script"
|
||||
fi
|
||||
done
|
||||
10
postprocess.sh
Executable file
10
postprocess.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
while read -r service; do
|
||||
read -r before
|
||||
if [ -f "/etc/dinit.d/$before" ]; then
|
||||
echo "waits-for = $service" >> "/etc/dinit.d/$before"
|
||||
else
|
||||
echo "Warning: Service $before not found, skipping waits-for directive" >&2
|
||||
fi
|
||||
done < /tmp/before-list
|
||||
rm /tmp/before-list
|
||||
30
rc2dinit.sh
Executable file
30
rc2dinit.sh
Executable file
@ -0,0 +1,30 @@
|
||||
#!/bin/sh
|
||||
scripts=$(./enabled-service-order.sh)
|
||||
is_leaf_service(){
|
||||
local script=$1
|
||||
if grep -q "^# REQUIRE:." "$script" || \
|
||||
grep -q "^# BEFORE:." "$script"; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
mkdir -p /etc/dinit.d
|
||||
echo "type = internal" >> /etc/dinit.d/boot
|
||||
for script in $scripts; do
|
||||
# ./transform.sh $script
|
||||
if is_leaf_service $script; then
|
||||
echo "depends-on = $(basename $script)" >> /etc/dinit.d/boot
|
||||
fi
|
||||
# name=$(basename "$script")
|
||||
# if [ "$name" = "DISKS" ]; then
|
||||
# echo "options: starts-rwfs" >> /etc/dinit.d/$name
|
||||
# fi
|
||||
done
|
||||
for script in $(ls -P /etc/rc.d); do
|
||||
./transform.sh $script
|
||||
name=$(basename "$script")
|
||||
if [ "$name" = "DISKS" ]; then
|
||||
echo "options: starts-rwfs" >> /etc/dinit.d/$name
|
||||
fi
|
||||
done
|
||||
./postprocess.sh
|
||||
109
transform.sh
Executable file
109
transform.sh
Executable file
@ -0,0 +1,109 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Check arguments
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: $0 <rc_script>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RC_SCRIPT="$1"
|
||||
if [ ! -f "$RC_SCRIPT" ]; then
|
||||
echo "Error: $RC_SCRIPT not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract service name from PROVIDE
|
||||
# SERVICE_NAME=$(grep '^# PROVIDE:' "$RC_SCRIPT" | cut -d: -f2 | tr -d ' ')
|
||||
# if [ -z "$SERVICE_NAME" ]; then
|
||||
# echo "Error: No PROVIDE directive found"
|
||||
# exit 1
|
||||
# fi
|
||||
KEYWORDS=$(grep '^# KEYWORD:' "$RC_SCRIPT" | cut -d: -f2 )
|
||||
|
||||
# Extract dependencies from REQUIRE
|
||||
REQUIRES=$(grep '^# REQUIRE:' "$RC_SCRIPT" | cut -d: -f2 )
|
||||
|
||||
# Extract BEFORE
|
||||
BEFORE=$(grep '^# BEFORE:' "$RC_SCRIPT" | cut -d: -f2)
|
||||
eval "$(grep '^name=' "$RC_SCRIPT")"
|
||||
eval "$(grep '^command=' "$RC_SCRIPT")"
|
||||
eval "$(grep '^start_cmd=' "$RC_SCRIPT")"
|
||||
eval "$(grep '^stop_cmd=' "$RC_SCRIPT")"
|
||||
|
||||
# Check for command definitions
|
||||
COMMAND=$command
|
||||
START_CMD=$start_cmd
|
||||
STOP_CMD=$stop_cmd
|
||||
if [ -n "$name" ]; then
|
||||
SERVICE_NAME=$name
|
||||
else
|
||||
SERVICE_NAME=$(basename $RC_SCRIPT)
|
||||
fi
|
||||
# Create dinit service file
|
||||
create_service_file() {
|
||||
cat > "/etc/dinit.d/$SERVICE_NAME" << EOF
|
||||
# Converted from rc.d script $(basename "$RC_SCRIPT")
|
||||
EOF
|
||||
|
||||
# Determine service type
|
||||
if [ -n "$STOP_CMD" ]; then
|
||||
mkdir -p /etc/dinit.d/wrappers/
|
||||
create_wrapper_script
|
||||
echo "type = scripted" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
echo "command = /etc/dinit.d/wrappers/$SERVICE_NAME start" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
echo "stop-command = /etc/dinit.d/wrappers/$SERVICE_NAME stop" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
elif [ -n "$COMMAND" ]; then
|
||||
echo "type = process" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
echo "command = $COMMAND" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
else
|
||||
echo "type = internal" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
fi
|
||||
if echo "$KEYWORDS" | grep -q "interact"; then
|
||||
echo "options = runs-on-console" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
#echo "termsig = SIGINT" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
fi
|
||||
# Add dependencies
|
||||
for dep in $REQUIRES; do
|
||||
echo "depends-on = $dep" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
done
|
||||
|
||||
for before in $BEFORE; do
|
||||
echo "before = $before" >> "/etc/dinit.d/$SERVICE_NAME"
|
||||
# echo "waits-for = $SERVICE_NAME" >> "/etc/dinit.d/$before"
|
||||
echo "$SERVICE_NAME" >> /tmp/before-list
|
||||
echo "$before" >> /tmp/before-list
|
||||
done
|
||||
}
|
||||
|
||||
create_wrapper_script() {
|
||||
cat > "/etc/dinit.d/wrappers/${SERVICE_NAME}" << EOF
|
||||
#!/bin/sh
|
||||
. /etc/rc.conf
|
||||
|
||||
# Check if service is enabled in rc.conf
|
||||
service_name=\$(basename "$RC_SCRIPT")
|
||||
eval "value=\\\$\$service_name"
|
||||
if [ "\$value" = "NO" ]; then
|
||||
exit 0 # Exit successfully but do nothing if disabled
|
||||
fi
|
||||
|
||||
case "\$1" in
|
||||
start)
|
||||
$RC_SCRIPT start
|
||||
;;
|
||||
stop)
|
||||
$RC_SCRIPT stop
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
chmod 755 "/etc/dinit.d/wrappers/${SERVICE_NAME}"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
mkdir -p /usr/local/lib/dinit.d
|
||||
create_service_file
|
||||
|
||||
echo "Created dinit service: /etc/dinit.d/$SERVICE_NAME"
|
||||
Loading…
Reference in New Issue
Block a user