menu "System configuration"

choice
	prompt "Root FS skeleton"

config BR2_ROOTFS_SKELETON_DEFAULT
	bool "default target skeleton"
	help
	  Use default target skeleton

config BR2_ROOTFS_SKELETON_CUSTOM
	bool "custom target skeleton"
	help
	  Use custom target skeleton.

endchoice

if BR2_ROOTFS_SKELETON_CUSTOM

config BR2_ROOTFS_SKELETON_CUSTOM_PATH
	string "custom target skeleton path"
	help
	  Path to custom target skeleton.

# dummy config so merged /usr workarounds can also be activated for
# custom rootfs skeleton
config BR2_ROOTFS_MERGED_USR

endif

if BR2_ROOTFS_SKELETON_DEFAULT

config BR2_TARGET_GENERIC_HOSTNAME
	string "System hostname"
	default "buildroot"
	help
	  Select system hostname to be stored in /etc/hostname.

	  Leave empty to not create /etc/hostname, or to keep the
	  one from a custom skeleton.

config BR2_TARGET_GENERIC_ISSUE
	string "System banner"
	default "Welcome to Buildroot"
	help
	  Select system banner (/etc/issue) to be displayed at login.

	  Leave empty to not create /etc/issue, or to keep the
	  one from a custom skeleton.

endif

choice
	bool "Passwords encoding"
	default BR2_TARGET_GENERIC_PASSWD_MD5
	help
	  Choose the password encoding scheme to use when Buildroot
	  needs to encode a password (eg. the root password, below).

	  Note: this is used at build-time, and *not* at runtime.

config BR2_TARGET_GENERIC_PASSWD_MD5
	bool "md5"
	help
	  Use MD5 to encode passwords.

	  The default. Wildly available, and pretty good.
	  Although pretty strong, MD5 is now an old hash function, and
	  suffers from some weaknesses, which makes it susceptible to
	  brute-force attacks.

config BR2_TARGET_GENERIC_PASSWD_SHA256
	bool "sha-256"
	help
	  Use SHA256 to encode passwords.

	  Very strong, but not ubiquitous, although available in glibc
	  for some time now. Choose only if you are sure your C library
	  understands SHA256 passwords.

config BR2_TARGET_GENERIC_PASSWD_SHA512
	bool "sha-512"
	help
	  Use SHA512 to encode passwords.

	  Extremely strong, but not ubiquitous, although available in glibc
	  for some time now. Choose only if you are sure your C library
	  understands SHA512 passwords.

endchoice # Passwd encoding

config BR2_TARGET_GENERIC_PASSWD_METHOD
	string
	default "md5"       if BR2_TARGET_GENERIC_PASSWD_MD5
	default "sha-256"   if BR2_TARGET_GENERIC_PASSWD_SHA256
	default "sha-512"   if BR2_TARGET_GENERIC_PASSWD_SHA512

choice
	prompt "Init system"
	default BR2_INIT_BUSYBOX

config BR2_INIT_BUSYBOX
	bool "BusyBox"
	select BR2_PACKAGE_BUSYBOX
	select BR2_PACKAGE_INITSCRIPTS

config BR2_INIT_SYSV
	bool "systemV"
	depends on BR2_USE_MMU # sysvinit
	select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # sysvinit
	select BR2_PACKAGE_INITSCRIPTS
	select BR2_PACKAGE_SYSVINIT

# In Buildroot, we decided not to support a split-usr when systemd is
# used as an init system. This is a design decision, not a systemd
# issue. Thus the select is with BR2_INIT_SYSTEMD (below) rather than
# with BR2_PACKAGE_SYSTEMD.
config BR2_INIT_SYSTEMD
	bool "systemd"
	depends on BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_GLIBC
	depends on BR2_USE_WCHAR
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_TOOLCHAIN_HAS_SSP
	depends on BR2_USE_MMU
	depends on !BR2_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
	select BR2_ROOTFS_MERGED_USR
	select BR2_PACKAGE_SYSTEMD
	select BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW if BR2_ROOTFS_SKELETON_DEFAULT

comment "systemd needs a glibc toolchain, headers >= 3.10"
	depends on !(BR2_TOOLCHAIN_USES_GLIBC \
		&& BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10)

config BR2_INIT_NONE
	bool "None"
	help
	  Buildroot will not install any init system. You will
	  have to provide your own, either with a new package
	  or with a rootfs-overlay.

endchoice

choice
	prompt "/dev management" if !BR2_INIT_SYSTEMD
	default BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS

config BR2_ROOTFS_DEVICE_CREATION_STATIC
	bool "Static using device table"

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS
	bool "Dynamic using devtmpfs only"

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV
	bool "Dynamic using devtmpfs + mdev"
	select BR2_PACKAGE_BUSYBOX

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV
	bool "Dynamic using devtmpfs + eudev"
	depends on BR2_USE_WCHAR # eudev
	depends on !BR2_STATIC_LIBS
	depends on BR2_USE_MMU # eudev
	select BR2_PACKAGE_EUDEV

comment "eudev needs a toolchain w/ wchar, dynamic library"
	depends on BR2_USE_MMU
	depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS

endchoice

comment "/dev management using udev (from systemd)"
	depends on BR2_INIT_SYSTEMD

config BR2_ROOTFS_DEVICE_TABLE
	string "Path to the permission tables"
	default "system/device_table.txt"
	help
	  Specify a space-separated list of permission table locations,
	  that will be passed to the makedevs utility to assign
	  correct owners and permissions on various files in the
	  target filesystem.

	  See package/makedevs/README for details on the usage and
	  syntax of these files.

config BR2_ROOTFS_STATIC_DEVICE_TABLE
	string "Path to the device tables"
	default "system/device_table_dev.txt"
	depends on BR2_ROOTFS_DEVICE_CREATION_STATIC
	help
	  Specify a space-separated list of device table locations,
	  that will be passed to the makedevs utility to create all
	  the special device files under /dev.

	  See package/makedevs/README for details on the usage and
	  syntax of these files.

config BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES
	bool "support extended attributes in device tables"
	help
	  Support extended attributes handling in device tables

if BR2_ROOTFS_SKELETON_DEFAULT

config BR2_ROOTFS_MERGED_USR
	bool "Use symlinks to /usr for /bin, /sbin and /lib"
	help
	  If you say 'n' here, then /bin, /sbin and /lib and their
	  counterparts in /usr will be separate directories. This
	  is the historical UNIX way. In this case, /usr can be a
	  filesystem on a partition separate from / .

	  If you say 'y' here, then /bin, /sbin and /lib will be symlinks
	  to their counterparts in /usr. In this case, /usr can not be a
	  separate filesystem.

config BR2_TARGET_ENABLE_ROOT_LOGIN
	bool "Enable root login with password"
	default y
	help
	  Allow root to log in with a password.

	  If not enabled, root will not be able to log in with a password.
	  However, if you have an ssh server and you add an ssh key, you
	  can still allow root to log in. Alternatively, you can use sudo
	  to become root.

config BR2_TARGET_GENERIC_ROOT_PASSWD
	string "Root password"
	default ""
	depends on BR2_TARGET_ENABLE_ROOT_LOGIN
	help
	  Set the initial root password.

	  If set to empty (the default), then no root password will be set,
	  and root will need no password to log in.

	  If the password starts with any of $1$, $5$ or $6$, it is considered
	  to be already crypt-encoded with respectively md5, sha256 or sha512.
	  Any other value is taken to be a clear-text value, and is crypt-encoded
	  as per the "Passwords encoding" scheme, above.

	  Note: "$" signs in the hashed password must be doubled. For example,
	  if the hashed password is "$1$longsalt$v35DIIeMo4yUfI23yditq0",
	  then you must enter it as "$$1$$longsalt$$v35DIIeMo4yUfI23yditq0"
	  (this is necessary otherwise make would attempt to interpret the $
	  as a variable expansion).

	  WARNING! WARNING!
	  The password appears as-is in the .config file, and may appear
	  in the build log! Avoid using a valuable password if either the
	  .config file or the build log may be distributed, or at the
	  very least use a strong cryptographic hash for your password!

choice
	bool "/bin/sh"
	default BR2_SYSTEM_BIN_SH_DASH if !BR2_PACKAGE_BUSYBOX
	help
	  Select which shell will provide /bin/sh.

# busybox has shells that work on noMMU
config BR2_SYSTEM_BIN_SH_BUSYBOX
	bool "busybox' default shell"
	depends on BR2_PACKAGE_BUSYBOX

config BR2_SYSTEM_BIN_SH_BASH
	bool "bash"
	depends on BR2_USE_MMU # bash
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_BASH

config BR2_SYSTEM_BIN_SH_DASH
	bool "dash"
	depends on BR2_USE_MMU # dash
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_DASH

config BR2_SYSTEM_BIN_SH_MKSH
	bool "mksh"
	depends on BR2_USE_MMU # mksh
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_MKSH

config BR2_SYSTEM_BIN_SH_ZSH
	bool "zsh"
	depends on BR2_USE_MMU # zsh
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_ZSH

comment "bash, dash, mksh, zsh need BR2_PACKAGE_BUSYBOX_SHOW_OTHERS"
	depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS && BR2_PACKAGE_BUSYBOX

config BR2_SYSTEM_BIN_SH_NONE
	bool "none"

endchoice # /bin/sh

config BR2_SYSTEM_BIN_SH
	string
	default "bash"    if BR2_SYSTEM_BIN_SH_BASH
	default "dash"    if BR2_SYSTEM_BIN_SH_DASH
	default "mksh"    if BR2_SYSTEM_BIN_SH_MKSH
	default "zsh"     if BR2_SYSTEM_BIN_SH_ZSH

menuconfig BR2_TARGET_GENERIC_GETTY
	bool "Run a getty (login prompt) after boot"
	default y

if BR2_TARGET_GENERIC_GETTY
config BR2_TARGET_GENERIC_GETTY_PORT
	string "TTY port"
	default "console"
	help
	  Specify a port to run a getty on.

choice
	prompt "Baudrate"
	default BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
	help
	  Select a baudrate to use.

config BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
	bool "keep kernel default"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
	bool "9600"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
	bool "19200"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
	bool "38400"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
	bool "57600"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200
	bool "115200"
endchoice

config BR2_TARGET_GENERIC_GETTY_BAUDRATE
	string
	default "0"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
	default "9600"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
	default "19200"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
	default "38400"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
	default "57600"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
	default "115200"	if BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200

config BR2_TARGET_GENERIC_GETTY_TERM
	string "TERM environment variable"
	default "vt100"
	help
	  Specify a TERM type.

config BR2_TARGET_GENERIC_GETTY_OPTIONS
	string "other options to pass to getty"
	default ""
	help
	  Any other flags you want to pass to getty,
	  Refer to getty --help for details.
endif

config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
	bool "remount root filesystem read-write during boot"
	default y
	help
	  The root filesystem is typically mounted read-only at boot.
	  By default, buildroot remounts it in read-write mode early during the
	  boot process.
	  Say no here if you would rather like your root filesystem to remain
	  read-only.
	  If unsure, say Y.

config BR2_SYSTEM_DHCP
	string "Network interface to configure through DHCP"
	default ""
	depends on BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN || BR2_PACKAGE_SYSTEMD_NETWORKD
	help
	  Enter here the name of the network interface (E.G. eth0) to
	  automatically configure through DHCP at bootup.

	  If left empty, no automatic DHCP requests will take place.

	  For more complicated network setups use an overlay to overwrite
	  /etc/network/interfaces or add a networkd configuration file.

comment "automatic network configuration via DHCP needs ifupdown or busybox or networkd"
	depends on !(BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN || BR2_PACKAGE_SYSTEMD_NETWORKD)

endif # BR2_ROOTFS_SKELETON_DEFAULT

config BR2_ENABLE_LOCALE_PURGE
	bool "Purge unwanted locales"
	default y
	help
	  Explicitly specify what locales to install on target. If N
	  then all locales supported by packages are installed.

config BR2_ENABLE_LOCALE_WHITELIST
	string "Locales to keep"
	default "C en_US"
	depends on BR2_ENABLE_LOCALE_PURGE
	help
	  Whitespace seperated list of locales to allow on target.
	  Locales not listed here will be removed from the target.
	  See 'locale -a' on your host for a list of locales available
	  on your build host, or have a look in /usr/share/locale in
	  the target file system for available locales.

	  Notice that listing a locale here doesn't guarantee that it
	  will be available on the target - That purely depends on the
	  support for that locale in the selected packages.

config BR2_GENERATE_LOCALE
	string "Generate locale data"
	default ""
	depends on \
		(BR2_TOOLCHAIN_BUILDROOT_UCLIBC && BR2_ENABLE_LOCALE) || \
		BR2_TOOLCHAIN_USES_GLIBC
	help
	  Generate support for a list of locales. Locales can be
	  specified with or without encoding, when no encoding is
	  specified, UTF-8 is assumed. Examples of locales: en_US,
	  fr_FR.UTF-8.

config BR2_TARGET_TZ_INFO
	bool "Install timezone info"
	select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_GLIBC
	select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_MUSL
	select BR2_PACKAGE_TZ if BR2_TOOLCHAIN_USES_UCLIBC
	help
	  Say 'y' here to install timezone info.

if BR2_TARGET_TZ_INFO

config BR2_TARGET_TZ_ZONELIST
	string "timezone list"
	default "default"
	help
	  Space-separated list of time zones to compile.

	  The value "default" includes all commonly used time zones. Note
	  that this set consumes around 5.5M for glibc and 2.1M for uClibc.

	  The full list is the list of files in the time zone database source,
	  not including the build and .tab files.

config BR2_TARGET_LOCALTIME
	string "default local time"
	default "Etc/UTC"
	help
	  The time zone to install as the default local time, expressed as a
	  tzdata location, such as:
	    GMT
	    Europe/Paris
	    America/New_York
	    Pacific/Wallis
	    ...

	  If empty, no local time will be set, and the dates will be
	  expressed in UTC.

endif # BR2_TARGET_TZ_INFO

config BR2_ROOTFS_USERS_TABLES
	string "Path to the users tables"
	help
	  Specify a space-separated list of users table locations,
	  that will be passed to the mkusers utility to create
	  users on the system, with home directory, password, etc.

	  See manual for details on the usage and syntax of these files.

config BR2_ROOTFS_OVERLAY
	string "Root filesystem overlay directories"
	default ""
	help
	  Specify a list of directories that are copied over the target
	  root filesystem after the build has finished and before it is
	  packed into the selected filesystem images.

	  They are copied as-is into the rootfs, excluding files ending with
	  ~ and .git, .svn and .hg directories.

config BR2_ROOTFS_POST_BUILD_SCRIPT
	string "Custom scripts to run before creating filesystem images"
	default ""
	help
	  Specify a space-separated list of scripts to be run after the build
	  has finished and before Buildroot starts packing the files into
	  selected filesystem images.

	  This gives users the opportunity to do board-specific cleanups,
	  add-ons and the like, so the generated files can be used directly
	  without further processing.

	  These scripts are called with the target directory name as first
	  argument. Make sure the exit code of those scripts are 0, otherwise
	  make will stop after calling them.

config BR2_ROOTFS_POST_FAKEROOT_SCRIPT
	string "Custom scripts to run inside the fakeroot environment"
	default ""
	help
	  Specify a space-separated list of scripts to be run at the end
	  of the fakeroot script right before the image(s) are actually
	  generated.

	  This gives users the opportunity to do customisations of the
	  content of the rootfs, which would otherwise require root
	  rights.

	  These scripts are called with the target directory name as
	  first argument. The build will fail on the first scripts that
	  exits with a non-zero exit code.

	  Note that Buildroot already provides mechanisms to customise
	  the content of the rootfs:

	    - BR2_ROOTFS_STATIC_DEVICE_TABLE
	        to create arbitrary entries statically in /dev

	    - BR2_ROOTFS_DEVICE_TABLE
	        to set arbitrary permissions as well as extended attributes
	        (such as capabilities) on files and directories,

	    - BR2_ROOTFS_USERS_TABLES:
	        to create arbitrary users and their home directories

	  It is highly recommended to use those mechanisms if possible,
	  rather than using custom fakeroot scripts.

config BR2_ROOTFS_POST_IMAGE_SCRIPT
	string "Custom scripts to run after creating filesystem images"
	default ""
	help
	  Specify a space-separated list of scripts to be run after
	  the build has finished and after Buildroot has packed the
	  files into selected filesystem images.

	  This can for example be used to call a tool building a
	  firmware image from different images generated by Buildroot,
	  or automatically extract the tarball root filesystem image
	  into some location exported by NFS, or any other custom
	  action.

	  These scripts are called with the images directory name as
	  first argument. The script is executed from the main Buildroot
	  source directory as the current directory.

config BR2_ROOTFS_POST_SCRIPT_ARGS
	string "Extra arguments passed to custom scripts"
	depends on BR2_ROOTFS_POST_BUILD_SCRIPT != "" \
		|| BR2_ROOTFS_POST_FAKEROOT_SCRIPT != "" \
		|| BR2_ROOTFS_POST_IMAGE_SCRIPT != ""
	help
	  Pass these additional arguments to each post-build or post-image
	  scripts.

	  Note that all the post-build and post-image scripts will be passed
	  the same set of arguments, you can not pass different arguments to
	  each script.

	  Note also, as stated in their respective help text, that the first
	  argument to each post-build or post-image script is the target
	  directory / images directory. The arguments in this option will be
	  passed *after* those.

endmenu
