mirror of
https://git.freebsd.org/src.git
synced 2026-01-16 23:02:24 +00:00
bsdinstall: Improve pkgbase handling for jails
Add a new --jail option to the pkgbase script which installs jail-specific set variants if they exist: * "minimal" is replaced with "minimal-jail" * A kernel is not installed. * For sets shown in the component selection dialogue, only show the appropriate variant (jail or non-jail) for the target. Modify the jail script to pass --jail to the pkgbase script. Remove the redundant --no-kernel option, which was added in 15.0 and was only used to install jails. MFC after: 3000ms Reviewed by: ifreund_freebsdfoundation.org Sponsored by: https://www.patreon.com/bsdivy Differential Revision: https://reviews.freebsd.org/D52829
This commit is contained in:
parent
aa9e4fe3c9
commit
8d0a90512e
3 changed files with 70 additions and 34 deletions
|
|
@ -244,7 +244,7 @@ Extracts the distributions listed in
|
|||
.Ev DISTRIBUTIONS
|
||||
into
|
||||
.Ev BSDINSTALL_CHROOT .
|
||||
.It Cm pkgbase Op Fl --no-kernel
|
||||
.It Cm pkgbase Op Fl --jail
|
||||
Fetch and install base system packages to
|
||||
.Ev BSDINSTALL_CHROOT .
|
||||
Packages are fetched according to repository configuration in
|
||||
|
|
@ -253,8 +253,10 @@ if set, or
|
|||
.Lk pkg.freebsd.org
|
||||
otherwise.
|
||||
If the
|
||||
.Fl --no-kernel
|
||||
option is passed, no kernel is installed.
|
||||
.Fl --jail
|
||||
option is passed, no kernel is installed, and the
|
||||
.Dq jail
|
||||
variant of each package set will be selected where applicable.
|
||||
.It Cm firmware
|
||||
executes
|
||||
.Xr fwget 8
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ if [ ! "$nonInteractive" == "YES" ]; then
|
|||
fi
|
||||
|
||||
if [ "$PKGBASE" == yes ]; then
|
||||
bsdinstall pkgbase --no-kernel || error "Installation of base system packages failed"
|
||||
bsdinstall pkgbase --jail || error "Installation of base system packages failed"
|
||||
else
|
||||
distbase
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -80,7 +80,9 @@ local function select_components(components, options)
|
|||
["kernel-dbg"] = "Debug symbols for the kernel",
|
||||
["devel"] = "C/C++ compilers and related utilities",
|
||||
["optional"] = "Optional software (excluding compilers)",
|
||||
["optional-jail"] = "Optional software (excluding compilers)",
|
||||
["base"] = "The complete base system (includes devel and optional)",
|
||||
["base-jail"] = "The complete base system (includes devel and optional)",
|
||||
["src"] = "System source tree",
|
||||
["tests"] = "Test suite",
|
||||
["lib32"] = "32-bit compatibility libraries",
|
||||
|
|
@ -91,6 +93,7 @@ local function select_components(components, options)
|
|||
-- by default.
|
||||
local defaults = {
|
||||
["base"] = "on",
|
||||
["base-jail"] = "on",
|
||||
["kernel-dbg"] = "on",
|
||||
}
|
||||
-- Enable compat sets by default.
|
||||
|
|
@ -101,40 +104,66 @@ local function select_components(components, options)
|
|||
-- Sorting the components is necessary to ensure that the ordering is
|
||||
-- consistent in the UI.
|
||||
local sorted_components = {}
|
||||
|
||||
-- Determine which components we want to offer the user.
|
||||
local show_component = function (component)
|
||||
-- "pkg" is always installed if present.
|
||||
if component == "pkg" then return false end
|
||||
|
||||
-- Don't include individual "-dbg" components, because those
|
||||
-- are handled via the "debug" component, except for kernel-dbg
|
||||
-- which is always shown for non-jail installations.
|
||||
if component == "kernel-dbg" then
|
||||
return (not options.jail)
|
||||
end
|
||||
if component:match("%-dbg$") then return false end
|
||||
|
||||
-- Some sets have "-jail" variants which are jail-specific
|
||||
-- variants of the base set.
|
||||
|
||||
if options.jail and components[component.."-jail"] then
|
||||
-- If we're installing in a jail, and this component
|
||||
-- has a jail variant, hide it.
|
||||
return false
|
||||
end
|
||||
|
||||
if not options.jail and component:match("%-jail$") then
|
||||
-- Otherwise if we're not installing in a jail, and
|
||||
-- this is a jail variant, hide it.
|
||||
return false
|
||||
end
|
||||
|
||||
-- "minimal(-jail)" is always installed if present.
|
||||
if component == "minimal" or component == "minimal-jail" then
|
||||
return false
|
||||
end
|
||||
|
||||
-- "kernel" (the generic kernel) and "kernels" (the set) are
|
||||
-- never offered; we always install the kernel for a non-jail
|
||||
-- installation.
|
||||
if component == "kernel" or component == "kernels" then
|
||||
return false
|
||||
end
|
||||
|
||||
-- If we didn't find a reason to hide this component, show it.
|
||||
return true
|
||||
end
|
||||
|
||||
for component, _ in pairs(components) do
|
||||
-- Decide which sets we want to offer to the user:
|
||||
--
|
||||
-- "minimal" is not offered since it's always included, as is
|
||||
-- "pkg" if it's present.
|
||||
--
|
||||
-- "-dbg" sets are never offered, because those are handled
|
||||
-- via the "debug" component.
|
||||
--
|
||||
-- "kernels" is never offered because we only want one kernel,
|
||||
-- which is handled separately.
|
||||
--
|
||||
-- Sets whose name ends in "-jail" are intended for jails, and
|
||||
-- are only offered if no_kernel is set.
|
||||
if component ~= "pkg" and
|
||||
not component:match("^minimal") and
|
||||
not (component:match("%-dbg$") and component ~= "kernel-dbg") and
|
||||
not (component == "kernels") and
|
||||
not (not options.no_kernel and component:match("%-jail$")) then
|
||||
if show_component(component) then
|
||||
table.insert(sorted_components, component)
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(sorted_components)
|
||||
|
||||
local checklist_items = {}
|
||||
for _, component in ipairs(sorted_components) do
|
||||
if component ~= "kernel" and not
|
||||
(component == "kernel-dbg" and options.no_kernel) then
|
||||
local description = descriptions[component] or ""
|
||||
local default = defaults[component] or "off"
|
||||
table.insert(checklist_items, component)
|
||||
table.insert(checklist_items, description)
|
||||
table.insert(checklist_items, default)
|
||||
end
|
||||
local description = descriptions[component] or ""
|
||||
local default = defaults[component] or "off"
|
||||
table.insert(checklist_items, component)
|
||||
table.insert(checklist_items, description)
|
||||
table.insert(checklist_items, default)
|
||||
end
|
||||
|
||||
local bsddialog_args = {
|
||||
|
|
@ -162,7 +191,12 @@ local function select_components(components, options)
|
|||
-- to work. The base set depends on minimal, but it's fine to install
|
||||
-- both, and this way the user can remove the base set without pkg
|
||||
-- autoremove then trying to remove minimal.
|
||||
local selected = {"minimal"}
|
||||
local selected = {}
|
||||
if options.jail then
|
||||
table.insert(selected, "minimal-jail")
|
||||
else
|
||||
table.insert(selected, "minimal")
|
||||
end
|
||||
|
||||
-- If pkg is available, always install it so the user can manage the
|
||||
-- installed system. This is optional, because a repository built
|
||||
|
|
@ -171,7 +205,7 @@ local function select_components(components, options)
|
|||
table.insert(selected, "pkg")
|
||||
end
|
||||
|
||||
if not options.no_kernel then
|
||||
if not options.jail then
|
||||
table.insert(selected, "kernel")
|
||||
end
|
||||
|
||||
|
|
@ -264,8 +298,8 @@ end
|
|||
local function parse_options()
|
||||
local options = {}
|
||||
for _, a in ipairs(arg) do
|
||||
if a == "--no-kernel" then
|
||||
options.no_kernel = true
|
||||
if a == "--jail" then
|
||||
options.jail = true
|
||||
else
|
||||
io.stderr:write("Error: unknown option " .. a .. "\n")
|
||||
os.exit(1)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue