neulab/tldr huggingface dataset:
-p <pass>, --password=<pass> VPN account password in plain text.  For a secure alternative, use pinentry or let openfortivpn prompt for the password.
--pinentry=<name> The pinentry program to use. Allows supplying the password in a secure manner.  For example: pinentry-gnome3 on Linux, or pinentry-mac on macOS.
-o <otp>, --otp=<otp> One-Time-Password.
--otp-prompt=<prompt> Search for the OTP password prompt starting with the string <prompt>.
--otp-delay=<delay> Set the amount of time to wait before sending the One-Time- Password.  The delay time must be specified in seconds, where 0 means no wait (this is the default).
--no-ftm-push Do not use FTM push if the server provides the option.  The server may be configured to allow two factor authentication through a push notification to the mobile application. If this option is provided, authentication based on OTP will be used instead.
--realm=<realm> Connect to the specified authentication realm. Defaults to empty, which is usually what you want.
--ifname=<interface> Bind the connection to the specified network interface.
--set-routes=<bool>, --no-routes Set if openfortivpn should try to configure IP routes through the VPN when tunnel is up. If used multiple times, the last one takes priority.
--no-routes is the same as --set-routes=0.
--half-internet-routes=<bool> Set if openfortivpn should add two 0.0.0.0/1 and 128.0.0.0/1 routes with higher priority instead of replacing the default route.
--set-dns=<bool>, --no-dns Set if openfortivpn should add DNS name servers in /etc/resolv.conf when tunnel is up. Also a dns-suffix may be received from the peer and added to /etc/resolv.conf in the turn of adding the name servers.  resolvconf is instructed to do the update of the resolv.conf file if it is installed and --use-resolvconf is activated, otherwise openfortivpn prepends its changes to the existing content of the resolv.conf file.  Note that there may be other mechanisms to update /etc/resolv.conf, e.g., --pppd-use-peerdns in conjunction with an ip-up-script, which may require that openfortivpn is called with --no-dns. --no-dns is the same as --set-dns=0.
--use-resolvconf=<bool> Set if openfortivpn should use resolvconf to add DNS name servers in /etc/resolv.conf. If it is set to false, the builtin fallback mechanism is used even if resolvconf is available.
--ca-file=<file> Use specified PEM-encoded certificate bundle instead of system- wide store to verify the gateway certificate.
--user-cert=<file> Use specified PEM-encoded certificate if the server requires authentication with a certificate.
--user-cert=pkcs11: Use at least the string pkcs11: for using a smartcard. It takes the full or a partial PKCS11-URI (p11tool --list-token-urls)
--user-cert = pkcs11:
--user-cert = pkcs11:token=someuser
--user-cert = pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=012345678;token=someuser
This feature requires the OpenSSL PKCS engine!
--user-key=<file> Use specified PEM-encoded key if the server requires authentication with a certificate.
--pem-passphrase=<pass> Pass phrase for the PEM-encoded key.
--use-syslog Log to syslog instead of terminal.
--trusted-cert=<digest> Trust a given gateway. If classical SSL certificate validation fails, the gateway certificate will be matched against this value. <digest> is the X509 certificate's sha256 sum. The certificate has to be encoded in DER form.  This option can be used multiple times to trust several certificates.
--insecure-ssl Do not disable insecure SSL protocols/ciphers.  If your server requires a specific cipher, consider using --cipher-list instead.
--cipher-list=<ciphers> OpenSSL ciphers to use. If default does not work, you can try alternatives such as HIGH:!MD5:!RC4 or as suggested by the Cipher: line in the output of openssl(1) (e.g. AES256-GCM-SHA384):
$ openssl s_client -connect <host:port>
(default: HIGH:!aNULL:!kRSA:!PSK:!SRP:!MD5:!RC4)
Applies to TLS v1.2 or lower only, not to be used with TLS v1.3 ciphers.
--min-tls=<version> Use minimum TLS version instead of system default. Valid values are 1.0, 1.1, 1.2, 1.3.
--seclevel-1 If --cipher-list is not specified, add @SECLEVEL=1 to the list of ciphers. This lowers limits on dh key.
Applies to TLS v1.2 or lower only.
--use-peer-dns=<bool>, --pppd-no-peerdns Whether to ask peer ppp server for DNS server addresses and let pppd rewrite /etc/resolv.conf. There is no mechanism to tell the dns-suffix to pppd. If the DNS server addresses are requested, also --set-dns=1 may race with the mechanisms in pppd.
--pppd-no-peerdns is the same as --pppd-use-peerdns=0.
--pppd-log=<file> Set pppd in debug mode and save its logs into <file>.
--pppd-plugin=<file> Use specified pppd plugin instead of configuring the resolver and routes directly.
--pppd-ipparam=<string> Provides an extra parameter to the ip-up, ip-pre-up and ip-down scripts. See man pppd(8) for further details
--pppd-ifname=<string> Set the ppp interface name. Only if supported by pppd. Patched versions of pppd implement this option but may not be available on your platform.
--pppd-call=<name> Drop usual arguments from pppd command line and add `call <name>' instead.  This can be useful on Debian and Ubuntu, where unprivileged users in group `dip' can invoke `pppd call <name>' to make pppd read and apply options from /etc/ppp/peers/<name> (including privileged ones).
--ppp-system=<string> Only available if compiled for ppp user space client (e.g. on FreeBSD).  Connect to the specified system as defined in /etc/ppp/ppp.conf
--persistent=<interval> Run the VPN persistently in an endless loop and try to reconnect forever.  The reconnect interval may be specified in seconds, where 0 means no reconnect is done (this is the default).
-v     Increase verbosity. Can be used multiple times to be even more verbose.
-q     Decrease verbosity. Can be used multiple times to be even less verbose.
ENVIRONMENT and proxy support openfortivpn can be run behind an HTTP proxy that supports the HTTP connect command.  It checks if one of the environment variables https_proxy HTTPS_PROXY all_proxy ALL_PROXY is set which are supposed to contain a string of the format http://[host]:[port] where [host] is the ip or the fully qualified host name of the proxy server [port] is the TCP port number where the proxy is listening for incoming connections. If one of these variables is defined, openfortivpn tries to first establish a TCP connection to this proxy (plain HTTP, not encrypted), and then makes a request to connect to the VPN host as given on the command line or in the configuration file. The proxy is supposed to forward any subsequent packets transparently to the VPN host, so that the TLS layer of the connection effectively is established between the client and the VPN host, and the proxy just acts as a forwarding instance on the lower level of the TCP connection.
The following environment variables are set by openfortivpn and pppd(8) or its scripts can obtain information this way: VPN_GATEWAY the ip of the gateway host and for each route three variables are set up, where an integer number is appended to the variable names, denoting the number of the current route: VPN_ROUTE_DEST_... the destination network of the route VPN_ROUTE_MASK_... the network mask for this route VPN_ROUTE_GATEWAY_... the gateway for the current route entry
If not compiled for pppd the pppd options and features that rely on them are not available. On FreeBSD --ppp-system is available instead.
Options can be taken from a configuration file. Options passed in the command line will override those from the configuration file, though. The default configuration file is /etc/openfortivpn/config, but this can be set using the -c option.  An empty template for the configuration file is installed to /usr/share/openfortivpn/config.template
A configuration file looks like: # this is a comment host = vpn-gateway port = 443 username = foo # Password in plain text. # For a secure alternative, use pinentry or let openfortivpn prompt for the password. # password = bar # The pinentry program to use. Allows supplying the password in a secure manner. # pinentry = pinentry-mac # realm = some-realm # useful for a gui that passes a configuration file to openfortivpn # otp = 123456 # otp-delay = 0 # otp-prompt = Please # This would disable FTM push notification support, and use OTP instead # no-ftm-push = 1 user-cert = /etc/openfortivpn/user-cert.pem # user-cert = pkcs1: # use smartcard as client certificate user-key = /etc/openfortivpn/user-key.pem pem-passphrase = baz # the sha256 digest of the trusted host certs obtained by # openssl dgst -sha256 server-cert.crt: trusted-cert = certificatedigest4daa8c5fe6c... trusted-cert = othercertificatedigest6631bf... # This would specify a ca bundle instead of system-wide store # ca-file = /etc/openfortivpn/ca-bundle.pem set-dns = 0 use-resolvconf = 1 set-routes = 1 half-internet-routes = 0 pppd-use-peerdns = 1 # alternatively, use a specific pppd plugin instead # pppd-plugin = /usr/lib/pppd/default/some-plugin.so # for debugging pppd write logs here # pppd-log = /var/log/pppd.log # pass ppp interface name to pppd (if supported by a patched pppd) # pppd-ifname = ppp1 # pass an ipparam string to pppd, e.g. the device name (a similar use case) # pppd-ipparam = 'device=$DEVICE' # instruct pppd to call a script instead of passing arguments (if pppd supports it) # pppd-call = script # use-syslog = 0 insecure-ssl = 0 cipher-list = HIGH:!aNULL:!kRSA:!PSK:!SRP:!MD5:!RC4 persistent = 0 seclevel-1 = 0
The openfortivpn home page (https://github.com/adrienverge/openfortivpn) provides a short introduction in the README file and additional information under the Wiki tab.
AR(1P)                      POSIX Programmer's Manual                     AR(1P)
ar — create and maintain library archives
ar -d [-v] archive file...
ar -m [-v] archive file... ar -m -a [-v] posname archive file... ar -m -b [-v] posname archive file... ar -m -i [-v] posname archive file...
ar -p [-v] [-s] archive [file...]
ar -q [-cv] archive file...
ar -r [-cuv] archive file...
ar -r -a [-cuv] posname archive file... ar -r -b [-cuv] posname archive file... ar -r -i [-cuv] posname archive file...
ar -t [-v] [-s] archive [file...]
ar -x [-v] [-sCT] archive [file...]
The ar utility is part of the Software Development Utilities option.
The ar utility can be used to create and maintain groups of files combined into an archive. Once an archive has been created, new files can be added, and existing files in an archive can be extracted, deleted, or replaced. When an archive consists entirely of valid object files, the implementation shall format the archive so that it is usable as a library for link editing (see c99 and fort77).  When some of the archived files are not valid object files, the suitability of the archive for library use is undefined.  If an archive consists entirely of printable files, the entire archive shall be printable.
When ar creates an archive, it creates administrative information indicating whether a symbol table is present in the archive. When there is at least one object file that ar recognizes as such in the archive, an archive symbol table shall be created in the archive and maintained by ar; it is used by the link editor to search the archive. Whenever the ar utility is used to create or update the contents of such an archive, the symbol table shall be rebuilt. The -s option shall force the symbol table to be rebuilt.
All file operands can be pathnames. However, files within archives shall be named by a filename, which is the last component of the pathname used when the file was entered into the archive. The comparison of file operands to the names of files in archives shall be performed by comparing the last component of the operand to the name of the file in the archive.
It is unspecified whether multiple files in the archive may be identically named. In the case of such files, however, each file and posname operand shall match only the first file in the archive having a name that is the same as the last component of the operand.
The ar utility shall conform to the Base Definitions volume of POSIX.1‐2017, Section 12.2, Utility Syntax Guidelines, except for Guideline 9.
-a        Position new files in the archive after the file named by the posname operand.
-b        Position new files in the archive before the file named by the posname operand.
-c        Suppress the diagnostic message that is written to standard error by default when the archive archive is created.
-C        Prevent extracted files from replacing like-named files in the file system. This option is useful when -T is also used, to prevent truncated filenames from replacing files with the same prefix.
-d        Delete one or more files from archive.
-i        Position new files in the archive before the file in the archive named by the posname operand (equivalent to -b).
-m        Move the named files in the archive. The -a, -b, or -i options with the posname operand indicate the position; otherwise, move the names files in the archive to the end of the archive.
-p        Write the contents of the files in the archive named by file operands from archive to the standard output. If no file operands are specified, the contents of all files in the archive shall be written in the order of the archive.
-q        Append the named files to the end of the archive. In this case ar does not check whether the added files are already in the archive.  This is useful to bypass the searching otherwise done when creating a large archive piece by piece.
-r        Replace or add files to archive.  If the archive named by archive does not exist, a new archive shall be created and a diagnostic message shall be written to standard error (unless the -c option is specified). If no files are specified and the archive exists, the results are undefined. Files that replace existing files in the archive shall not change the order of the archive. Files that do not replace existing files in the archive shall be appended to the archive unless a -a, -b, or -i option specifies another position.
-s        Force the regeneration of the archive symbol table even if ar is not invoked with an option that modifies the archive contents. This option is useful to restore the archive symbol table after it has been stripped; see strip.
-t        Write a table of contents of archive to the standard output. Only the files specified by the file operands shall be included in the written list. If no file operands are specified, all files in archive shall be included in the order of the archive.
-T        Allow filename truncation of extracted files whose archive names are longer than the file system can support. By default, extracting a file with a name that is too long shall be an error; a diagnostic message shall be written and the file shall not be extracted.
-u        Update older files in the archive. When used with the -r option, files in the archive shall be replaced only if the corresponding file has a modification time that is at least as new as the modification time of the file in the archive.
-v        Give verbose output. When used with the option characters -d, -r, or -x, write a detailed file-by-file description of the archive creation and maintenance activity, as described in the STDOUT section.
When used with -p, write the name of the file in the archive to the standard output before writing the file in the archive itself to the standard output, as described in the STDOUT section.
When used with -t, include a long listing of information about the files in the archive, as described in the STDOUT section.
-x        Extract the files in the archive named by the file operands from archive.  The contents of the archive shall not be changed. If no file operands are given, all files in the archive shall be extracted. The modification time of each file extracted shall be set to the time the file is extracted from the archive.
archive   A pathname of the archive.
file      A pathname. Only the last component shall be used when comparing against the names of files in the archive. If two or more file operands have the same last pathname component (basename), the results are unspecified. The implementation's archive format shall not truncate valid filenames of files added to or replaced in the archive.
posname   The name of a file in the archive, used for relative positioning; see options -m and -r.
The archive named by archive shall be a file in the format created by ar -r.
The following environment variables shall affect the execution of ar:
LC_TIME   Determine the format and content for date and time strings written by ar -tv.
TMPDIR    Determine the pathname that overrides the default directory for temporary files, if any.
TZ        Determine the timezone used to calculate date and time strings written by ar -tv.  If TZ is unset or null, an unspecified default timezone shall be used.
If the -d option is used with the -v option, the standard output format shall be:
"d - %s\n", <file>
where file is the operand specified on the command line.
If the -p option is used with the -v option, ar shall precede the contents of each file with:
"\n<%s>\n\n", <file>
where file is the operand specified on the command line, if file operands were specified, and the name of the file in the archive if they were not.
If the -r option is used with the -v option:
*  If file is already in the archive, the standard output format shall be:
"r - %s\n", <file>
where <file> is the operand specified on the command line.
*  If file is not already in the archive, the standard output format shall be:
"a - %s\n", <file>
If the -t option is used, ar shall write the names of the files in the archive to the standard output in the format:
"%s\n", <file>
where file is the operand specified on the command line, if file operands were specified, or the name of the file in the archive if they were not.
If the -t option is used with the -v option, the standard output format shall be:
"%s %u/%u %u %s %d %d:%d %d %s\n", <member mode>, <user ID>, <group ID>, <number of bytes in member>, <abbreviated month>, <day-of-month>, <hour>, <minute>, <year>, <file>
<file>    Shall be the operand specified on the command line, if file operands were specified, or the name of the file in the archive if they were not.
<member mode> Shall be formatted the same as the <file mode> string defined in the STDOUT section of ls, except that the first character, the <entry type>, is not used; the string represents the file mode of the file in the archive at the time it was added to or replaced in the archive.
The following represent the last-modification time of a file when it was most recently added to or replaced in the archive:
<abbreviated month> Equivalent to the format of the %b conversion specification format in date.
<day-of-month> Equivalent to the format of the %e conversion specification format in date.
<hour>    Equivalent to the format of the %H conversion specification format in date.
<minute>  Equivalent to the format of the %M conversion specification format in date.
<year>    Equivalent to the format of the %Y conversion specification format in date.
When LC_TIME does not specify the POSIX locale, a different format and order of presentation of these fields relative to each other may be used in a format appropriate in the specified locale.
If the -x option is used with the -v option, the standard output format shall be:
"x - %s\n", <file>
The standard error shall be used only for diagnostic messages.  The diagnostic message about creating a new archive when -c is not specified shall not modify the exit status.
Archives are files with unspecified formats.
The archive format is not described. It is recognized that there are several known ar formats, which are not compatible. The ar utility is included, however, to allow creation of archives that are intended for use only on one machine. The archive is specified as a file, and it can be moved as a file. This does allow an archive to be moved from one machine to another machine that uses the same implementation of ar.
Utilities such as pax (and its forebears tar and cpio) also provide portable ``archives''. This is a not a duplication; the ar utility is included to provide an interface primarily for make and the compilers, based on a historical model.
In historical implementations, the -q option (available on XSI-conforming systems) is known to execute quickly because ar does not check on whether the added members are already in the archive. This is useful to bypass the searching otherwise done when creating a large archive piece-by- piece. These remarks may but need not remain true for a brand new implementation of this utility; hence, these remarks have been moved into the RATIONALE.
BSD implementations historically required applications to provide the -s option whenever the archive was supposed to contain a symbol table.  As in this volume of POSIX.1‐2017, System V historically creates or updates an archive symbol table whenever an object file is removed from, added to, or updated in the archive.
The OPERANDS section requires what might seem to be true without specifying it: the archive cannot truncate the filenames below {NAME_MAX}.  Some historical implementations do so, however, causing unexpected results for the application. Therefore, this volume of POSIX.1‐2017 makes the requirement explicit to avoid misunderstandings.
According to the System V documentation, the options -dmpqrtx are not required to begin with a <hyphen-minus> ('-').  This volume of POSIX.1‐2017 requires that a conforming application use the leading <hyphen-minus>.
The archive format used by the 4.4 BSD implementation is documented in this RATIONALE as an example:
A file created by ar begins with the ``magic'' string "!<arch>\n". The rest of the archive is made up of objects, each of which is composed of a header for a file, a possible filename, and the file contents. The header is portable between machine architectures, and, if the file contents are printable, the archive is itself printable.
The header is made up of six ASCII fields, followed by a two- character trailer. The fields are the object name (16 characters), the file last modification time (12 characters), the user and group IDs (each 6 characters), the file mode (8 characters), and the file size (10 characters). All numeric fields are in decimal, except for the file mode, which is in octal.
The modification time is the file st_mtime field. The user and group IDs are the file st_uid and st_gid fields. The file mode is the file st_mode field. The file size is the file st_size field. The two-byte trailer is the string "`<newline>".
Only the name field has any provision for overflow. If any filename is more than 16 characters in length or contains an embedded space, the string "#1/" followed by the ASCII length of the name is written in the name field.  The file size (stored in the archive header) is incremented by the length of the name. The name is then written immediately following the archive header.
Any unused characters in any of these fields are written as <space> characters. If any fields are their particular maximum number of characters in length, there is no separation between the fields.
Objects in the archive are always an even number of bytes long; files that are an odd number of bytes long are padded with a <newline>, although the size in the header does not reflect this.
The ar utility description requires that (when all its members are valid object files) ar produce an object code library, which the linkage editor can use to extract object modules. If the linkage editor needs a symbol table to permit random access to the archive, ar must provide it; however, ar does not require a symbol table.
The BSD -o option was omitted. It is a rare conforming application that uses ar to extract object code from a library with concern for its modification time, since this can only be of importance to make.  Hence, since this functionality is not deemed important for applications portability, the modification time of the extracted files is set to the current time.
There is at least one known implementation (for a small computer) that can accommodate only object files for that system, disallowing mixed object and other files. The ability to handle any type of file is not only historical practice for most implementations, but is also a reasonable expectation.
Consideration was given to changing the output format of ar -tv to the same format as the output of ls -l.  This would have made parsing the output of ar the same as that of ls.  This was rejected in part because the current ar format is commonly used and changes would break historical usage.  Second, ar gives the user ID and group ID in numeric format separated by a <slash>.  Changing this to be the user name and group name would not be correct if the archive were moved to a machine that contained a different user database. Since ar cannot know whether the archive was generated on the same machine, it cannot tell what to report.
The text on the -ur option combination is historical practice—since one filename can easily represent two different files (for example, /a/foo and /b/foo), it is reasonable to replace the file in the archive even when the modification time in the archive is identical to that in the file system.
c99, date, fort77, pax, strip
The Base Definitions volume of POSIX.1‐2017, Chapter 8, Environment Variables, Section 12.2, Utility Syntax Guidelines, <unistd.h>, description of {POSIX_NO_TRUNC}
Rscript(1)                             FSF                            Rscript(1)
Rscript - front end for scripting with R
Rscript [--options] [-e expr] file [args]
A binary front-end to R, for use in scripting applications.
expr   An optional expression to be evaluated, used in place of file.
file   Input file of R expressions
args   Optional further arguments to be processed by commandArgs in the R interpreter.
--options accepted are
--help Print usage and exit
--version Print version and exit
--verbose Print information on progress
--default-packages=list Where 'list' is a comma-separated set of package names, or 'NULL'
and also options to R (in addition to --no-echo --no-restore), such as
--save Do save workspace at the end of the session
--no-environ Don't read the site and user environment files
--no-site-file Don't read the site-wide Rprofile
--no-init-file Don't read the user R profile
--restore Do restore previously saved objects at startup
--vanilla Combine --no-save, --no-restore, --no-site-file --no-init-file and --no-environ
R(1)
ARCHINSTALL(1)                 python-archinstall                 ARCHINSTALL(1)
archinstall - archinstall Documentation python-archinstall (or, archinstall for short) is a helper library to install Arch Linux and manage services, packages and other things. It comes packaged with different pre-configured installers, such as the `Guided installation`_ installer.
A demo can be viewed here: https://www.youtube.com/watch?v=9Xt7X_Iqg6E which uses the default guided installer.
Some of the features of Archinstall are:
• No external dependencies or installation requirements. Runs without any external requirements or installation processes.
• Single threaded and context friendly. The library always executed calls in sequential order to ensure installation-steps don't overlap or executes in the wrong order. It also supports (and uses) context wrappers to ensure things such as sync are called so data and configurations aren't lost.
• Supports standalone executable The library can be compiled into a single executable and run on any system with or without Python. This is ideal for live mediums that don't want to ship Python as a big dependency.
This is the default scripted installation you'll encounter on the official Arch Linux Archinstall package as well as the unofficial ISO found on https://archlinux.life. It will guide your through a very basic installation of Arch Linux.
The installer has two pre-requisites:
• A Physical or Virtual machine to install on
• An active internet connection prior to running archinstall
WARNING: A basic understanding of how machines, ISO-files and command lines are needed.  Please read the official Arch Linux Wiki (`https://wiki.archlinux.org/ <https://wiki.archlinux.org/>`_ to learn more)
NOTE: There are some limitations with the installer, such as that it will not configure WiFi during the installation procedure. And it will not perform a post-installation network configuration either. So you need to read up on Arch Linux networking to get that to work.
Running the guided installation NOTE: Due to the package being quite new, it might be required to update the local package list before installing or continuing. Partial upgrades can cause issues, but the lack of dependencies should make this perfectly safe:
To install archinstall and subsequently the guided installer, simply do the following:
pacman -S python-archinstall
And to run it, execute archinstall as a Python module:
python -m archinstall --script guided The --script guided argument is optional as it's the default behavior. But this will start the process of guiding you through a installation of a quite minimal Arch Linux experience.
Installing directly from a configuration file NOTE: Edit the following json according to your needs, save this as a json file, and provide the local or remote path (URL)
{ "audio": "pipewire", "bootloader": "systemd-bootctl", "custom-commands": [ "cd /home/devel; git clone https://aur.archlinux.org/paru.git", "chown -R devel:devel /home/devel/paru", "usermod -aG docker devel" ], "!encryption-password": "supersecret", "filesystem": "btrfs", "gfx_driver": "VMware / VirtualBox (open-source)", "harddrive": { "path": "/dev/nvme0n1" }, "hostname": "development-box", "kernels": [ "linux" ], "keyboard-language": "us", "mirror-region": "Worldwide", "nic": { "NetworkManager": true }, "ntp": true, "packages": ["docker", "git", "wget", "zsh"], "profile": "gnome", "services": ["docker"], "superusers": { "devel": { "!password": "devel" } }, "sys-encoding": "utf-8", "sys-language": "en_US", "timezone": "US/Eastern", "users": {} }
To run it, execute archinstall as a Python module:
python -m archinstall --config <local path or remote URL>
┌─────────────────────┬──────────────────────────────┬───────────────────┬──────────────────┐
│Key                  │ Values/Description           │ Description       │ Required         │
├─────────────────────┼──────────────────────────────┼───────────────────┼──────────────────┤
│audio                │ pipewire/pulseaudio          │ Audioserver to    │ No               │
│                     │                              │ be installed      │                  │
├─────────────────────┼──────────────────────────────┼───────────────────┼──────────────────┤
│bootloader           │ systemd-bootctl/grub-install │ Bootloader to be  │ Yes              │
│                     │                              │ installed         │                  │
└─────────────────────┴──────────────────────────────┴───────────────────┴──────────────────┘
│sys-encoding         │ "utf-8"                      │ Set to change     │ No               │
│                     │                              │ system encoding   │                  │
│                     │                              │ post-install,     │                  │
│                     │                              │ ignored if        │                  │
│                     │                              │ --advanced flag   │                  │
│                     │                              │ is not passed     │                  │
├─────────────────────┼──────────────────────────────┼───────────────────┼──────────────────┤
│sys-language         │ "en_US"                      │ Set to change     │ No               │
│                     │                              │ system language   │                  │
│                     │                              │ post-install,     │                  │
│                     │                              │ ignored if        │                  │
│                     │                              │ --advanced flag   │                  │
│                     │                              │ is not passed     │                  │
├─────────────────────┼──────────────────────────────┼───────────────────┼──────────────────┤
│superusers           │ { "<username>": {            │ List of superuser │ Yes, if root     │
│                     │ "!password": "<password>"},  │ credentials, see  │ account password │
│                     │ ..}                          │ configuration for │ is not provided  │
│                     │                              │ reference         │                  │
├─────────────────────┼──────────────────────────────┼───────────────────┼──────────────────┤
│timezone             │ Timezone to configure in     │ Timezone eg: UTC, │ Yes              │
│                     │ installation                 │ Asia/Kolkata etc. │                  │
├─────────────────────┼──────────────────────────────┼───────────────────┼──────────────────┤
│users                │ { "<username>": {            │ List of regular   │ Yes, can be {}   │
│                     │ "!password": "<password>"},  │ user credentials, │                  │
│                     │ ..}                          │ see configuration │                  │
│                     │                              │ for reference     │                  │
└─────────────────────┴──────────────────────────────┴───────────────────┴──────────────────┘
Below is a description of each individual steps in order.
keyboard languages Default is us. A short list of the most common layouts are presented. Entering ? and pressing enter enables a search mode where additional keyboard layouts can be found.
In search mode, you'll find things like:
• sv-latin1 for swedish layouts
Mirror region selection Default is auto detect best mirror Leaving this blank should enable the most appropriate mirror for you. But if you want to override and use only one selected region, you can enter one in this step.
• Sweden (with a capital :code:`S`) will only use mirrors from Sweden.
Selection of drive There is no default for this step and it's a required step.
WARNING: The selected device will be wiped completely!
Make sure you select a drive that will be used only by Arch Linux. (Future versions of archinstall will support multiboot on the same drive and more complex partition setups)
Select the appropriate drive by selecting it by number or full path.
Disk encryption Selecting a disk encryption password enables disk encryption for the OS partition.
NOTE: This step is highly recommended for most users, skipping this step comes with some risk and you are obligated to read up on why you would want to skip encryption before deciding to opt-out.
WARNING: This step does require at least 1GB of free RAM during boot in order to boot at all. Keep this in mind when creating virtual machines. It also only encrypts the OS partition - not the boot partition (it's not full disk encryption).
Hostname Default is Archinstall
The hostname in which the machine will identify itself on the local network.  This step is optional, but a default hostname of Archinstall will be set if none is selected.
Root password WARNING: Setting a root password disables sudo permissions for additional users. It's there for recommended to skip this step!
This gives you the option to re-enable the root account on the machine. By default, the root account on Arch Linux is disabled and does not contain a password.
You are instead recommended to skip to the next step without any input.
Super User (sudo) WARNING: This step only applies if you correctly skipped the previous step which also makes this step mandatory.
If the previous step was skipped, and only if it is skipped.  This step enables you to create a sudo enabled user with a password.
NOTE: The sudo permission grants root-like privileges to the account but is less prone to for instance guessing admin account attacks. You are also less likely to mess up system critical things by operating in normal user-mode and calling sudo to gain temporary administrative privileges.
Pre-programmed profiles You can optionally choose to install a pre-programmed profile. These profiles might make it easier for new users or beginners to achieve a traditional desktop environment as an example.
There is a list of profiles to choose from. If you are unsure of what any of these are, research the names that show up to understand what they are before you choose one.
NOTE: Some profiles might have sub-dependencies that will ask you to select additional profiles. For instance the desktop profile will create a secondary menu to select a graphical driver. That graphical driver might have additional dependencies if there are multiple driver vendors.
Simply follow the instructions on the screen to navigate through them.
Additional packages Some additional packages can be installed if need be. This step allows you to list (space separated) officially supported packages from the package database at https://archlinux.org/packages/.
Network configuration In this step is optional and allows for some basic configuration of your network. There are two main options and two sub-options, the two main ones are:
• Copy existing network configuration from the ISO you're working on
• Select one network interface to configure If copying existing configuration is chosen, no further configuration is needed. The installer will copy any wireless (based on :code:`iwd`) configurations and systemd-networkd configuration set up by the user or the default system configuration.
If a interface was selected instead, a secondary option will be presented, allowing you to choose between two options:
• Automatic DHCP configuration of IP, DNS and Gateway
• Static IP configuration that further will ask some mandatory questions
Configuration verification Before the installer continues, and this is only valid for the guided installation. The chosen configuration will be printed on the screen and you have the option to verify it.
After which you can press Enter can be pressed in order to start the formatting and installation process.
WARNING: After a 5 second countdown, the selected drive will be permanently erased and all data will be lost.
Post installation Once the installation is complete, green text should appear saying that it's safe to reboot, which is also the command you use to reboot.
There's a discord channel which is frequent by some contributors.
To join the server, head over to https://discord.gg/cqXU88y's server and join in.  There's not many rules other than common sense and treat others with respect.
There's the @Party Animals role if you want notifications of new releases which is posted in the #Release Party channel.  Another thing is the @Contributors role which you can get by writing !verify and verify that you're a contributor.
Hop in, I hope to see you there! : )
ISSUE TRACKER & BUGS Issues and bugs should be reported over at https://github.com/archlinux/archinstall/issues.
General questions, enhancements and security issues can be reported over there too.  For quick issues or if you need help, head over the to the Discord server which has a help channel.
When submitting a help ticket, please include the /var/log/archinstall/install.log. It can be found both on the live ISO but also in the installed filesystem if the base packages was strapped in.
There are additional worker files, these worker files contain individual command input and output. These worker files are located in ~/.cache/archinstall/ and does not need to be submitted by default when submitting issues.
WARNING: Worker log-files may contain sensitive information such as passwords and private information. Never submit these logs without going through them manually making sure they're good for submission. Or submit parts of it that's relevant to the issue itself.
Archinstall ships on PyPi as archinstall.  But the library can be installed manually as well.
WARNING: This is not required if you're running archinstall on a pre-built ISO. The installation is only required if you're creating your own scripted installations.
Using pacman Archinstall is on the official repositories.
To install both the library and the archinstall script:
sudo pacman -S archinstall
Or, to install just the library:
sudo pacman -S python-archinstall
Using PyPi The basic concept of PyPi applies using pip.  Either as a global library:
sudo pip install archinstall
Or as a user module:
pip --user install archinstall
Which will allow you to start using the library.
Manual installation You can either download the github repo as a zip archive.  Or you can clone it, we'll clone it here but both methods work the same.
git clone https://github.com/archlinux/archinstall
Either you can move the folder into your project and simply do
import archinstall
Or you can use setuptools to install it into the module path.
Archinstall can be compiled into a standalone executable.  For Arch Linux based systems, there's a package for this called archinstall.
Using PKGBUILD The source contains a binary PKGBUILD which can be either copied straight off the website. Or cloned using git clone https://github.com/Torxed/archinstall.
Once you've obtained the PKGBUILD, building it is pretty straight forward.
makepkg -s
Which should produce a archinstall-X.x.z-1.pkg.tar.zst that can be installed using:
sudo pacman -U archinstall-X.x.z-1.pkg.tar.zst
NOTE: For a complete guide on the build process, please consult the PKGBUILD on ArchWiki.
Manual compilation You can compile the source manually without using a custom mirror or the PKGBUILD that is shipped.  Simply clone or download the source, and while standing in the cloned folder ./archinstall, execute:
nuitka3  --standalone --show-progress archinstall
This requires the nuitka package as well as python3 to be installed locally.
WARNING: The binary option is limited and stiff. It's hard to modify or create your own installer-scripts this way unless you compile the source manually. If your usecase needs custom scripts, either use the pypi setup method or you'll need to adjust the PKGBUILD prior to building the arch package.
The binary executable is a standalone compiled version of the library. It's compiled using nuitka with the flag --standalone.
Executing the binary As an example we'll use the guided installer.  To run the guided installed, all you have to do (after installing or compiling the binary), is run:
./archinstall guided
As mentioned, the binary is a bit rudimentary and only supports executing whatever is found directly under ./archinstall/examples.  Anything else won't be found. This is subject to change in the future to make it a bit more flexible.
ARCHINSTALL.INSTALLER The installer is the main class for accessing a installation-instance. You can look at this class as the installation you have or will perform.
Anything related to inside the installation, will be found in this class.
archinstall.Installer(target, *, base_packages=None, kernels=None) Installer() is the wrapper for most basic installation steps.  It also wraps pacstrap() among other things.
• partition (class:archinstall.Partition) -- Requires a partition as the first argument, this is so that the installer can mount to mountpoint and strap packages there.
• boot_partition (class:archinstall.Partition) -- There's two reasons for needing a boot partition argument, The first being so that mkinitcpio can place the vmlinuz kernel at the right place during the pacstrap or linux and the base packages for a minimal installation.  The second being when add_bootloader() is called, A boot_partition must be known to the installer before this is called.
• profile (str, optional) -- A profile to install, this is optional and can be called later manually.  This just simplifies the process by not having to call install_profile() later on.
• hostname (str, optional) -- The given /etc/hostname for the machine.
ARCHINSTALL.PROFILE This class enables access to pre-programmed profiles.  This is not to be confused with archinstall.Application which is for pre-programmed application profiles.
Profiles in general is a set or group of installation steps.  Where as applications are a specific set of instructions for a very specific application.
An example would be the (currently fictional) profile called database. The profile database might contain the application profile postgresql. And that's the difference between archinstall.Profile and archinstall.Application.
archinstall.Profile(installer, path, args=None)
ARCHINSTALL.APPLICATION This class enables access to pre-programmed application configurations. This is not to be confused with archinstall.Profile which is for pre-programmed profiles for a wider set of installation sets.
archinstall.Application(installer, path, args=None)
WARNING: All these helper functions are mostly, if not all, related to outside-installation-instructions. Meaning the calls will affect your current running system - and not touch your installed system.
Archinstall supports running in module mode.  The way the library is invoked in module mode is limited to executing scripts under the example folder.
It's there for important to place any script or profile you wish to invoke in the examples folder prior to building and installing.
Pre-requisites We'll assume you've followed the installing.python.manual method.  Before actually installing the library, you will need to place your custom installer-scripts under ./archinstall/examples/ as a python file.
More on how you create these in the next section.
WARNING: This is subject to change in the future as this method is currently a bit stiff. The script path will become a parameter. But for now, this is by design.
Creating a script Lets create a test_installer - installer as an example. This is assuming that the folder ./archinstall is a git-clone of the main repo.  We begin by creating ./archinstall/examples/test_installer.py. The placement here is important later.
This script can now already be called using python -m archinstall test_installer after a successful installation of the library itself. But the script won't do much. So we'll do something simple like list all the hard drives as an example.
To do this, we'll begin by importing archinstall in our ./archinstall/examples/test_installer.py and call some functions.
all_drives = archinstall.list_drives() print(all_drives)
This should print out a list of drives and some meta-information about them.  As an example, this will do just fine.
Now, go ahead and install the library either as a user-module or system-wide.
Calling a module Assuming you've followed the example in Creating a script, you can now safely call it with:
python -m archinstall test_installer
This should now print all available drives on your system.
NOTE: This should work on any system, not just Arch Linux based ones. But note that other functions in the library relies heavily on Arch Linux based commands to execute the installation steps. Such as arch-chroot.
archinstall.list_profiles(filter_irrelevant_macs=True, subpath='', filter_top_level_profiles=False)
archinstall.find_package(name) Finds a specific package via the package database.  It makes a simple web-request, which might be a bit slow.
Be .. autofunction:: archinstall.find_packages
archinstall.list_keyboard_languages()
archinstall.search_keyboard_layout(layout)
archinstall.set_keyboard_language(locale)
archinstall.service_state(service_name: str)
archinstall.filter_mirrors_by_region(regions, destination='/etc/pacman.d/mirrorlist', *args, **kwargs) This function will change the active mirrors on the live medium by filtering which regions are active based on regions.
Parameters regions (str) -- A series of country codes separated by ,. For instance SE,US for sweden and United States.
archinstall.add_custom_mirrors(mirrors: list, *args, **kwargs) This will append custom mirror definitions in pacman.conf
Parameters mirrors (dict) -- A list of mirror data according to: {'url': 'http://url.com', 'signcheck': 'Optional', 'signoptions': 'TrustAll', 'name': 'testmirror'}
archinstall.insert_mirrors(mirrors, *args, **kwargs) This function will insert a given mirror-list at the top of /etc/pacman.d/mirrorlist.  It will not flush any other mirrors, just insert new ones.
Parameters mirrors (dict) -- A dictionary of {'url' : 'country', 'url2' : 'country'}
archinstall.use_mirrors(regions: dict, destination='/etc/pacman.d/mirrorlist')
archinstall.re_rank_mirrors(top=10, *positionals, **kwargs)
archinstall.list_mirrors()
archinstall.BlockDevice(path, info=None)