Вопрос или проблема
Когда я устанавливаю любой пакет, я вижу сообщение об ошибке от uci:
uci: Неверный аргумент
Как мне узнать, где ошибка?
Примечание: Это всего лишь сообщение об ошибке. Пакет всё равно устанавливается успешно.
Подтвердите ошибку, запустив:
uci export 2>&1 | grep 'uci:'
Если будет найдена ошибка внутри конфигурационного файла uci, то uci export
покажет “Ошибка разбора”. В этом случае вы можете найти имя файла с помощью strace.
Если uci export
говорит uci: Неверный аргумент
, то это не ошибка разбора внутри конфигурационного файла. Вместо этого это может значить, что uci
не нравится имя одного из файлов в /etc/config/
.
“Важно знать, что идентификаторы UCI и имена конфигурационных файлов могут содержать только символы a-z, 0-9 и _. Например, дефисы (-) не разрешены.”
Имена файлов, которые содержат точку И дефис, например “network.old-version”, могут вызывать ошибку uci: Неверный аргумент
.
Чтобы найти эту ошибку, попытайтесь искать имена файлов в /etc/config
, которые содержат символ, не относящийся к a-z, 0-9, _, или -.
(Вы не можете использовать команду strace для поиска проблемного имени файла по техническим причинам. Подсказка: readdir() не является системным вызовом.)
Замечание: всегда ли это вызывает ошибку, если в имени файла в /etc/config
есть дефис (-)?
В настоящее время имена файлов, которые содержат дефис, могут создаваться автоматически во время обновления, например “/etc/config/network-opkg”. Такие файлы, похоже, не требуют специального обращения. Это значит, что вы можете выполнять uci export network-opkg
, uci get network-opkg.@device[0].name
и т.д. Это также означает, что файл “network-opkg” на ничего не влияет, потому что нет службы, которая читает uci “пакет” с именем “network-opkg”.
Если имя файла содержит дефисы, но не точечный символ, это, похоже, не вызывает ошибки. Хотя способ, которым здесь работает OpenWRT, может быть запутанным.
Ответ или решение
Как найти причину ошибки "uci: Invalid argument"?
Ошибка "uci: Invalid argument" может возникать при установке пакетов в OpenWRT, несмотря на то, что сама установка проходит успешно. Давайте разберем, что может быть причиной этой ошибки и как ее выявить.
Понимание ошибки
Из сообщения об ошибке следует, что проблема заключается в невалидном аргументе, передаваемом в команду uci
, которая управляет конфигурационными файлами в OpenWRT. Важно понимать, что ошибок парсинга в конфигурационных файлах не происходит, если вывод команды uci export
не выдает сообщений о парсинге. Вместо этого, ошибка скорее всего связана с именами файлов в директории /etc/config/
.
Возможные причины
-
Имена файлов: UCI (Unified Configuration Interface) имеет строгие ограничения на символы, которые могут использоваться в идентификаторах и именах конфигурационных файлов. Разрешены только буквы a-z, цифры 0-9 и символ подчеркивания (_). Использование дефиса (-) или других символов, таких как точка (.), может вызвать ошибку "Invalid argument".
-
Файлы с неправильными именами: Например, файлы, содержащие как точку, так и дефис (например,
network.old-version
), могут привести к данной ошибке.
Шаги по устранению ошибки
Чтобы найти и исправить причину ошибки "uci: Invalid argument", выполните следующие действия:
-
Проверка конфигурационных файлов:
- Перейдите в директорию
/etc/config
:cd /etc/config
- С помощью следующей команды проверьте файлы в этой директории:
ls -1
- Ищите файлы, названия которых содержат недопустимые символы (например, дефисы или точки).
- Перейдите в директорию
-
Поиск недопустимых имен файлов:
- Создайте и запустите скрипт, который найдет файлы с недопустимыми символами. Например:
for file in *; do if [[ "$file" =~ [^a-zA-Z0-9_.] ]]; then echo "Найден недопустимый файл: $file" fi done
- Создайте и запустите скрипт, который найдет файлы с недопустимыми символами. Например:
-
Исправление имен файлов:
- После того как вы идентифицируете файлы с недопустимыми именами, переименуйте их, заменив любые недопустимые символы на допустимые, например:
mv network.old-version network_old_version
- После того как вы идентифицируете файлы с недопустимыми именами, переименуйте их, заменив любые недопустимые символы на допустимые, например:
-
Повторная проверка:
- После переименования файлов снова выполните команду
uci export 2>&1 | grep 'uci:'
, чтобы убедиться, что ошибка устранена.
- После переименования файлов снова выполните команду
Заключение
Ошибка "uci: Invalid argument" связана с неправильными именами файлов в директории /etc/config/
. Убедитесь, что названия файлов соответствуют требованиям OpenWRT, чтобы избежать подобных ошибок в будущем. Применение алгоритма поиска и исправления имен файлов обеспечит нормальное функционирование системы.
Если у вас остались вопросы или вам нужна дополнительная помощь, не стесняйтесь обращаться за поддержкой.