1716 Commits
Author SHA1 Message Date
André Valentin eaffd8be91 base-files: support per-color intensities for multicolor LEDs
The led init script already knows how to drive a multicolor LED: it reads
multi_index and writes one intensity per color to multi_intensity, taken
from color_<name> options of the led section. Nothing fills those options
in, though - generate_led only passes name, sysfs, trigger and default on
to uci, so the intensities stay at zero and the LED remains dark whatever
trigger is set. No board has been able to use it so far.

Pass any color_* key of a board.json led object through to the led
section, and add ucidef_set_led_colors() to set them from board.d:

  ucidef_set_led_default "led1" "LED1" "nbg7815:led1" "1"
  ucidef_set_led_colors "led1" red 255 green 255 blue 255

The colors are not restricted to RGB - the keys are matched against
whatever the LED reports in multi_index.

Signed-off-by: André Valentin <avalentin@marcant.net>
2026-10-11 21:28:57 +02:00
Ivan Romanov 3735d60599 base-files: keep /var/lock volatile with persistent /var
Enabling CONFIG_TARGET_ROOTFS_PERSIST_VAR leaves /var/lock on
persistent storage, allowing stale lock files to survive reboots.

Link /var/lock to ../tmp/lock so that lock files remain volatile.
Use a relative symlink to keep build-time accesses within the
target root filesystem. Create the target directory for rootfs
preparation. procd already recreates /tmp/lock at boot.

Fixes: 57807f50de ("base-files: add option to make /var persistent")
Signed-off-by: Ivan Romanov <drizt72@zoho.eu>
Link: https://github.com/openwrt/openwrt/pull/25718
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-10-11 16:39:26 +02:00
Felix Fietkau 1a93f81a6e base-files: add -f to board_detect and config_generate
board_detect runs board.d only when the target file is missing, and
/etc/board.json is now a symlink to a copy of board-base.json. With -f,
board_detect runs board.d again, also when /tmp/board.json exists, and
replaces the target file. config_generate passes -f to board_detect.
config_generate still creates only the UCI configuration that is
missing.

The regenerated copy in tmpfs has no wlan runtime data until the next
'wifi config'.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-10-08 09:50:37 +02:00
Felix Fietkau 220bdab34e base-files: keep the board.d data in board-base.json, board.json in tmpfs
wifi-detect adds runtime wlan data to /etc/board.json. It rewrites the
file on flash at least twice on every boot: the run before kmodloader
sees no wiphy and removes the data, and the hotplug run adds it again.

board_detect now writes the board.d data to /etc/board-base.json and
copies it to /tmp/sysinfo/board.json on every boot. base-files ships
/etc/board.json as a symlink to the copy in tmpfs, so readers do not
change. If /etc/board.json is not a symlink, for example a file kept
across a reflash or a file added to the image, board_detect replaces
it with the symlink. The sysupgrade overlay backup skips
board-base.json, as it skips board.json.

If /tmp/board.json exists when board_detect creates board-base.json,
board_detect uses it instead of running board.d again. That file comes
from preinit_config_board() or the x86 diag.sh in the same boot. The
preinit shell holds their exported jshn state, and board.d run from it
writes an empty object.

Changes in behaviour:
- Changes to /etc/board.json do not persist. Persistent changes go to
  /etc/board-base.json.
- Removing /etc/board.json no longer runs board.d again.
- board_detect exits 0 when the target file exists. Before, it exited
  1. As a result, preinit_match_diag_led() in the x86 diag.sh now uses
  the /tmp/board.json from preinit_config_board().

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-10-08 09:50:37 +02:00
Wei-Ting Yang 935d33d31a base-files: add CONFIG_TARGET_SERIAL to PKG_CONFIG_DEPENDS
Ensure changes to CONFIG_TARGET_SERIAL trigger a base-files rebuild so
that the latest value is used in /etc/inittab.

Signed-off-by: Wei-Ting Yang <williamatcg@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/25689
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-10-07 14:07:47 +02:00
Daniel Golle ac0b20dbce base-files: configure the preinit interface on hotplug
preinit_ip runs once when preinit starts and configures the preinit
interface only if its driver has already registered it. Drivers that
probe while preinit is running leave failsafe without a network.

Run procd's preinit hotplug daemon on net add events, as the rule in
hotplug-preinit.json.d does, and have it start /sbin/preinit-netdev.
The script runs the new preinit_netdev boot hook, which targets use to
rename the new netdev, and then calls preinit_ip_event, which
configures the preinit interface unless it already carries the
preinit address.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-07 00:03:51 +01:00
Manuel Fombuena c5cffacc1d base-files: add ucidef for LEDs with configurable brightness
Add ucidef_set_led_brightness() to set up a static LED with an optional
brightness level, complementing ucidef_set_led_default() for hardware
that supports per-channel current or PWM control.

The function writes a "brightness" type to board.json alongside the
default on/off state. config_generate picks this up and writes the
brightness option to the UCI LED config, where the led init script
already knows to apply it.

Signed-off-by: Manuel Fombuena <fombuena@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/23457
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-10-05 10:26:16 +02:00
Johan Alvarado 3f26ab3d4d base-files: keep kernel and rootfs UBI volume IDs with provisioning
Since sysupgrade creates the provisioning volume by default, it takes the
lowest free volume ID before the kernel and rootfs volumes are created.
This shifts their IDs by one, so devices that hardcode the rootfs volume
in root= (e.g. root=/dev/ubiblock0_1) no longer boot after a sysupgrade.

Create the provisioning volume with the last volume ID instead.

A provisioning volume that already exists at a low ID is kept and has to
be removed by hand.

Fixes: 725a1dc534 ("base-files: create the provisioning partition on sysupgrade by default")
Fixes: https://github.com/openwrt/openwrt/issues/25501
Signed-off-by: Johan Alvarado <contact@c127.dev>
2026-10-01 22:29:55 +02:00
Felix Fietkau 725a1dc534 base-files: create the provisioning partition on sysupgrade by default
The partition holds data that must survive a factory reset, so a device
needs it before the data exists, not after. Waiting for the user to pass
-P means the partition is missing on exactly the devices that were never
flashed with it in mind.

The partition is only created if it does not exist yet, and --no-provisioning
turns the behaviour off.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-09-29 17:29:25 +02:00
Daniel Golle e06e3a621b audio-support: move audio device handling out of procd
The audio group and the rule that puts the ALSA character devices in it
are part of procd and base-files, so every image carries them whether or
not it has a sound card, and a package wanting the group has nothing to
depend on. Playback, capture and MIDI all land in one group as well, so a
process allowed to play is also allowed to record.

Move the lot into a new audio-support package with three groups, audio,
audio-capture and midi, and a hotplug fragment that sorts the sound nodes
between them. kmod-sound-core depends on the package, and so do the image
profiles that ship a sound driver. The dependency is a plain one, not a
select, so sound support is offered once the feature is chosen; userspace
that needs one of the groups depends on the same package. Images without
it fall back to the generic rule and get /dev/snd/* as 0600 root:root.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-29 15:29:43 +01:00
Charles Joynson 180fa957e3 base-files: add mtd_get_mac_uci_config()
Add mtd_get_mac_uci_config() for reading a MAC address from a UCI-style
config stored in an MTD partition. This is needed to support the
TP-Link ER605 v1; the existing UBI helper already covers the ER605 v2.
Also refactor common sed logic into a shared helper used by both
variants and drop the redundant cat pipe.

TP-Link ER605 v2 device support is unaffected. The one and only MAC
address on the tddp partition for v1/v2 is the label MAC address.

Signed-off-by: Charles Joynson <ctjoynson@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/24331
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-08-11 23:18:26 +02:00
David Bauer 4b0f7ebab7 base-files: fix missing tabs
Tabs were missing from the default button behavior modification blocks,
breaking the build if they were activated.

Signed-off-by: David Bauer <mail@david-bauer.net>
2026-07-26 18:02:42 +02:00
Felix Fietkau 2c64257627 wifi-scripts: support multiple device paths per board.json wlan entry
The path field of a board.json wlan entry may now be an array of
device paths. ucidef_add_wlan accepts several leading path arguments
and stores them as a JSON array; a single path is still stored as a
plain string for backwards compatibility. A phy is matched if it
corresponds to any of the listed paths, so a radio that enumerates on
a non-deterministic PCI path still resolves to the correct named phy.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-07-22 09:32:52 +02:00
Felix Fietkau 8c613a9a22 base-files: derive DHCP DUID from device MAC address
The DUID-UUID was generated from a random UUID, which is regenerated on
every fresh flash and therefore does not survive reconfiguration events
such as reflashing without keeping the configuration. RFC8415/RFC6355
prefer a DUID that remains stable across such events.

Add a ucode helper that picks the first LAN port (falling back to WAN)
from /etc/board.json, resolves its MAC address and derives a stable UUID
from it, falling back to a random UUID only when that fails.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-06-24 11:21:28 +02:00
Lukas Stockner 5497d5ba23 base-files: handle name collision between kernel UBI volume and MTD partition
On the AP-325 (and variants), the bootloader enforces a particular UBI volume
layout and naming, so unfortunately the kernel's UBI volume and MTD partition
end up with the name, which confuses the current logic.

Therefore, add an option to ignore the MTD partition.

Signed-off-by: Lukas Stockner <lukas@lukasstockner.de>
Link: https://github.com/openwrt/openwrt/pull/20738
Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-06-16 16:07:58 +02:00
Lukas Stockner bf770bc4e3 base-files: support rootfs_data on its own partition
The current code assumes that the rootfs_data UBI volume is on the same MTD
partition as the rootfs.
Unfortunately, this does not work on the Aruba AP-325 (and variants), since
the bootloader enforces a particular UBI volume layout.

Therefore, this adds a separate variable to set the rootfs_data partition,
and updates all existing devices with a non-default rootfs partition to also
specify the new variable.

Signed-off-by: Lukas Stockner <lukas@lukasstockner.de>
Link: https://github.com/openwrt/openwrt/pull/20738
Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-06-16 16:07:48 +02:00
Paul Spooren 3ee64a736c Revert "base-files: support rootfs_data on its own partition"
This reverts commit 13fc688f03.
Wrong Signed-off-by line was used, reverting and re-applying.

Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-06-16 16:05:25 +02:00
Paul Spooren 7ef7a3581a Revert "base-files: handle name collision between kernel UBI volume and MTD partition"
This reverts commit eef8c718b4.
Wrong Signed-off-by line was used, reverting and re-applying.

Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-06-16 16:05:23 +02:00
Lukas Stockner eef8c718b4 base-files: handle name collision between kernel UBI volume and MTD partition
On the AP-325 (and variants), the bootloader enforces a particular UBI volume
layout and naming, so unfortunately the kernel's UBI volume and MTD partition
end up with the name, which confuses the current logic.

Therefore, add an option to ignore the MTD partition.

Signed-off-by: Lukas Stockner <lukas@lukasstockner.de>
Link: https://github.com/openwrt/openwrt/pull/20738
Signed-off-by: Test Dev <dev@example.org>
2026-06-16 13:45:44 +02:00
Lukas Stockner 13fc688f03 base-files: support rootfs_data on its own partition
The current code assumes that the rootfs_data UBI volume is on the same MTD
partition as the rootfs.
Unfortunately, this does not work on the Aruba AP-325 (and variants), since
the bootloader enforces a particular UBI volume layout.

Therefore, this adds a separate variable to set the rootfs_data partition,
and updates all existing devices with a non-default rootfs partition to also
specify the new variable.

Signed-off-by: Lukas Stockner <lukas@lukasstockner.de>
Link: https://github.com/openwrt/openwrt/pull/20738
Signed-off-by: Test Dev <dev@example.org>
2026-06-16 13:45:44 +02:00
Shine 9ba54d2d9e scripts: dhcp/dhcpv6: handling of invalid client ID values
Verify and clean up client ID and global DUID config values before use, in
order to prevent DHCP client malfunction and loss of IPv4 and/or IPv6
connectivity.

- Accept common separators in the string (colon, dash, spaces/tabs, lf)
- Ignore invalid values (non-hex or odd-numbered length)
- Log a warning for invalid settings

The fall back mechanism is as follows:

If a (user-configured) network.<ifname>.clientid setting is found invalid,
ignore and fall back to using network.globals.dhcp_default_duid. In case
that's also invalid (e.g. has been tampered with), don't pass a client
ID to updhc/odhcpc. In that case, udhcpc/odhcpc will use their defaults,
which currently is the i/f MAC address resp. the i/f DUID-LL.

Only error handling is introduced, no behavior change for valid settings.

Signed-off-by: Shine <4c.fce2@proton.me>
Link: https://github.com/openwrt/openwrt/pull/23662
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-06-11 10:40:57 +02:00
Florian Eckert ca54521988 base-files: move config_generate to preinit
The mutex file via '/tmp/.config_pending' should prevent the command
'/sbin/wifi config' from being called in the ieee80211 hotplug when loading
the kernel modules [1]. Since the file '/etc/board.json' does not yet exist
and could be incomplete.

The '/etc/board.json' file is modified in the '/sbin/wifi config' script.
This is only generated during the first boot when '/bin/config_generate' is
called.

This whole handling is unclean. Therefore the creation of the default
configuration '/etc/config/network', '/etc/config/system' and
'/etc/board.json' via '/sbin/config_generate' is moved to the preinint
after the rootfile system has been mounted

The advantage now is that on an ieee80211 hotplug event, the
'/etc/board.json' is already present which simplifies the whole thing.

[1] https://github.com/openwrt/openwrt/blob/main/package/network/config/wifi-scripts/files/etc/hotplug.d/ieee80211/10-wifi-detect

Fixes: b993a00b82 ("base-files: fix duplicate wifi radio sections when using phy renaming")

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-06-05 20:53:18 +02:00
David Bauer 4bdc2ab93a base-files: add options to disable default button handling
In case OpenWrt is used to build a custom distribution, the default
button handling logic may be undesired.

Add config options to disable default standard button handling code
at build-time.

Signed-off-by: David Bauer <mail@david-bauer.net>
2026-05-20 00:02:31 +02:00
Philip Prindeville 052665be21 dropbear: don't spread conffiles across two packages
For some reason, /etc/config/dropbear is enumerated as a
conffile for dropbear packaging, but /etc/dropbear/ is
part of base-files packaging.  If you're an openssh-server
user, then you don't have this directory on your router in
any case.

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
Link: https://github.com/openwrt/openwrt/pull/23041
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2026-04-29 09:32:03 +02:00
Andre Heider 2194ff572f base-files: ipcalc.sh: get rid of basename dependency
The netifd/dhcp flow uses this, and as uxc mounts netifd in a
container, this allows not mounting `basename` for just a usage.

References: https://github.com/openwrt/procd/pull/34
Suggested-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Andre Heider <a.heider@gmail.com>
2026-04-24 01:48:15 +01:00
Eric Fahlgren 038bc85849 base-files: sysupgrade: exclude apk files from backup
Exclude more apk related files from the sysupgrade backup list when
using the various options that scan /etc for changes.

Ensure removal of the system generated distfeeds list, as that
contains kernel- and version-specific urls and should never be
retained.

Also exclude any '*.apk-new' files, equivalent to the old '*-opkg'
files, which may have been created during package installation.

Example before
  $ sysupgrade -l -c | grep apk
  /etc/apk/keys/buildroot.pem
  /etc/apk/repositories.d/customfeeds.list
  /etc/apk/repositories.d/distfeeds.list
  /etc/owut.d/pre-install.sh.apk-new
  /etc/config/adblock.apk-new

After
  $ sysupgrade -l -c | grep apk
  /etc/apk/keys/buildroot.pem
  /etc/apk/repositories.d/customfeeds.list

Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22937
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-04-16 21:22:22 +02:00
Luiz Angelo Daros de Luca 37c5aade23 base-files: sysupgrade: -u option was broken with apk
The check of files from packages was only checking opkg files.
Check for apk as well and fail if both are missing.

Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17847
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-13 01:27:55 +02:00
Luiz Angelo Daros de Luca 2c146f29e8 base-files: sysupgrade: update backup exclusion list
The list of files excluded from backup was outdated.

Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17847
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-13 01:27:55 +02:00
Luiz Angelo Daros de Luca 1d3f33b6b1 base-files: sysupgrade: fix -f with space in bkp path
Spaces in the backup.tgz filename was breaking sysupgrade.

Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17847
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-13 01:27:54 +02:00
Clemens Hopfer 63d0b5c243 base-files: MAJOR/MINOR not sequential, use DISKSEQ instead
Export the unique, monotonic DISKSEQ sequence drive number instead of its
major/minor numbers to identify the boot disk and directly match the partition
in export_partdevice with PARTN.

The MINOR blockdevice numbers are not guaranteed sequential across disks, it
can happen that disks enumerate before their partitions are probed, resulting
in interleaved MINOR numbers breaking the partition offset calculation:

major minor  #blocks  name
 259        0  250059096 nvme0n1
 259        2       8192 nvme0n1p1
 259        3     491520 nvme0n1p2
 259        4        239 nvme0n1p128
 259        1  250059096 nvme1n1
 259        5  250057728 nvme1n1p1

Signed-off-by: Clemens Hopfer <openwrt@wireloss.net>
Link: https://github.com/openwrt/openwrt/pull/18962
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-04-03 20:40:49 +02:00
Nick Hainke 10db6fc26e base-files: sysupgrade: avoid cat missing conffiles_static
If the user removes all /lib/apk/packages/*.conffiles* files to prevent
sysupgrade from preserving configuration, the glob no longer matches and
sysupgrade ends up calling cat on a non-existent path:

  cat: can't open '/lib/apk/packages/*.conffiles_static': No such file or directory

Fix this by using find cmd.

Signed-off-by: Nick Hainke <vincent@systemli.org>
Link: https://github.com/openwrt/openwrt/pull/22071
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-19 17:50:12 +01:00
Oliver Sedlbauer 49a0acb12c base-files: avoid rm error messages in failsafe_wait
The fs_wait_for_key function runs multiple background processes that all
try to delete the same temporary file ($keypress_wait) when they exit.
This creates a race condition where one process successfully deletes the
file while others fail with ENOENT.

Busybox rm only suppresses "file not found" errors during the initial lstat()
check, not during the actual unlink() call. This causes error messages in the
boot log even with rm -f:

  rm: can't remove '/tmp/tmp.hKjPDH': No such file or directory

Fixed by redirecting stderr to /dev/null for rm calls in concurrent contexts.
This change does not affect functionality and only avoids confusing log
output during boot.

Signed-off-by: Oliver Sedlbauer <os@dev.tdt.de>
Link: https://github.com/openwrt/openwrt/pull/22079
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2026-03-04 12:54:16 +01:00
Paul Spooren 07c29c4482 package: drop apk cheatsheet from base-files
This has been up for a while, let's drop it.

Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-03-04 10:15:21 +01:00
Jonas Gorski a4e92f0484 build: use STAGING_DIR for special APK package versions
Removing tmp/ after having built base-files or toolchain currently
breaks rootfs generation:

$ rm -rf tmp
$ make V=w
...
 make[2] package/install
cat: .../openwrt/tmp/base-files.version: No such file or directory
cat: .../openwrt/openwrt/tmp/libc.version: No such file or directory
ERROR: 'base-files=' is not a valid world dependency, format is name(@tag)([<>~=]version)
make[2]: *** [package/Makefile💯 package/install] Error 99

The only way to recover from here is to clean toolchain and base-files via

$ make package/{base-files,toolchain}/clean

tmp is supposed to be ephemeral, so clearing it is an expected action,
which normally just triggers a regeneration of all files there.

Fix this by moving the version files to $(STAGING_DIR).

Fixes: 63e178f067 ("build: lock versions for special APK packages")
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21803
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-02-01 11:16:54 +01:00
John Audia ef10679153 base-files: remove ftp user and group
Any ftpd package such as vsftpd or atftpd (are there others?) should
create their own unprivileged user. Both of the aforementioned
packages do not even use this ftp user and run as root. That should be
addressed in separate commits.

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/19418
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-24 20:32:53 +01:00
Álvaro Fernández Rojas e1f2b666ff base-files: introduce a function to generate IAID
Add new function "network_generate_iface_iaid()" to generate a stable IAID
from an interface name.

Link: https://github.com/openwrt/openwrt/pull/21489
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2026-01-14 18:07:27 +01:00
Eric Fahlgren 54c7ad8d8a base-files: uci-defaults: migrate time zonename on upgrade
Timezone names no longer allow spaces, so older installations
upgrading to new will have their timezone reset to UTC.

For example, on 24.10:
  $ uci get system.@system[0].zonename
  America/Los Angeles

After upgrade to 25.12:
  $ uci get system.@system[0].zonename
  UTC

Add a migration script to edit zonename on first boot.

Fixes: https://github.com/openwrt/luci/commit/d9a087e4
Link: https://github.com/openwrt/luci/issues/8203
Link: https://forum.openwrt.org/t/openwrt-25-12-0-rc1-release-candidate/244364/98
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21482
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-11 19:12:41 +01:00
Yanase Yuki f92ee7a8e5 treewide: switch to HTTPS URL
Avoids insecure plain HTTP.

Signed-off-by: Yanase Yuki <dev@zpc.st>
Link: https://github.com/openwrt/openwrt/pull/21279
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:07:02 +01:00
Liangbin Lian e9fd3facd0 base-files: fix default_postinst clearing luci cache
The path to the LuCI index cache file has changed to
/tmp/luci-indexcache.*.json since OpenWrt 22.03.

Update functions.sh to align with luci.mk.

Signed-off-by: Liangbin Lian <jjm2473@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21280
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-12-26 20:02:59 +01:00
David Woodhouse 24b8db118b image: add CONFIG_EXTRA_IMAGE_NAME
This allows an optional tag to be put in the .config file which is
included in the filename of the resulting images, so it's easier to
build images with different functionality for the same target hardware.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Link: https://github.com/openwrt/openwrt/pull/20984
Signed-off-by: Petr Štetiar <ynezz@true.cz>
2025-12-12 22:06:06 +00:00
David Härdeman 52fa3728e5 base-files: always generate default DUID
The previous logic was copied from 12_network-generate-ula, but fails to
account for upgrades where the "auto" value isn't set (it is set by
base-files/files/bin/config_generate). Fix this to always set the
default duid if it isn't set.

Also, rename the file to better reflect what it does.

Closes: #21029
Fixes: a660a076db ("base-files: generate a global DHCP DUID")
Link: https://github.com/openwrt/openwrt/pull/21118
Signed-off-by: David Härdeman <david@hardeman.nu>
Signed-off-by: Petr Štetiar <ynezz@true.cz> [fixes,closes tag]
2025-12-11 06:39:34 +00:00
Andreas Gnau 26ba9b609b base-files: board_detect: make resilient against power-cuts
If board_detect is interrupted by cutting power on first boot,
board.json might only be half-way written and the file will not be
written again correctly on subsequent boots.

Write to a temporary file first, then rename. Since a rename on the same
file system is an atomic operation, it ensures that either
/etc/board.json does not exist or that the complete file exists.

Signed-off-by: Andreas Gnau <andreas.gnau@iopsys.eu>
Link: https://github.com/openwrt/openwrt/pull/20831
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-11-25 21:51:25 +01:00
Andreas Gnau cac609aca8 base-files: board_detect: Address shellcheck warnings
* SC2166 (warning): Prefer [ p ] && [ q ] as [ p -a q ] is not well
   defined.
 * SC2086 (info): Double quote to prevent globbing and word splitting.
 * SC2091 (warning): Remove surrounding $() to avoid executing output
   (or use eval if intentional).

Signed-off-by: Andreas Gnau <andreas.gnau@iopsys.eu>
Link: https://github.com/openwrt/openwrt/pull/20831
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-11-25 21:51:25 +01:00
Konstantin Demin 9b7ffed9eb base-files: allow to skip unwanted scripts
this change allows one to selectively "hush" scripts from /etc/profile.d/ directory.
e.g., to skip "opkg to apk cheatsheet" message ("/etc/profile.d/apk-cheatsheet.sh") create empty file "/etc/profile.d/apk-cheatsheet.hush" using, for example, command "touch /etc/profile.d/apk-cheatsheet.hush"

Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/19953
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-11-20 17:48:18 +01:00
Konstantin Demin eb71d10009 base-files: split /etc/profile
- move extra parts to /etc/profile.d/*
- improve syntax and messages

Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/19953
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-11-20 17:48:18 +01:00
Alice H. 010575c617 base-files: correct global DHCP DUID generation
The old command generates an often incorrect variable length UUID
instead of a fixed 16-octet hex string.

Ref: https://datatracker.ietf.org/doc/html/rfc8415#section-11.5

Signed-off-by: Alice H. <alice.hall0451+github@gmail.com>
2025-11-08 16:30:37 +01:00
David Härdeman a660a076db base-files: generate a global DHCP DUID
odhcp6c and odhcpd currently generate custom DUIDS on a per-interface basis
using the MAC address of the given interface.

This is contrary to how DUIDs are meant to be used, as the client identifier
will vary from interface to interface, while it is meant to remain stable for a
given host, no matter how the network hardware changes (see RFC8415, §11).

The same problem exists in odhcpd, which also generates server-side DUIDs on a
per-interface basis.

In order to support a stable per-device DUID, generate one on first boot and
store it via uci.

Currently, a DUID-UUID style clientid is generated. This is mostly meant as an
RFC, and we might consider using a different kind of DUID instead (DUID-LLT,
DUID-EN).

One drawback is that this will typically change the DUID used on existing
OpenWrt devices when upgrading to a new release. However, that seems
unavoidable and is a one-time pain in order to have stable DUIDs (and in many
cases, it shouldn't cause any issues).

v2: move the uci cfg generation outside of an IPv6-only block since this
is relevant to the DHCPv4 client as well

Signed-off-by: David Härdeman <david@hardeman.nu>
Link: https://github.com/openwrt/openwrt/pull/20359
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-10-19 19:46:22 +02:00
Til Kaiser 055d877a20 base-files: add ucidef_set_interface_netdev_range function
The ucidef_set_interface* functions can be used to
add network interfaces to a default network configuration.
Such network interfaces often have the same base interface
name (e.g., eth* or lan*). On devices with many network ports,
adding all ports to the default config can become inconvenient.

This commit adds a new uci function ucidef_set_interface_netdev_range,
which adds network interfaces for a specific port range to a given
OpenWrt interface. The first parameter is the OpenWrt interface, the
second is the base interface name, the third is the port start, and
the fourth is the port end range.

Signed-off-by: Til Kaiser <mail@tk154.de>
Link: https://github.com/openwrt/openwrt/pull/17251
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-10-06 19:06:26 +02:00
Markus Gothe 1e6ee26691 base-files: commit and sync before removing defaults script.
Improve the resilence against power failures during
boot-up by trying to sync the file system before
removing the script. The order of the operations
are important.

Signed-off-by: Markus Gothe <markus.gothe@genexis.eu>
Link: https://github.com/openwrt/openwrt/pull/20248
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-10-04 20:49:21 +02:00
Andreas Gnau 11aa0fc6fb base-files: find_mmc_part: Silence error when no MMC exists
When running find_mmc_part on a system without MMC or when the given
root device does not exist, an error message is printed to stderr.

    grep: /sys/block/mmcblk*/mmcblk*p*/uevent: No such file or directory

Silence this error message.

Since find_mmc_part is mostly used to get block devices of MMC
partitions and the negative result (partion not found) is checked for by
the caller, the error message can be silenced without causing any
negative impact.

Signed-off-by: Andreas Gnau <andreas.gnau@iopsys.eu>
Link: https://github.com/openwrt/openwrt/pull/19492
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-07-27 18:08:44 +02:00