Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F161189107
D57956.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
19 KB
Referenced Files
None
Subscribers
None
D57956.id.diff
View Options
diff --git a/share/man/man7/freebsd-base.7 b/share/man/man7/freebsd-base.7
--- a/share/man/man7/freebsd-base.7
+++ b/share/man/man7/freebsd-base.7
@@ -14,12 +14,12 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd April 23, 2026
+.Dd June 28, 2026
.Dt FREEBSD-BASE 7
.Os
.Sh NAME
-.\" .Nm pkgbase
.Nm freebsd-base
+.\" .Nm pkgbase
.Nd base system packages
.Sh DESCRIPTION
The
@@ -239,43 +239,27 @@
.Pp
.Sy Note :
The repo must have a different name than the predefined repository.
-.Ss Unregister a currently running system
-Systems managed through
-.Xr pkg 8
-can be unregistered from the package manager \(em
-for example to upgrade in-place via
-.Dq make installworld .
-See
-.Xr build 7 .
-.Pp
-To unregister the base system from the package manager:
+.Ss Converting to or from packaged base
+The
+.Xr pkgbasify 8
+utility can be used to convert a system installed from distribution
+sets or source to packaged base:
.Bd -literal -offset indent
-pkg unregister -fg 'FreeBSD-\e*'
+pkgbasify -a
.Ed
.Pp
-Then, disable the base system package repository.
-If a configuration file was created in
-.Pa /usr/local/etc/pkg/repos/
-to enable base system packages, remove it:
+Conversely, the
+.Xr depkgbasify 8
+utility can be used to unregister the base packages \(em for instance,
+to switch to building a system directly from source:
.Bd -literal -offset indent
-rm /usr/local/etc/pkg/repos/FreeBSD-base.conf
+depkgbasify -a
.Ed
-.Pp
-Alternatively, if it is desired to keep it,
-edit the file and change
-.Dq Li enabled:
-to
-.Dq Li no
-to disable the entry.
-.Pp
-.Sy Warning :
-This is a destructive action
-which will prevent updating the base system via
-.Xr pkg 8 .
.Sh SEE ALSO
+.Xr src.conf 5 ,
.Xr build 7 ,
.Xr pkg 8 ,
-.Xr src.conf 5
+.Xr pkgbasify 8
.Sh HISTORY
Support for installing the base system as packages was introduced in
.Fx 15.0 .
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -57,6 +57,7 @@
nologin \
pciconf \
periodic \
+ pkgbasify \
pnfsdscopymr \
pnfsdsfile \
pnfsdskill \
diff --git a/usr.sbin/pkgbasify/Makefile b/usr.sbin/pkgbasify/Makefile
new file mode 100644
--- /dev/null
+++ b/usr.sbin/pkgbasify/Makefile
@@ -0,0 +1,6 @@
+SCRIPTS=pkgbasify.sh
+LINKS= ${BINDIR}/pkgbasify ${BINDIR}/depkgbasify
+MAN= pkgbasify.8
+MLINKS= pkgbasify.8 depkgbasify.8
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/pkgbasify/pkgbasify.8 b/usr.sbin/pkgbasify/pkgbasify.8
new file mode 100644
--- /dev/null
+++ b/usr.sbin/pkgbasify/pkgbasify.8
@@ -0,0 +1,215 @@
+.\"-
+.\" Copyright (c) 2026 Dag-Erling Smørgrav
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.Dd June 28, 2026
+.Dt PKGBASIFY 8
+.Os
+.Sh NAME
+.Nm pkgbasify ,
+.Nm depkgbasify
+.Nd convert a system to and from pkgbase
+.Sh SYNOPSIS
+.Nm pkgbasify
+.Op Fl hnqtv
+.Op Fl a | Fl y
+.Op Fl b Ar basedir
+.Op Fl j Ar jail
+.Op Fl r Ar repo
+.Nm depkgbasify
+.Op Fl hnqv
+.Op Fl a | Fl y
+.Op Fl b Ar basedir
+.Op Fl j Ar jail
+.Sh DESCRIPTION
+The
+.Nm pkgbasify
+utility converts a system installed from distribution sets to packaged
+base by registering, without actually installing, a set of packages
+that corresponds to what is already installed.
+See
+.Sx Converting to packaged base
+below.
+.Pp
+The
+.Nm depkgbasify
+utility converts a packaged base system back to distribution sets by
+unregistering all base packages.
+See
+.Sx Converting from packaged base
+below.
+.Pp
+In both cases, the user is urged to take a backup or snapshot of the
+system and perform a dry run before the actual conversion.
+.Pp
+The following options are available:
+.Bl -tag -width indent
+.It Fl a
+Automatic mode.
+Do not prompt the user, but skip certain optional steps.
+Mutually exclusive with
+.Fl y .
+.It Fl b Ar basedir
+Operate on a system mounted at
+.Ar basedir .
+.It Fl h
+Print a usage message and exit.
+.It Fl j Ar jail
+Operate on the specified jail.
+.It Fl n
+Dry run.
+Examine the system and download the necessary files but do not
+register or unregister anything.
+.It Fl q
+Quiet mode.
+.It Fl r Ar repo
+.Po
+.Nm pkgbasify
+only
+.Pc
+Use the specified packaged base repository instead of the default.
+.It Fl t
+.Po
+.Nm pkgbasify
+only
+.Pc
+Trim.
+Not yet implemented.
+.It Fl v
+Verbose mode.
+.It Fl y
+Assume the answer to every prompt is
+.Dq yes .
+Mutually exclusive with
+.Fl a .
+.El
+.Ss Converting to packaged base
+The
+.Nm pkgbasify
+utility begins by inspecting the system to identify which distribution
+sets are installed.
+It then downloads and registers the sets of base packages that
+correspond to those distribution sets.
+If not running in automatic mode, it then performs a forced upgrade
+and enables the
+.Dv BACKUP_LIBRARIES
+options in the
+.Xr pkg 8
+configuration.
+.Pp
+It is important to note that after the conversion, files that should
+have been present on the system but weren't will still be recorded in
+the package database.
+This is why a non-automatic
+.Nm pkgbasify
+offers to perform a forced upgrade: to reset the system to a state
+where the files on disk match the recorded inventory.
+However, since
+.Nm pkgbasify
+does not make a backup of the system before converting it, this forced
+upgrade is irreversible, which is also why it is skipped in automatic
+mode.
+.Ss Converting from packaged base
+The
+.Nm depkgbasify
+utility begins by identifying the repository from which the base
+system was installed.
+It then attempts to identify which package sets are partially or
+completely installed.
+If not running in automatic mode, it will then offer to complete any
+partially installed sets, remove the source tree (if installed from
+packages), and perform a last upgrade before the conversion.
+Finally, it unregisters all remaining base packages without removing
+any of the files.
+.Ss Round-trip Conversion
+When run in automatic mode, neither
+.Nm pkgbasify
+nor
+.Nm depkgbasify
+will make any changes to the system that the other cannot undo.
+Thus, starting with a system installed from distribution sets and
+running
+.Ql pkgbasify -a
+followed by
+.Ql depkgbasify -a
+should have a net effect of no changes to the system except for the
+package cache.
+Conversely, starting with a freshly updated packaged base system and
+running
+.Ql depkgbasify -a
+followed by
+.Ql pkgbasify -a
+should also have a net zero effect.
+.Sh ENVIRONMENT
+.Bl -tag -width indent
+.It Ev BASEDIR
+base directory as if passed to the
+.Fl b
+option.
+.It Ev BASEREPO
+repository as if passed to the
+.Fl r
+option.
+.It Ev JAIL
+jail id or name as if passed to the
+.Fl j
+option.
+.El
+.Sh EXIT STATUS
+.Ex -std pkgbasify depkgbasify
+.Sh SEE ALSO
+.Xr build 7 ,
+.Xr pkg 7 ,
+.Xr pkgbase 7 ,
+.Xr freebsd-update 8 ,
+.Xr pkg 8
+.Sh HISTORY
+The
+.Nm pkgbasify
+and
+.Nm depkgbasify
+utilities first appeared in
+.Fx 15.2 .
+.Sh AUTHORS
+The
+.Nm pkgbasify
+and
+.Nm depkgbasify
+utilities and this manual page were written by
+.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .
+.Sh CAVEATS
+The
+.Nm pkgbasify
+utility is intended for use on systems installed from distribution
+sets.
+It will also work on systems installed from source, but if the system
+has been customized through the use of build options, the conversion
+will round it back up, so to speak, to the smallest set of
+distribution sets which include everything present on the system.
+Conversely,
+.Nm pkgbasify
+will not notice or register elements of the system which are disabled
+by default but have been locally enabled, built and installed, unless
+installing from a repository that has been built with the same build
+options.
+.Pp
+When converting a system installed from source to packaged base, the
+recommended procedure is to build a set of packages from the same
+source tree and using the same build options, then configure a
+repository pointing to those packages, and perform the conversion
+using that repository before switching to another and doing a forced
+upgrade.
+.Pp
+The
+.Nm depkgbasify
+utility merely unregisters the base packages.
+It does not revert the binaries to a state that could have been
+produced by an official installation image or
+.Xr freebsd-update 8 .
+However, if the system was using base packages from the official
+.Fx
+packaged base repository prior to the conversion, the contents should
+match what
+.Xr freebsd-update 8
+expects.
diff --git a/usr.sbin/pkgbasify/pkgbasify.sh b/usr.sbin/pkgbasify/pkgbasify.sh
new file mode 100755
--- /dev/null
+++ b/usr.sbin/pkgbasify/pkgbasify.sh
@@ -0,0 +1,596 @@
+#!/bin/sh
+#-
+# Copyright (c) 2026 Dag-Erling Smørgrav
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+set -eu
+exec 3>&2
+
+progname="${0##*/}"
+localbase="$(/sbin/sysctl -qn user.localbase || echo /usr/local)"
+
+#
+# All the top-level sets except src
+#
+topsets="base base-dbg kernels kernels-dbg lib32 lib32-dbg tests"
+
+#
+# Default repository
+#
+OS=FreeBSD
+BASEREPO=${BASEREPO:-${OS}-base}
+
+#
+# Command-line options
+#
+auto=
+base=${BASEDIR:-}
+dryrun=
+jail=${JAIL:-}
+quiet=
+repo=
+trim=
+verbose=
+yes=
+
+#
+# Print a message
+#
+msg() {
+ local width=$((${COLUMNS:-80} - ${#progname} - 4))
+ echo "$@" | /usr/bin/fmt -sw${width} |
+ /usr/bin/sed "s|^|${progname}: |"
+}
+
+#
+# Print an error message and exit
+#
+err() {
+ msg "$@" >&3
+ exit 1
+}
+
+#
+# Print a warning message
+#
+warn() {
+ if ! [ "${quiet}" ]; then
+ msg "$@" >&3
+ fi
+}
+
+#
+# Print an informational message
+#
+info() {
+ if ! [ "${quiet}" ]; then
+ msg "$@"
+ fi
+}
+
+#
+# Ask the user for confirmation
+#
+confirm() {
+ local ans=
+ if [ "${yes}" ]; then
+ return 0
+ fi
+ while :; do
+ read -p "$@ " -r ans
+ case ${ans} in
+ [Yy]|[Yy][Ee][Ss])
+ return 0
+ ;;
+ [Nn]|[Nn][Oo])
+ return 1
+ ;;
+ *)
+ echo "Please answer with yes or no." >&3
+ ;;
+ esac
+ done
+}
+
+#
+# Execute a command, but print it first if verbose
+#
+v() {
+ if [ "${verbose}" ]; then
+ echo "$@" >&3
+ fi
+ "$@"
+}
+
+#
+# Compute the path of a file in the target environment
+#
+path() {
+ local path=${base}$1
+ if [ -n "${jail}" ]; then
+ path="$(/usr/sbin/jls -j "${jail}" path)${path}"
+ fi
+ echo "${path}"
+}
+
+#
+# Check if a file exists in the target environment
+#
+exists() {
+ local path=$1
+ [ -n "${path}" ] && v test -e "$(path "${path}")"
+}
+
+#
+# Run pkg(7)
+#
+# pkg(7) currently lacks support for -j and -r, otherwise we could run
+# every pkg command through it, which would prepare us for when pkg
+# eventually moves into base. For now, we can use jexec for -j, but
+# there is no way to emulate -r.
+#
+pkg7() {
+ if [ -n "${base}" ]; then
+ err "pkg(7) currently lacks -r option"
+ elif [ -n "${jail}" ]; then
+ v /usr/sbin/jexec "${jail}" /usr/sbin/pkg "$@"
+ else
+ v /usr/sbin/pkg "$@"
+ fi
+}
+
+#
+# Run pkg(8)
+#
+pkg() {
+ v "${localbase}"/sbin/pkg ${jail:+-j"${jail}"} ${base:+-r"${base}"} "$@"
+}
+
+#
+# Run pkg bootstrap
+#
+pkg_bootstrap() {
+ if ! pkg7 -N 2>/dev/null; then
+ warn "Package manager not installed"
+ if confirm "Bootstrap the package manager?"; then
+ pkg7 bootstrap -r"${repo}" -y
+ else
+ err "Unable to proceed without package manager"
+ fi
+ fi
+}
+
+#
+# Check if a package exists in the repository
+#
+pkg_exists() {
+ pkg rquery -r"${repo}" -U %v "$@" >/dev/null
+}
+
+#
+# Run pkg fetch
+#
+pkg_fetch() {
+ pkg fetch -r"${repo}" -U ${quiet:+-q} "$@"
+}
+
+#
+# Run pkg install
+#
+pkg_install() {
+ pkg install -r"${repo}" -U ${dryrun:+-n} ${quiet:+-q} "$@"
+}
+
+#
+# Check if a package is installed
+#
+pkg_installed() {
+ pkg info -q "$@"
+}
+
+#
+# Run pkg query
+#
+pkg_query() {
+ pkg query "$@"
+}
+
+#
+# Run pkg install --register-only
+#
+pkg_register() {
+ pkg install -r"${repo}" --register-only ${dryrun:+-n} ${quiet:+-q} "$@"
+}
+
+#
+# Run pkg remove
+#
+pkg_remove() {
+ pkg remove ${dryrun:+-n} ${quiet:+-q} "$@"
+}
+
+#
+# Run pkg rquery
+#
+pkg_rquery() {
+ pkg rquery -r"${repo}" -U "$@"
+}
+
+#
+# Run pkg unregister
+#
+pkg_unregister() {
+ pkg unregister ${dryrun:+-n} ${quiet:+-q} "$@"
+}
+
+#
+# Run pkg update
+#
+pkg_update() {
+ pkg update -r"${repo}" ${quiet:+-q} "$@"
+}
+
+#
+# Run pkg upgrade
+#
+pkg_upgrade() {
+ pkg upgrade -r"${repo}" ${dryrun:+-n} ${quiet:+-q} "$@"
+}
+
+#
+# Generate a complete transitive list of dependencies
+#
+pkg_alldeps() {
+ local deps=$(pkg rquery %dn "$@")
+ if [ -n "${deps}" ]; then
+ echo "${deps}"
+ pkg_alldeps ${deps}
+ fi | sort -u
+}
+
+#
+# Check if pkg is new enough
+#
+check_pkg() {
+ local ver=$(pkg -v)
+ case ${ver} in
+ 1.*|2.[0-6].*|2.7.[0-4])
+ err "pkg ${ver} is too old, I need pkg 2.7.5 or newer"
+ ;;
+ esac
+}
+
+#
+# Try to ascertain if the system is running pkgbase
+#
+ispkgbase() {
+ pkg which -q /sbin/init >/dev/null
+}
+
+#
+# Convert to pkgbase
+#
+pkgbasify() {
+ # Check if we're running pkgbase
+ if ispkgbase; then
+ err "The system is already running packaged base"
+ fi
+
+ # Update the repository
+ pkg_update
+
+ # Some paths
+ local kernel=/boot/kernel/kernel
+ local debug=/usr/lib/debug
+ local ld=/libexec/ld-elf.so.1
+ local ld32=/libexec/ld-elf32.so.1
+ local tests=/usr/tests/Kyuafile
+ local src=/usr/src
+
+ # The list of sets to install
+ local sets=base
+
+ # Sanity check
+ if ! exists "${ld}"; then
+ err "No base system found"
+ fi
+
+ # Decide whether to register base-dbg
+ if ! exists "${debug}${ld}.debug"; then
+ warn "No debugging symbols found"
+ else
+ sets="${sets} base-dbg"
+ fi
+
+ # Decide whether to register lib32 and lib32-dbg
+ if ! pkg_exists ${OS}-set-lib32; then
+ # Not available
+ elif ! exists "${ld32}"; then
+ warn "No 32-bit loader found"
+ else
+ sets="${sets} lib32"
+ if exists "${debug}${ld32}.debug"; then
+ sets="${sets} lib32-dbg"
+ fi
+ fi
+
+ # Decide whether to register tests
+ if ! exists "${tests}"; then
+ warn "No test suite found"
+ else
+ sets="${sets} tests"
+ fi
+
+ # Decide whether to register kernels and kernels-dbg
+ if [ -z "${jail}${base}" ]; then
+ if ! kernel=$(/sbin/sysctl -qn kern.bootfile); then
+ err "Unable to identify the running kernel"
+ fi
+ case ${kernel%/kernel} in
+ *.old)
+ kernel=${kernel%.old/kernel}/kernel
+ ;;
+ esac
+ case ${kernel} in
+ /boot/kernel/kernel)
+ ;;
+ *)
+ kernel=
+ ;;
+ esac
+ fi
+ if ! exists "${kernel}"; then
+ warn "Non-standard kernel, or no kernel installed"
+ else
+ sets="${sets} kernels"
+ if exists "${debug}${kernel}.debug"; then
+ sets="${sets} kernels-dbg"
+ fi
+ fi
+
+ # Decide whether to register src
+ if ! exists "${src}/Makefile.inc1"; then
+ warn "No source tree found"
+ elif exists "${src}/.git"; then
+ warn "Source tree managed by Git "
+ else
+ sets="${sets} src"
+ fi
+
+ # We now have our list of sets
+ sets=$(for set in ${sets}; do echo ${OS}-set-$set; done)
+ if ! [ "${quiet}" ] || ! [ "${yes}" ]; then
+ echo "The following package sets will be installed:"
+ echo
+ pkg_rquery "%n %c" ${sets} | \
+ /usr/bin/sed 's/ (metapackage)//' |
+ /usr/bin/column -tl2 |
+ /usr/bin/sed 's/^/ /'
+ echo
+ fi
+
+ # Final checkpoint
+ if ! [ "${auto}" ] && ! confirm "Proceed with conversion?"; then
+ err "Conversion abandoned"
+ fi
+
+ # Download the packages first
+ warn "Downloading packages, this may take a while..."
+ pkg_fetch -d -y ${sets}
+
+ # Now register them
+ pkg_register -y ${sets}
+
+ # Force-upgrade
+ if ! [ "${auto}" ] && confirm "Reinstall base packages?"; then
+ pkg_upgrade -f -y
+ fi
+
+ # Check if BACKUP_LIBRARIES is turned on
+ case $(pkg config BACKUP_LIBRARIES) in
+ no)
+ warn "The recommended BACKUP_LIBRARIES option is not enabled"
+ if ! [ "${auto}" ] &&
+ confirm "Enable BACKUP_LIBRARIES option?"; then
+ if ! [ "${dryrun}" ]; then
+ v /usr/bin/sed -i.bak \
+ -e $'1i\\\nBACKUP_LIBRARIES = true;' \
+ $(path ${localbase}/etc/pkg.conf)
+ fi
+ info "BACKUP_LIBRARIES option enabled"
+ fi
+ ;;
+ esac
+
+ # Done!
+ if ! [ "${dryrun}" ]; then
+ info "Conversion complete"
+ fi
+}
+
+#
+# Convert from pkgbase
+#
+depkgbasify() {
+ local havesrc= pkg= set=
+
+ # Check if we're running pkgbase
+ if ! ispkgbase; then
+ err "The system is not running packaged base"
+ fi
+
+ # Identify and update the repository
+ repo=$(pkg_query %R ${OS}-runtime)
+ info "Using repository ${repo}"
+ pkg_update
+
+ # Check which sets are partially or completely installed
+ info "Examining the system..."
+ for set in ${topsets}; do
+ if pkg_installed ${OS}-set-${set}; then
+ info "The ${set} set is installed"
+ continue
+ elif ! pkg_exists %v ${OS}-set-${set}; then
+ # set does not exist
+ continue
+ fi
+ local want=$(pkg_alldeps ${OS}-set-${set} | grep -v ${OS}-set)
+ local have=$(pkg_query %n ${want} || true)
+ if [ "${have}" = "${want}" ]; then
+ info "The ${set} set is complete"
+ elif [ "${have}" ]; then
+ info "The ${set} set is partially installed"
+ if ! [ "${auto}" ] &&
+ confirm "Complete the ${set} set?"; then
+ pkg_fetch -d -y ${OS}-set-${set}
+ pkg_install -y ${OS}-set-${set}
+ fi
+ else
+ info "The ${set} set is absent"
+ fi
+ done
+
+ # Check if the source tree is installed
+ for pkg in set-src src-sys src; do
+ if pkg_installed ${OS}-${pkg}; then
+ havesrc="${havesrc} ${OS}-${pkg}"
+ fi
+ done
+ if [ "${havesrc}" ]; then
+ info "The source tree appears to be installed. You may want" \
+ "to uninstall it before converting to make room for a" \
+ "Git clone."
+ if ! [ "${auto}" ] && confirm "Uninstall the source tree?"; then
+ pkg_remove -fy ${havesrc}
+ fi
+ fi
+
+ # One final upgrade?
+ if ! [ "${auto}" ] && confirm "Upgrade installed base packages?"; then
+ pkg_upgrade -y
+ fi
+
+ # Final checkpoint
+ if ! [ "${auto}" ] && ! confirm "Proceed with conversion?"; then
+ err "Conversion abandoned"
+ fi
+
+ # Unregister all base packages
+ pkg_unregister -f -y $(pkg_query -e '%o ~ base/*' '%n')
+
+ # Done!
+ if ! [ "${dryrun}" ]; then
+ info "Conversion complete"
+ fi
+}
+
+#
+# Print usage message and exit
+#
+usage() {
+ exec >&3
+ echo -n "usage: ${progname} "
+ case ${progname%.sh} in
+ pkgbasify)
+ echo "[-hnqtv] [-a | -y] [-b basedir] [-j jail] [-r repo]"
+ ;;
+ depkgbasify)
+ echo "[-hnqv] [-a | -y] [-b basedir] [-j jail]"
+ ;;
+ *)
+ echo "-h"
+ ;;
+ esac
+ exit 1
+}
+
+#
+# Entry point
+#
+main() {
+ local opt
+
+ # Check program name and set defaults
+ case ${progname%.sh} in
+ pkgbasify)
+ repo=${BASEREPO}
+ ;;
+ depkgbasify)
+ ;;
+ *)
+ usage
+ ;;
+ esac
+
+ # Parse options
+ while getopts "ab:hj:nr:qtvy" opt; do
+ case ${opt} in
+ a)
+ auto=true
+ ;;
+ b)
+ base="${OPTARG}"
+ ;;
+ h)
+ usage
+ ;;
+ j)
+ jail="${OPTARG}"
+ ;;
+ n)
+ dryrun=true
+ ;;
+ r)
+ repo="${OPTARG}"
+ ;;
+ q)
+ quiet=true
+ ;;
+ t)
+ trim=true
+ ;;
+ v)
+ verbose=true
+ ;;
+ y)
+ yes=true
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ done
+ shift $((OPTIND - 1))
+
+ # Check for conflicting options
+ if [ "${auto}" ] && [ "${yes}" ]; then
+ usage
+ fi
+ case ${progname%.sh} in
+ depkgbasify)
+ if [ "${repo}" ] || [ "${trim}" ]; then
+ usage
+ fi
+ ;;
+ esac
+
+ # Bootstrap pkg if necessary
+ pkg_bootstrap
+
+ # Check the pkg version
+ check_pkg
+
+ # Do what we were asked to do
+ case ${progname%.sh} in
+ pkgbasify)
+ pkgbasify "$@"
+ ;;
+ depkgbasify)
+ depkgbasify "$@"
+ ;;
+ esac
+}
+
+main "$@"
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 2, 10:34 AM (10 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34593635
Default Alt Text
D57956.id.diff (19 KB)
Attached To
Mode
D57956: pkgbasify: Add new utility
Attached
Detach File
Event Timeline
Log In to Comment