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
|
# Get ordered list using rcorder
|
||||||
ordered_scripts=$(rcorder -s nostart ${scripts})
|
ordered_scripts=$(rcorder -s nostart ${scripts})
|
||||||
|
. /etc/rc.conf
|
||||||
# Function to check if service is enabled
|
# Function to check if service is enabled
|
||||||
is_service_enabled() {
|
is_service_enabled() {
|
||||||
local script=$1
|
local script=$1
|
||||||
local service_name=$(basename "$script")
|
local service_name=$(basename "$script")
|
||||||
|
# local disabled="false"
|
||||||
# First check /etc/rc.conf
|
# First check /etc/rc.conf
|
||||||
if grep -q "^${service_name}=YES" /etc/rc.conf 2>/dev/null; then
|
# if grep -q "^${service_name}=NO" /etc/rc.conf 2>/dev/null; then
|
||||||
return 0
|
# # return 1
|
||||||
fi
|
# 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
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
# # 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
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Filter and display enabled services in order
|
# Filter and display enabled services in order
|
||||||
echo "Enabled services in boot order:"
|
# echo "Enabled services in boot order:"
|
||||||
echo "------------------------------"
|
# echo "------------------------------"
|
||||||
for script in ${ordered_scripts}; do
|
for script in ${ordered_scripts}; do
|
||||||
if is_service_enabled "$script"; then
|
if is_service_enabled "$script"; then
|
||||||
# Extract PROVIDE line to show service name
|
# Extract PROVIDE line to show service name
|
||||||
provide=$(grep "^# PROVIDE:" "$script" | cut -d: -f2-)
|
# provide=$(grep "^# PROVIDE:" "$script" | cut -d: -f2-)
|
||||||
echo "$(basename "$script")${provide:+ ($provide)}"
|
echo "$script"
|
||||||
fi
|
fi
|
||||||
done
|
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