openwrt / openwrt/packages

ACME: Can't start or display in system>>startup menu

Open
#25,957 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

release/24.10 stale
Dominant language
Makefile
Stars
4.6k
Forks
4k
Avg merge
3d 12h
Merged PRs (30d)
134

Description

Describe the bug

ACME can't start in new install without previous config

# /etc/init.d/acme start
/etc/rc.common: eval: line 107: syntax error: unterminated quoted string

Also acme dosn't appear in luci system>>startup menu

New acme setting is:

config acme
        option account_email 'email@gmail.com'
        option debug '0'

config cert 'site'
        option enabled '1'
        list domains 'my.domain.cc'
        option validation_method 'dns'
        option dns 'dns_cf'
        option staging '0'
        option key_type 'rsa2048'
        list credentials 'CF_Email="email@gmail.com"'
        list credentials 'CF_Key="my_cf_key"'

What's in /etc/rc.common:

#!/bin/sh
# Copyright (C) 2006-2012 OpenWrt.org

. $IPKG_INSTROOT/lib/functions.sh
. $IPKG_INSTROOT/lib/functions/service.sh

initscript=$1
action=${2:-help}
shift 2

start() {
        return 0
}

stop() {
        return 0
}

reload() {
        restart
}

restart() {
        trap '' TERM
        stop "$@"
        trap - TERM
        start "$@"
}

boot() {
        start "$@"
}

shutdown() {
        stop
}

disable() {
        name="$(basename "${initscript}")"
        rm -f "$IPKG_INSTROOT"/etc/rc.d/S??$name
        rm -f "$IPKG_INSTROOT"/etc/rc.d/K??$name
}

enable() {
        err=1
        name="$(basename "${initscript}")"
        [ "$START" ] && \
                ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" && \
                err=0
        [ "$STOP" ] && \
                ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}" && \
                err=0
        return $err
}

enabled() {
        name="$(basename "${initscript}")"
        name="${name##[SK][0-9][0-9]}"
        {
                [ -z "${START:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/S${START}$name" ]
        } && {
                [ -z "${STOP:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/K${STOP}$name" ]
        }
}

depends() {
        return 0
}

ALL_HELP=""
ALL_COMMANDS="boot shutdown depends"
extra_command() {
        local cmd="$1"
        local help="$2"

        local extra="$(printf "%-16s%s" "${cmd}" "${help}")"
        ALL_HELP="${ALL_HELP}\t${extra}\n"
        ALL_COMMANDS="${ALL_COMMANDS} ${cmd}"
}

help() {
        cat <<EOF
Syntax: $initscript [command]

Available commands:
EOF
        echo -e "$ALL_HELP"
}

# for procd
start_service() {
        return 0
}

stop_service() {
        return 0
}

service_triggers() {
        return 0
}

service_running() {
        local instance="${1:-*}"

        procd_running "$(basename $initscript)" "$instance"
}

${INIT_TRACE:+set -x}

extra_command "start" "Start the service"
extra_command "stop" "Stop the service"
extra_command "restart" "Restart the service"
extra_command "reload" "Reload configuration files (or restart if service does not implement reload)"
extra_command "enable" "Enable service autostart"
extra_command "disable" "Disable service autostart"
extra_command "enabled" "Check if service is started on boot"

. "$initscript"

[ -n "$USE_PROCD" ] && {
        extra_command "running" "Check if service is running"
        extra_command "status" "Service status"
        extra_command "trace" "Start with syscall trace"
        extra_command "info" "Dump procd service info"

        . $IPKG_INSTROOT/lib/functions/procd.sh
        basescript=$(readlink "$initscript")
        rc_procd() {
                local method="set"
                [ -n "$2" ] && method="add"
                procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
                "$@"
                procd_close_service "$method"
        }

        start() {
                rc_procd start_service "$@"
                if eval "type service_started" 2>/dev/null >/dev/null; then
                        service_started
                fi
        }

        trace() {
                TRACE_SYSCALLS=1
                start "$@"
        }

        info() {
                json_init
                json_add_string name "$(basename ${basescript:-$initscript})"
                json_add_boolean verbose "1"
                _procd_ubus_call list
        }

        stop() {
                procd_lock
                stop_service "$@"
                procd_kill "$(basename ${basescript:-$initscript})" "$1"
                if eval "type service_stopped" 2>/dev/null >/dev/null; then
                        service_stopped
                fi
        }

        reload() {
                if eval "type reload_service" 2>/dev/null >/dev/null; then
                        procd_lock
                        reload_service "$@"
                else
                        start
                fi
        }

        running() {
                service_running "$@"
        }

        status() {
                if eval "type status_service" 2>/dev/null >/dev/null; then
                        status_service "$@"
                else
                        _procd_status "$(basename ${basescript:-$initscript})" "$1"
                fi
        }
}

ALL_COMMANDS="${ALL_COMMANDS} ${EXTRA_COMMANDS}"
ALL_HELP="${ALL_HELP}${EXTRA_HELP}"
list_contains ALL_COMMANDS "$action" || action=help
$action "$@"
OpenWrt version

r28449-f47125f664

OpenWrt release

24.10-SNAPSHOT

OpenWrt target/subtarget

mediatek/filogic

Device

Bananapi BPI-R3

Image kind

Official repository build with packages:

acme	4.0.0
acme-acmesh	3.0.7-r2
acme-acmesh-dnsapi	3.0.7-r2
acme-common	1.4.0
luci-app-acme	25.037.68331~42f464c

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing /etc/init.d/acme start with the supplied ACME configuration and inspect /etc/rc.common together with the ACME init script. Check the package versions and the LuCI System>Startup integration. Done means a new installation starts without the unterminated-quote error and ACME appears in the startup menu.

Written by the indexing model from the issue text.

Assessment

Tech stack
shell
Domain
devops
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.