]> Git Repo - buildroot-mgba.git/blob - system/Config.in
system: Move skeleton-init-* selection to init
[buildroot-mgba.git] / system / Config.in
1 menu "System configuration"
2
3 # Note on package/skeleton: usually, it is not safe to 'select' a
4 # provider of a virtual package. But below we have an exception: each
5 # init system may select one of the virtual skeleton-init-* packages.
6 # As only one init system may be enabled, only one skeleton-init-* may
7 # be selected. So this is a safe situation.
8 choice
9         prompt "Root FS skeleton"
10
11 config BR2_ROOTFS_SKELETON_DEFAULT
12         bool "default target skeleton"
13         help
14           Use default target skeleton for selected init system.
15
16 config BR2_ROOTFS_SKELETON_CUSTOM
17         bool "custom target skeleton"
18         select BR2_PACKAGE_SKELETON_CUSTOM
19         help
20           Use custom target skeleton.
21
22 # skeleton from br2-external trees, if any
23 source "$BR2_BASE_DIR/.br2-external.in.skeleton"
24
25 endchoice
26
27 if BR2_ROOTFS_SKELETON_CUSTOM
28
29 config BR2_ROOTFS_SKELETON_CUSTOM_PATH
30         string "custom target skeleton path"
31         help
32           Path to custom target skeleton.
33
34 endif
35
36 if BR2_ROOTFS_SKELETON_DEFAULT
37
38 config BR2_TARGET_GENERIC_HOSTNAME
39         string "System hostname"
40         default "buildroot"
41         help
42           Select system hostname to be stored in /etc/hostname.
43
44           Leave empty to not create /etc/hostname, or to keep the
45           one from a custom skeleton.
46
47 config BR2_TARGET_GENERIC_ISSUE
48         string "System banner"
49         default "Welcome to Buildroot"
50         help
51           Select system banner (/etc/issue) to be displayed at login.
52
53           Leave empty to not create /etc/issue, or to keep the
54           one from a custom skeleton.
55
56 endif
57
58 choice
59         bool "Passwords encoding"
60         default BR2_TARGET_GENERIC_PASSWD_SHA256
61         help
62           Choose the password encoding scheme to use when Buildroot
63           needs to encode a password (eg. the root password, below).
64
65           Note: this is used at build-time, and *not* at runtime.
66
67 config BR2_TARGET_GENERIC_PASSWD_SHA256
68         bool "sha-256"
69         help
70           Use SHA256 to encode passwords which is stronger than MD5.
71
72 config BR2_TARGET_GENERIC_PASSWD_SHA512
73         bool "sha-512"
74         help
75           Use SHA512 to encode passwords which is stronger than SHA256
76
77 endchoice # Passwd encoding
78
79 config BR2_TARGET_GENERIC_PASSWD_METHOD
80         string
81         default "md5"       if BR2_TARGET_GENERIC_PASSWD_MD5
82         default "sha-256"   if BR2_TARGET_GENERIC_PASSWD_SHA256
83         default "sha-512"   if BR2_TARGET_GENERIC_PASSWD_SHA512
84
85 # See comment at the top of the file, about selecting individual
86 # skeletons, which are providers of the virtual skeleton package.
87 choice
88         prompt "Init system"
89         default BR2_INIT_BUSYBOX
90
91 config BR2_INIT_BUSYBOX
92         bool "BusyBox"
93         select BR2_PACKAGE_BUSYBOX
94         select BR2_PACKAGE_INITSCRIPTS
95         select BR2_PACKAGE_SKELETON_INIT_SYSV if BR2_ROOTFS_SKELETON_DEFAULT
96
97 config BR2_INIT_SYSV
98         bool "systemV"
99         depends on BR2_USE_MMU # sysvinit
100         select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # sysvinit
101         select BR2_PACKAGE_INITSCRIPTS
102         select BR2_PACKAGE_SYSVINIT
103         select BR2_PACKAGE_SKELETON_INIT_SYSV if BR2_ROOTFS_SKELETON_DEFAULT
104
105 config BR2_INIT_OPENRC
106         bool "OpenRC"
107         depends on BR2_USE_MMU
108         depends on !BR2_STATIC_LIBS
109         select BR2_PACKAGE_OPENRC
110         select BR2_PACKAGE_SKELETON_INIT_OPENRC if BR2_ROOTFS_SKELETON_DEFAULT
111
112 comment "openrc needs a toolchain w/ dynamic library"
113         depends on BR2_USE_MMU
114         depends on BR2_STATIC_LIBS
115
116 # In Buildroot, we decided not to support a split-usr when systemd is
117 # used as an init system. This is a design decision, not a systemd
118 # issue. Thus the select is with BR2_INIT_SYSTEMD (below) rather than
119 # with BR2_PACKAGE_SYSTEMD.
120 config BR2_INIT_SYSTEMD
121         bool "systemd"
122         depends on BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS
123         depends on BR2_USE_MMU
124         depends on !BR2_STATIC_LIBS
125         depends on BR2_TOOLCHAIN_USES_GLIBC
126         depends on BR2_TOOLCHAIN_HAS_SSP
127         depends on BR2_TOOLCHAIN_HAS_THREADS
128         depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
129         depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5
130         depends on BR2_HOST_GCC_AT_LEAST_5
131         select BR2_ROOTFS_MERGED_USR
132         select BR2_PACKAGE_SYSTEMD
133         select BR2_PACKAGE_SKELETON_INIT_SYSTEMD if BR2_ROOTFS_SKELETON_DEFAULT
134
135 comment "systemd needs a glibc toolchain w/ SSP, headers >= 3.10, host and target gcc >= 5"
136         depends on BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS
137         depends on BR2_USE_MMU
138         depends on !BR2_TOOLCHAIN_USES_GLIBC || \
139                 !BR2_TOOLCHAIN_HAS_SSP || \
140                 !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 || \
141                 !BR2_TOOLCHAIN_GCC_AT_LEAST_5 || \
142                 !BR2_HOST_GCC_AT_LEAST_5
143
144 config BR2_INIT_NONE
145         bool "None"
146         select BR2_PACKAGE_SKELETON_INIT_NONE if BR2_ROOTFS_SKELETON_DEFAULT
147         help
148           Buildroot will not install any init system. You will
149           have to provide your own, either with a new package
150           or with a rootfs-overlay.
151
152 endchoice
153
154 choice
155         prompt "/dev management" if !BR2_INIT_SYSTEMD
156         default BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS
157
158 config BR2_ROOTFS_DEVICE_CREATION_STATIC
159         bool "Static using device table"
160
161 config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS
162         bool "Dynamic using devtmpfs only"
163
164 config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV
165         bool "Dynamic using devtmpfs + mdev"
166         select BR2_PACKAGE_BUSYBOX
167
168 config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV
169         bool "Dynamic using devtmpfs + eudev"
170         depends on BR2_USE_WCHAR # eudev
171         depends on !BR2_STATIC_LIBS
172         depends on BR2_USE_MMU # eudev
173         select BR2_PACKAGE_EUDEV
174
175 comment "eudev needs a toolchain w/ wchar, dynamic library"
176         depends on BR2_USE_MMU
177         depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS
178
179 endchoice
180
181 comment "/dev management using udev (from systemd)"
182         depends on BR2_INIT_SYSTEMD
183
184 config BR2_ROOTFS_DEVICE_TABLE
185         string "Path to the permission tables"
186         default "system/device_table.txt"
187         help
188           Specify a space-separated list of permission table locations,
189           that will be passed to the makedevs utility to assign
190           correct owners and permissions on various files in the
191           target filesystem.
192
193           See package/makedevs/README for details on the usage and
194           syntax of these files.
195
196 config BR2_ROOTFS_STATIC_DEVICE_TABLE
197         string "Path to the device tables"
198         default "system/device_table_dev.txt"
199         depends on BR2_ROOTFS_DEVICE_CREATION_STATIC
200         help
201           Specify a space-separated list of device table locations,
202           that will be passed to the makedevs utility to create all
203           the special device files under /dev.
204
205           See package/makedevs/README for details on the usage and
206           syntax of these files.
207
208 config BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES
209         bool "support extended attributes in device tables"
210         help
211           Support extended attributes handling in device tables
212
213 config BR2_ROOTFS_MERGED_USR
214         bool "Use symlinks to /usr for /bin, /sbin and /lib"
215         help
216           If you say 'n' here, then /bin, /sbin and /lib and their
217           counterparts in /usr will be separate directories. This
218           is the historical UNIX way. In this case, /usr can be a
219           filesystem on a partition separate from / .
220
221           If you say 'y' here, then /bin, /sbin and /lib will be
222           symlinks to their counterparts in /usr. In this case, /usr can
223           not be a separate filesystem.
224
225 if BR2_ROOTFS_SKELETON_DEFAULT
226
227 config BR2_TARGET_ENABLE_ROOT_LOGIN
228         bool "Enable root login with password"
229         default y
230         select BR2_PACKAGE_HOST_MKPASSWD if BR2_TARGET_GENERIC_ROOT_PASSWD != ""
231         help
232           Allow root to log in with a password.
233
234           If not enabled, root will not be able to log in with a
235           password. However, if you have an ssh server and you add an
236           ssh key, you can still allow root to log in. Alternatively,
237           you can use sudo to become root.
238
239 config BR2_TARGET_GENERIC_ROOT_PASSWD
240         string "Root password"
241         default ""
242         depends on BR2_TARGET_ENABLE_ROOT_LOGIN
243         help
244           Set the initial root password.
245
246           If set to empty (the default), then no root password will be
247           set, and root will need no password to log in.
248
249           If the password starts with any of $1$, $5$ or $6$, it is
250           considered to be already crypt-encoded with respectively md5,
251           sha256 or sha512.  Any other value is taken to be a clear-text
252           value, and is crypt-encoded as per the "Passwords encoding"
253           scheme, above.
254
255           Note: "$" signs in the hashed password must be doubled. For
256           example, if the hashed password is
257           "$1$longsalt$v35DIIeMo4yUfI23yditq0", then you must enter it
258           as "$$1$$longsalt$$v35DIIeMo4yUfI23yditq0" (this is necessary
259           otherwise make would attempt to interpret the $ as a variable
260           expansion).
261
262           WARNING! WARNING!
263           The password appears as-is in the .config file, and may appear
264           in the build log! Avoid using a valuable password if either
265           the .config file or the build log may be distributed, or at
266           the very least use a strong cryptographic hash for your
267           password!
268
269 choice
270         bool "/bin/sh"
271         default BR2_SYSTEM_BIN_SH_DASH if !BR2_PACKAGE_BUSYBOX
272         help
273           Select which shell will provide /bin/sh.
274
275 # busybox has shells that work on noMMU
276 config BR2_SYSTEM_BIN_SH_BUSYBOX
277         bool "busybox' default shell"
278         depends on BR2_PACKAGE_BUSYBOX
279
280 config BR2_SYSTEM_BIN_SH_BASH
281         bool "bash"
282         depends on BR2_USE_MMU # bash
283         depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
284         select BR2_PACKAGE_BASH
285
286 config BR2_SYSTEM_BIN_SH_DASH
287         bool "dash"
288         depends on BR2_USE_MMU # dash
289         depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
290         select BR2_PACKAGE_DASH
291
292 config BR2_SYSTEM_BIN_SH_MKSH
293         bool "mksh"
294         depends on BR2_USE_MMU # mksh
295         depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
296         select BR2_PACKAGE_MKSH
297
298 config BR2_SYSTEM_BIN_SH_ZSH
299         bool "zsh"
300         depends on BR2_USE_MMU # zsh
301         depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
302         select BR2_PACKAGE_ZSH
303
304 comment "bash, dash, mksh, zsh need BR2_PACKAGE_BUSYBOX_SHOW_OTHERS"
305         depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS && BR2_PACKAGE_BUSYBOX
306
307 config BR2_SYSTEM_BIN_SH_NONE
308         bool "none"
309
310 endchoice # /bin/sh
311
312 config BR2_SYSTEM_BIN_SH
313         string
314         default "bash"    if BR2_SYSTEM_BIN_SH_BASH
315         default "dash"    if BR2_SYSTEM_BIN_SH_DASH
316         default "mksh"    if BR2_SYSTEM_BIN_SH_MKSH
317         default "zsh"     if BR2_SYSTEM_BIN_SH_ZSH
318
319 menuconfig BR2_TARGET_GENERIC_GETTY
320         bool "Run a getty (login prompt) after boot"
321         default y
322
323 if BR2_TARGET_GENERIC_GETTY
324 config BR2_TARGET_GENERIC_GETTY_PORT
325         string "TTY port"
326         default "console"
327         help
328           Specify a port to run a getty on.
329
330 choice
331         prompt "Baudrate"
332         default BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
333         help
334           Select a baudrate to use.
335
336 config BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
337         bool "keep kernel default"
338 config BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
339         bool "9600"
340 config BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
341         bool "19200"
342 config BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
343         bool "38400"
344 config BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
345         bool "57600"
346 config BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200
347         bool "115200"
348 endchoice
349
350 config BR2_TARGET_GENERIC_GETTY_BAUDRATE
351         string
352         default "0"             if BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
353         default "9600"          if BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
354         default "19200"         if BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
355         default "38400"         if BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
356         default "57600"         if BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
357         default "115200"        if BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200
358
359 config BR2_TARGET_GENERIC_GETTY_TERM
360         string "TERM environment variable"
361         default "vt100"
362         # currently observed by all but systemd
363         depends on !BR2_INIT_SYSTEMD
364         help
365           Specify a TERM type.
366
367 config BR2_TARGET_GENERIC_GETTY_OPTIONS
368         string "other options to pass to getty"
369         default ""
370         # currently observed by all but systemd
371         depends on !BR2_INIT_SYSTEMD
372         help
373           Any other flags you want to pass to getty,
374           Refer to getty --help for details.
375 endif
376
377 config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
378         bool "remount root filesystem read-write during boot"
379         default y
380         help
381           The root filesystem is typically mounted read-only at boot.
382           By default, buildroot remounts it in read-write mode early
383           during the boot process.
384           Say no here if you would rather like your root filesystem to
385           remain read-only.
386           If unsure, say Y.
387
388 config BR2_SYSTEM_DHCP
389         string "Network interface to configure through DHCP"
390         default ""
391         depends on BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN || \
392                 BR2_PACKAGE_SYSTEMD_NETWORKD || BR2_PACKAGE_NETIFRC
393         help
394           Enter here the name of the network interface (E.G. eth0) to
395           automatically configure through DHCP at bootup.
396
397           If left empty, no automatic DHCP requests will take place.
398
399           For more complicated network setups use an overlay to
400           overwrite /etc/network/interfaces or add a networkd
401           configuration file.
402
403 comment "automatic network configuration via DHCP needs ifupdown or busybox or networkd or netifrc"
404         depends on !(BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN || \
405                 BR2_PACKAGE_SYSTEMD_NETWORKD || BR2_PACKAGE_NETIFRC)
406
407 endif # BR2_ROOTFS_SKELETON_DEFAULT
408
409 config BR2_SYSTEM_DEFAULT_PATH
410         string "Set the system's default PATH"
411         default "/usr/bin:/usr/sbin" if BR2_ROOTFS_MERGED_USR
412         default "/bin:/sbin:/usr/bin:/usr/sbin" if !BR2_ROOTFS_MERGED_USR
413         help
414           Sets the system's default PATH. It is being used in
415           /etc/profile in the skeleton-init-common package and by some
416           daemons.
417
418           The default should work in most cases.
419
420 config BR2_ENABLE_LOCALE_PURGE
421         bool "Purge unwanted locales"
422         default y
423         help
424           Explicitly specify what locales to install on target. If N
425           then all locales supported by packages are installed.
426
427 config BR2_ENABLE_LOCALE_WHITELIST
428         string "Locales to keep"
429         default "C en_US"
430         depends on BR2_ENABLE_LOCALE_PURGE
431         help
432           Whitespace seperated list of locales to allow on target.
433           Locales not listed here will be removed from the target.
434           See 'locale -a' on your host for a list of locales available
435           on your build host, or have a look in /usr/share/locale in
436           the target file system for available locales.
437
438           Notice that listing a locale here doesn't guarantee that it
439           will be available on the target - That purely depends on the
440           support for that locale in the selected packages.
441
442 config BR2_GENERATE_LOCALE
443         string "Generate locale data"
444         default ""
445         depends on \
446                 (BR2_TOOLCHAIN_BUILDROOT_UCLIBC && BR2_ENABLE_LOCALE) || \
447                 BR2_TOOLCHAIN_USES_GLIBC
448         help
449           Generate support for a list of locales. Locales can be
450           specified with or without encoding, when no encoding is
451           specified, UTF-8 is assumed. Examples of locales: en_US,
452           fr_FR.UTF-8.
453
454 config BR2_SYSTEM_ENABLE_NLS
455         bool "Enable Native Language Support (NLS)"
456         depends on BR2_USE_WCHAR
457         #  - glibc has built-in NLS support, but anyway doesn't
458         #    support static linking
459         #  - musl and uclibc support static linking, but they don't
460         #    have built-in NLS support, which is provided by the
461         #    libintl library from gettext. The fact that it is a
462         #    separate library causes too many problems for static
463         #    linking.
464         depends on !BR2_STATIC_LIBS
465         select BR2_PACKAGE_GETTEXT if !BR2_TOOLCHAIN_HAS_FULL_GETTEXT
466         help
467           This option will enable Native Language Support, which will
468           allow software packages to support translations.
469
470 comment "NLS support needs a toolchain w/ wchar, dynamic library"
471         depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS
472
473 config BR2_TARGET_TZ_INFO
474         bool "Install timezone info"
475         select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_GLIBC
476         select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_MUSL
477         select BR2_PACKAGE_TZ if BR2_TOOLCHAIN_USES_UCLIBC
478         help
479           Say 'y' here to install timezone info.
480
481 if BR2_TARGET_TZ_INFO
482
483 config BR2_TARGET_TZ_ZONELIST
484         string "timezone list"
485         default "default"
486         help
487           Space-separated list of time zones to compile.
488
489           The value "default" includes all commonly used time zones.
490           Note that this set consumes around 5.5M for glibc and 2.1M for
491           uClibc.
492
493           The full list is the list of files in the time zone database
494           source, not including the build and .tab files.
495
496 config BR2_TARGET_LOCALTIME
497         string "default local time"
498         default "Etc/UTC"
499         help
500           The time zone to install as the default local time, expressed
501           as a tzdata location, such as:
502             Etc/UTC             (the default)
503             GMT
504             Europe/Paris
505             America/New_York
506             Pacific/Wallis
507             ...
508
509           Set to empty to not install a default time zone.
510
511 endif # BR2_TARGET_TZ_INFO
512
513 config BR2_ROOTFS_USERS_TABLES
514         string "Path to the users tables"
515         help
516           Specify a space-separated list of users table locations,
517           that will be passed to the mkusers utility to create
518           users on the system, with home directory, password, etc.
519
520           See manual for details on the usage and syntax of these files.
521
522 config BR2_ROOTFS_OVERLAY
523         string "Root filesystem overlay directories"
524         default ""
525         help
526           Specify a list of directories that are copied over the target
527           root filesystem after the build has finished and before it is
528           packed into the selected filesystem images.
529
530           They are copied as-is into the rootfs, excluding files ending
531           with ~ and .git, .svn and .hg directories.
532
533 config BR2_ROOTFS_POST_BUILD_SCRIPT
534         string "Custom scripts to run before creating filesystem images"
535         default ""
536         help
537           Specify a space-separated list of scripts to be run after the
538           build has finished and before Buildroot starts packing the
539           files into selected filesystem images.
540
541           This gives users the opportunity to do board-specific
542           cleanups, add-ons and the like, so the generated files can be
543           used directly without further processing.
544
545           These scripts are called with the target directory name as
546           first argument. Make sure the exit code of those scripts are
547           0, otherwise make will stop after calling them.
548
549 config BR2_ROOTFS_POST_FAKEROOT_SCRIPT
550         string "Custom scripts to run inside the fakeroot environment"
551         default ""
552         help
553           Specify a space-separated list of scripts to be run at the end
554           of the fakeroot script right before the image(s) are actually
555           generated.
556
557           This gives users the opportunity to do customisations of the
558           content of the rootfs, which would otherwise require root
559           rights.
560
561           These scripts are called with the target directory name as
562           first argument. The build will fail on the first scripts that
563           exits with a non-zero exit code.
564
565           Note that Buildroot already provides mechanisms to customise
566           the content of the rootfs:
567
568             - BR2_ROOTFS_STATIC_DEVICE_TABLE
569                 to create arbitrary entries statically in /dev
570
571             - BR2_ROOTFS_DEVICE_TABLE
572                 to set arbitrary permissions as well as extended
573                 attributes (such as capabilities) on files and
574                 directories,
575
576             - BR2_ROOTFS_USERS_TABLES:
577                 to create arbitrary users and their home directories
578
579           It is highly recommended to use those mechanisms if possible,
580           rather than using custom fakeroot scripts.
581
582 config BR2_ROOTFS_POST_IMAGE_SCRIPT
583         string "Custom scripts to run after creating filesystem images"
584         default ""
585         help
586           Specify a space-separated list of scripts to be run after
587           the build has finished and after Buildroot has packed the
588           files into selected filesystem images.
589
590           This can for example be used to call a tool building a
591           firmware image from different images generated by Buildroot,
592           or automatically extract the tarball root filesystem image
593           into some location exported by NFS, or any other custom
594           action.
595
596           These scripts are called with the images directory name as
597           first argument. The script is executed from the main Buildroot
598           source directory as the current directory.
599
600 config BR2_ROOTFS_POST_SCRIPT_ARGS
601         string "Extra arguments passed to custom scripts"
602         depends on BR2_ROOTFS_POST_BUILD_SCRIPT != "" \
603                 || BR2_ROOTFS_POST_FAKEROOT_SCRIPT != "" \
604                 || BR2_ROOTFS_POST_IMAGE_SCRIPT != ""
605         help
606           Pass these additional arguments to each post-build or
607           post-image scripts.
608
609           Note that all the post-build and post-image scripts will be
610           passed the same set of arguments, you can not pass different
611           arguments to each script.
612
613           Note also, as stated in their respective help text, that the
614           first argument to each post-build or post-image script is the
615           target directory / images directory. The arguments in this
616           option will be passed *after* those.
617
618 endmenu
This page took 0.065226 seconds and 4 git commands to generate.