DSCTL(8)
π DSCTL(8) π
okay bestie, buckle UP, because this is the dsctl manual page β an actual Python-generated manpage from section 8, and she is LONG. This is part 1 of 4, so we're not even done yet. Let's go π«Ά
β¨ NAME β¨
dsctl
π SYNOPSIS π
dsctl [-h] [-v] [-j] [-l] [instance]
{restart,start,stop,status,remove,db2index,db2bak,db2ldif,dbverify,bak2db,ldif2db,backups,ldifs,index-check,tls,healthcheck,get-nsstate,ldifgen,dsrc,cockpit,dblib,thread-pool} ...
πΈ POSITIONAL ARGUMENTS πΈ
so like, you pick an instance (or don't) and then you pick ONE of these moves. each one is a whole vibe:
dsctl restartβ restart an instance of Directory Server, but only if it's already running; otherwise it just starts it. no cap.dsctl startβ start an instance of Directory Server, assuming it isn't currently running.dsctl stopβ stop an instance of Directory Server, assuming it is currently running.dsctl statusβ peek at whether an instance of Directory Server is running or not.dsctl removeβ destroy an instance of Directory Server and yeet all its data. πdsctl db2indexβ kick off a reindex of the server database. the server must be stopped for this to proceed.dsctl db2bakβ kick off a BDB backup of the database. the server must be stopped for this to proceed.dsctl db2ldifβ kick off an LDIF dump of the database. the server must be stopped for this to proceed.dsctl dbverifyβ perform a db verification. you should only do this at the direction of support, fr fr. πdsctl bak2dbβ restore a BDB backup of the database. the server must be stopped for this to proceed.dsctl ldif2dbβ restore an LDIF dump of the database. the server must be stopped for this to proceed.dsctl backupsβ list the backup's found in the server's default backup directory.dsctl ldifsβ list all the LDIF files chillin' in the server's LDIF directory.dsctl index-checkβ check for index ordering mismatches (parentid/ancestorid). the server must be stopped.dsctl tlsβ manage TLS certificates. queen behavior πdsctl healthcheckβ run a healthcheck report on a local Directory Server instance. this is a safe and read-only operation. do not try to run this on a remote Directory Server, because this tool needs access to local resources β otherwise the report may be inaccurate.dsctl get-nsstateβ get the replication nsState in a human readable format. here's what all the fields mean:- Replica DN: β The DN of the replication configuration entry
- Replica Suffix: β The replicated suffix
- Replica ID: β The Replica identifier
- Gen Time β The time the CSN generator was created
- Gen Time String: β The time string of generator
- Gen as CSN: β The generation CSN
- Local Offset: β The offset due to the local clock being set back
- Local Offset String: β The offset in a nice human format
- Remote Offset: β The offset due to clock difference with remote systems
- Remote Offset String: β The offset in a nice human format
- Time Skew: β The time skew between this server and its replicas
- Time Skew String: β The time skew in a nice human format
- Seq Num: β The number of multiple csns within a second
- System Time: β The local system time
- Diff in Seconds: β The time difference in seconds from the CSN generator creation to now
- Diff in days/secs: β The time difference broken up into days and seconds
- Endian: β Little/Big Endian
dsctl ldifgenβ LDIF generator to make sample LDIF files for testing.dsctl dsrcβ manage the.dsrcfile.dsctl cockpitβ enable the Cockpit interface/UI.dsctl dblibβ database library (i.e bdb/lmdb) migration.dsctl thread-poolβ offline thread pool diagnostics, read from the local mmap status file.
π₯ COMMAND dsctl restart π₯
usage: dsctl [-v] [-j] [instance] restart [-h]
π₯ COMMAND dsctl start π₯
usage: dsctl [-v] [-j] [instance] start [-h]
π₯ COMMAND dsctl stop π₯
usage: dsctl [-v] [-j] [instance] stop [-h]
π₯ COMMAND dsctl status π₯
usage: dsctl [-v] [-j] [instance] status [-h]
π₯ COMMAND dsctl remove π₯
usage: dsctl [-v] [-j] [instance] remove [-h] [--do-it]
β¨ OPTIONS 'dsctl remove' β¨
--do-itβ by default we do a dry run. this actually initiates the removal of the instance. like, for real for real.
π₯ COMMAND dsctl db2index π₯
usage: dsctl [-v] [-j] [instance] db2index [-h] [--attr ATTR] backend
backendβ the backend to reindex. IEuserRoot
β¨ OPTIONS 'dsctl db2index' β¨
--attr ATTRβ an attribute to reindex. IE:--attr member --attr cn ...
π₯ COMMAND dsctl db2bak π₯
usage: dsctl [-v] [-j] [instance] db2bak [-h] [--watch] [archive]
archiveβ the destination for the archive. this will be created during the db2bak process.
β¨ OPTIONS 'dsctl db2bak' β¨
--watchβ watch the status of the db2bak task
π₯ COMMAND dsctl db2ldif π₯
usage: dsctl [-v] [-j] [instance] db2ldif [-h] [--replication] [--encrypted] [--watch] backend [ldif]
backendβ the backend to output as an LDIF. IEuserRootldifβ the path to the ldif output location.
β¨ OPTIONS 'dsctl db2ldif' β¨
--replicationβ export replication information, suitable for importing on a new consumer or backups.--encryptedβ export encrypted attributes--watchβ watch the status of the db2ldif task
π₯ COMMAND dsctl dbverify π₯
usage: dsctl [-v] [-j] [instance] dbverify [-h] backend
backendβ the backend to verify. IEuserRoot
π₯ COMMAND dsctl bak2db π₯
usage: dsctl [-v] [-j] [instance] bak2db [-h] [--watch] archive
archiveβ the archive to restore. this will erase all current server databases. π
β¨ OPTIONS 'dsctl bak2db' β¨
--watchβ watch the status of the bak2db task
π₯ COMMAND dsctl ldif2db π₯
usage: dsctl [-v] [-j] [instance] ldif2db [-h] [--encrypted] [--watch] backend ldif
backendβ the backend to restore from an LDIF. IEuserRootldifβ the path to the ldif to import
β¨ OPTIONS 'dsctl ldif2db' β¨
--encryptedβ import encrypted attributes--watchβ watch the status of the ldif2db task
π₯ COMMAND dsctl backups π₯
usage: dsctl [-v] [-j] [instance] backups [-h] [--delete DELETE]
β¨ OPTIONS 'dsctl backups' β¨
--delete DELETEβ delete backup directory
π₯ COMMAND dsctl ldifs π₯
usage: dsctl [-v] [-j] [instance] ldifs [-h] [--delete DELETE]
β¨ OPTIONS 'dsctl ldifs' β¨
--delete DELETEβ delete LDIF file
π₯ COMMAND dsctl index-check π₯
usage: dsctl [-v] [-j] [instance] index-check [-h] [--fix] [backend]
backendβ backend to check. if not specified, all backends are checked.
β¨ OPTIONS 'dsctl index-check' β¨
--fixβ fix mismatches by adjusting config to match on-disk data
π₯ COMMAND dsctl tls π₯
usage: dsctl [-v] [-j] [instance] tls [-h] {list-ca,list-client-ca,show-server-cert,show-cert,generate-server-cert-csr,import-client-ca,import-ca,import-server-cert,import-server-key-cert,remove-cert,export-cert} ...
π POSITIONAL ARGUMENTS 'dsctl tls' π
dsctl tls list-caβ list server certificate authorities including intermediatesdsctl tls list-client-caβ list client certificate authorities including intermediatesdsctl tls show-server-certβ show the active server certificate that clients will see and verifydsctl tls show-certβ show a certificate's details referenced by it's nickname. this is analogous tocertutil -L -d <path> -n <nickname>dsctl tls generate-server-cert-csrβ generate a Server-Cert certificate signing request β the csr is then submitted to a CA for verification, and when signed you import with import-ca and import-server-certdsctl tls import-client-caβ import a CA trusted to issue user (client) certificates. this is part of how client certificate authentication functions.dsctl tls import-caβ import a CA or intermediate CA for signing this servers certificates (aka Server-Cert). you should import all the CA's in the chain as required. PEM bundles are accepteddsctl tls import-server-certβ import a new Server-Cert after the csr has been signed from a CA.dsctl tls import-server-key-certβ import a new key and Server-Cert after having been signed from a CA. this is used if you have an external csr tool or a service like lets encrypt that generates PEM keys externally.dsctl tls remove-certβ delete a certificate from this database. this will remove it from acting as a CA, a client CA or the Server-Cert role.dsctl tls export-certβ export a certificate to PEM or DER/Binary format. PEM format is the default
π₯ COMMAND dsctl tls list-ca π₯
usage: dsctl [-v] [-j] [instance] tls list-ca [-h]
π₯ COMMAND dsctl tls list-client-ca π₯
usage: dsctl [-v] [-j] [instance] tls list-client-ca [-h]
π₯ COMMAND dsctl tls show-server-cert π₯
usage: dsctl [-v] [-j] [instance] tls show-server-cert [-h] [--nickname NICKNAME]
β¨ OPTIONS 'dsctl tls show-server-cert' β¨
--nickname NICKNAMEβ the nickname (friendly name) of the certificate to display if different than
π₯ COMMAND dsctl tls show-cert π₯
usage: dsctl [-v] [-j] [instance] tls show-cert [-h] nickname
nicknameβ the nickname (friendly name) of the certificate to display
π₯ COMMAND dsctl tls generate-server-cert-csr π₯
usage: dsctl [-v] [-j] [instance] tls generate-server-cert-csr [-h] [--subject SUBJECT] [--nickname NICKNAME] [alt_names ...]
alt_namesβ certificate requests subject alternative names. these are auto-detected if not provided
β¨ OPTIONS 'dsctl tls generate-server-cert-csr' β¨
--subject SUBJECT,-s SUBJECTβ certificate Subject field to use--nickname NICKNAMEβ the name of the certificate if different than'Server-Cert'
π₯ COMMAND dsctl tls import-client-ca π₯
usage: dsctl [-v] [-j] [instance] tls import-client-ca [-h] cert_path nickname
cert_pathβ the path to the x509 cert to import as a client trust rootnicknameβ the name of the certificate once imported
π₯ COMMAND dsctl tls import-ca π₯
usage: dsctl [-v] [-j] [instance] tls import-ca [-h] cert_path nickname [nickname ...]
cert_pathβ the path to the x509 cert to import as a server CAnicknameβ the name of the certificate once imported
π₯ COMMAND dsctl tls import-server-cert π₯
usage: dsctl [-v] [-j] [instance] tls import-server-cert [-h] [--nickname NICKNAME] cert_path
cert_pathβ the path to the x509 cert to import as Server-Cert
β¨ OPTIONS 'dsctl tls import-server-cert' β¨
--nickname NICKNAMEβ the name of the certificate, if you wanna call it something other thanServer-Certπ
π COMMAND 'dsctl tls import-server-key-cert' π
usage: dsctl [-v] [-j] [instance] tls import-server-key-cert [-h] [--nickname NICKNAME] cert_path key_path
cert_pathβ the path to the x509 cert you're importing asServer-Certπ¦key_pathβ the path to the x509 key that goes withServer-Cert, like they're a matching set bestie π
β¨ OPTIONS 'dsctl tls import-server-key-cert' β¨
--nickname NICKNAMEβ the name of the certificate, if you want it to be something other thanServer-Certπ
π COMMAND 'dsctl tls remove-cert' π
usage: dsctl [-v] [-j] [instance] tls remove-cert [-h] nickname
nicknameβ the name of the certificate you want to delete. yes we're really doing this π
πΈ COMMAND 'dsctl tls export-cert' πΈ
usage: dsctl [-v] [-j] [instance] tls export-cert [-h] [--binary-format] [--output-file OUTPUT_FILE] nickname
nicknameβ the name of the certificate you want to export π«Ά
β¨ OPTIONS 'dsctl tls export-cert' β¨
--binary-formatβ export the certificate in DER/binary format, for when you're feeling raw and unfiltered π₯--output-file OUTPUT_FILEβ the name for the exported certificate. the default name is the certificate nickname with an extension of.pemor.crtβ iconic default behaviour tbh π
π COMMAND 'dsctl healthcheck' π
usage: dsctl [instance] healthcheck [-h] [--list-checks] [--list-errors] [--dry-run] [--check CHECK [CHECK ...]] [--exclude-check EXCLUDE_CHECK [EXCLUDE_CHECK ...]]
β¨ OPTIONS 'dsctl healthcheck' β¨
--list-checksβ lists all the known checks, so you know what's on the menu π--list-errorsβ lists all the known error codes β¨--dry-runβ doesn't actually run the check, just tells you what would have been done. window shopping, basically ποΈ--check CHECK [CHECK ...]β the areas to check. you can get these from--list-checks. and here's the little trick: every element on the left of the colon (:) can be swapped out for an asterisk if there are multiple options on the right side available π--exclude-check EXCLUDE_CHECK [EXCLUDE_CHECK ...]β the areas to skip. also obtainable from--list-checks. same deal here β any element on the left of the colon (:) can be replaced with an asterisk if multiple options on the right are available π«
π§ COMMAND 'dsctl get-nsstate' π§
usage: dsctl [instance] get-nsstate [-h] [--suffix SUFFIX] [--flip FLIP]
β¨ OPTIONS 'dsctl get-nsstate' β¨
--suffix SUFFIXβ the DN of the replication suffix to read the state from π--flip FLIPβ flips between Little/Big Endian. you might need this on certain architectures, so likeβ¦ architecture-dependent bestie, don't @ me π
π COMMAND 'dsctl ldifgen' π
okay bestie, this one is THE main character of the whole page. look at this:
usage: dsctl [-v] [-j] [instance] ldifgen [-h] {users,groups,cos-def,cos-template,roles,mod-load,nested} ...
seven whole little generators living inside it. obsessed. π
π POSITIONAL ARGUMENTS 'dsctl ldifgen' π
dsctl ldifgen usersβ generates an LDIF stuffed with user entries π§βπ€βπ§dsctl ldifgen groupsβ generates an LDIF with groups and members π«dsctl ldifgen cos-defβ generates an LDIF with a COS definition (that's classic, pointer, or indirect) β¨dsctl ldifgen cos-templateβ generates an LDIF with a COS template πdsctl ldifgen rolesβ generates an LDIF with a role entry (managed, filtered, or indirect) πdsctl ldifgen mod-loadβ generates an LDIF full of modify operations. this one is meant to be eaten byldapmodifyπ½οΈdsctl ldifgen nestedβ generates a heavily nested database LDIF in a cascading/fractal tree design. yes, fractal. it's giving recursion π³
π¦ COMMAND 'dsctl ldifgen users' π¦
usage: dsctl [-v] [-j] [instance] ldifgen users [-h] [--number NUMBER] [--suffix SUFFIX] [--parent PARENT] [--generic] [--start-idx START_IDX] [--rdn-cn] [--localize] [--ldif-file LDIF_FILE]
β¨ OPTIONS 'dsctl ldifgen users' β¨
--number NUMBERβ how many users to create π’--suffix SUFFIXβ the database suffix where the entries will get created ποΈ--parent PARENTβ the parent entry the user entries should be created under. if you don't specify one, they get scattered under random Organizational Units π--genericβ creates generic entries in the format of"uid=user####". these are also compatible withldcltπ€--start-idx START_IDXβ for generic LDIFs you can pick the starting index for the user entries. the default is"0"π--rdn-cnβ uses the attribute"cn"as the RDN attribute in the DN instead of"uid"β¨--localizeβ localizes the LDIF data π--ldif-file LDIF_FILEβ the LDIF file name. default location is the server's LDIF directory, using the nameldifgen.ldifπ
π COMMAND 'dsctl ldifgen groups' π
usage: dsctl [-v] [-j] [instance] ldifgen groups [-h] [--number NUMBER] [--suffix SUFFIX] [--parent PARENT] [--num-members NUM_MEMBERS] [--create-members] [--member-parent MEMBER_PARENT] [--member-attr MEMBER_ATTR] [--ldif-file LDIF_FILE] NAME
NAMEβ the group name π·οΈ
β¨ OPTIONS 'dsctl ldifgen groups' β¨
--number NUMBERβ the number of groups to create π’--suffix SUFFIXβ the database suffix where the groups will be created ποΈ--parent PARENTβ the parent entry the group entries should be created under. if you don't specify one, the groups are stored under the suffix π«Ά--num-members NUM_MEMBERSβ the number of members in the group. default is10000π³ yes, ten thousand--create-membersβ actually creates those member user entries π--member-parent MEMBER_PARENTβ the entry DN the members should be created under. the default is the suffix entry β¨--member-attr MEMBER_ATTRβ the membership attribute to use in the group. default is"uniquemember"π--ldif-file LDIF_FILEβ the LDIF file name. default location is the server's LDIF directory, using the nameldifgen.ldifπ
π§ COMMAND 'dsctl ldifgen cos-def' π§
usage: dsctl [-v] [-j] [instance] ldifgen cos-def [-h] [--type TYPE] [--parent PARENT] [--create-parent] [--cos-specifier COS_SPECIFIER] [--cos-template COS_TEMPLATE] [--cos-attr [COS_ATTR ...]] [--ldif-file LDIF_FILE] NAME
NAMEβ the COS definition name π·οΈ
β¨ OPTIONS 'dsctl ldifgen cos-def' β¨
--type TYPEβ the COS definition type:"classic","pointer", or"indirect"π--parent PARENTβ the parent entry the COS definition should be created under π³--create-parentβ creates that parent entry πΆ--cos-specifier COS_SPECIFIERβ used in a classic COS definition. this attribute lives in the user entry and decides which COS template gets used π--cos-template COS_TEMPLATEβ the DN of the COS template entry. only used for"classic"and"pointer"COS definitions β¨--cos-attr [COS_ATTR ...]β a list of attributes defining which attribute the COS generates values for π--ldif-file LDIF_FILEβ the LDIF file name. default location is the server's LDIF directory, using the nameldifgen.ldifπ
π COMMAND 'dsctl ldifgen cos-template' π
usage: dsctl [-v] [-j] [instance] ldifgen cos-template [-h] [--parent PARENT] [--create-parent] [--cos-priority COS_PRIORITY] [--cos-attr-val COS_ATTR_VAL] [--ldif-file LDIF_FILE] NAME
NAMEβ the COS template name π·οΈ
β¨ OPTIONS 'dsctl ldifgen cos-template' β¨
--parent PARENTβ the DN of the entry to store the COS template entry under π--create-parentβ creates the parent entry πΆ--cos-priority COS_PRIORITYβ sets the priority of this conflicting/competing COS template. drama between templates, basically π--cos-attr-val COS_ATTR_VALβ defines the attribute and the value that the template provides π--ldif-file LDIF_FILEβ the LDIF file name. default location is the server's LDIF directory, using the nameldifgen.ldifπ
π COMMAND 'dsctl ldifgen roles' π
usage: dsctl [-v] [-j] [instance] ldifgen roles [-h] [--type TYPE] [--parent PARENT] [--create-parent] [--filter FILTER] [--role-dn [ROLE_DN ...]] [--ldif-file LDIF_FILE] NAME
NAMEβ the Role name π·οΈ
β¨ OPTIONS 'dsctl ldifgen roles' β¨
--type TYPEβ the Role type:"managed","filtered", or"nested"π--parent PARENTβ the DN of the entry to store the Role entry under π--create-parentβ creates the parent entry πΆ--filter FILTERβ a search filter for gathering Role members. required for a"filtered"role π--role-dn [ROLE_DN ...]β a DN of a role entry that should be included in this role. used for"nested"roles only πͺ--ldif-file LDIF_FILEβ the LDIF file name. default location is the server's LDIF directory, using the nameldifgen.ldifπ
π COMMAND 'dsctl ldifgen mod-load' β¨
okay bestie, this one is the chaos gremlin of ldifgen β it generates an LDIF full of modify, add, delete and modrdn operations so you can stress-test your server with actual churn. it's giving "load test but make it messy" π¦
usage: dsctl [-v] [-j] [instance] ldifgen mod-load [-h] [--create-users]
[--delete-users]
[--num-users
NUM_USERS]
[--parent PARENT]
[--create-parent]
[--add-users
ADD_USERS]
[--del-users
DEL_USERS]
[--modrdn-users
MODRDN_USERS]
[--mod-users
MOD_USERS]
[--mod-attrs
[MOD_ATTRS ...]]
[--randomize]
[--ldif-file
LDIF_FILE]
πΈ OPTIONS 'dsctl ldifgen mod-load' π
--create-usersβ make the entries that are gonna get modified or deleted. by default the script just assumes those user entries already exist, so if they don'tβ¦ nothing to play with π--delete-usersβ yeet all the user entries at the end of the LDIF. cleanup era π--num-users NUM_USERSβ how many user entries will be modified or deleted. the headcount, bestie--parent PARENTβ the DN of the parent entry where the user entries live. their home address π--create-parentβ create the parent entry too. build the house first, then move in β¨--add-users ADD_USERSβ how many additional entries get added during the load--del-users DEL_USERSβ how many entries get deleted during the load--modrdn-users MODRDN_USERSβ how many entries get a modrdn operation performed on them. renaming arc π--mod-users MOD_USERSβ how many entries get modified--mod-attrs [MOD_ATTRS ...]β the list of attributes the script randomly picks from when modifying an entry. default is"description". you can pass a whole lil list here--randomizeβ randomly perform the specified add, mod, delete, and modrdn operations. pure chaos, no notes π--ldif-file LDIF_FILEβ the LDIF file name. default location is the server's LDIF directory using the name'ldifgen.ldif'
π§ COMMAND 'dsctl ldifgen nested' π¦
nested time!! this generates a tree of user entries, split up under nodes/subtrees. very "directory within a directory" of it π
usage: dsctl [-v] [-j] [instance] ldifgen nested [-h] [--num-users
NUM_USERS]
[--node-limit
NODE_LIMIT]
[--suffix SUFFIX]
[--ldif-file LDIF_FILE]
β OPTIONS 'dsctl ldifgen nested' πΈ
--num-users NUM_USERSβ the total number of user entries to create in the entire LDIF. ngl this one does not include the container entries, so the final count is bigger than this number. math is math π--node-limit NODE_LIMITβ the total number of user entries to create under each node/subtree. so yes, it multiplies. buckle up π--suffix SUFFIXβ the suffix DN for the LDIF--ldif-file LDIF_FILEβ the LDIF file name. default location is the server's LDIF directory using the name'ldifgen.ldif'
π COMMAND 'dsctl dsrc' π
the .dsrc era!! this command group reads and writes your .dsrc file (that's the lil config file the LDAP CLI tools use to remember your instance's settings so you don't have to type them every single time). it's giving quality-of-life, fr fr.
usage: dsctl [-v] [-j] [instance] dsrc [-h]
{create,modify,delete,display,repl-mon} ...
π«Ά POSITIONAL ARGUMENTS 'dsctl dsrc' β¨
dsctl dsrc createβ generate the.dsrcfiledsctl dsrc modifyβ modify the.dsrcfiledsctl dsrc deleteβ delete instance configuration from the.dsrcfile.dsctl dsrc displayβ display the contents of the.dsrcfile.dsctl dsrc repl-monβ display the contents of the.dsrcfile.
yes bestie,displayandrepl-monboth say "display the contents of the .dsrc file" in the original. i'm not fixing it, i'm not merging it, i'm just reporting the lore π
π COMMAND 'dsctl dsrc create' π
brand new .dsrc file, who dis. this one walks you through all the connection details π
usage: dsctl [-v] [-j] [instance] dsrc create [-h] [--uri URI]
[--basedn BASEDN]
[--people-rdn PEOPLE_RDN]
[--groups-rdn GROUPS_RDN]
[--binddn BINDDN]
[--saslmech SASLMECH]
[--tls-cacertdir
TLS_CACERTDIR]
[--tls-cert TLS_CERT]
[--tls-key TLS_KEY]
[--tls-reqcert
TLS_REQCERT]
[--starttls] [--pwdfile
PWDFILE]
[--do-it]
β¨ OPTIONS 'dsctl dsrc create' πΈ
--uri URIβ the URI (LDAP URL) for the Directory Server instance. where your server lives, basically π--basedn BASEDNβ the default database suffix--people-rdn PEOPLE_RDNβ set the RDN for the'people'subtree. default is"ou=people"--groups-rdn GROUPS_RDNβ set the RDN for the'groups'subtree. default is"ou=groups"--binddn BINDDNβ the default Bind DN used or authentication.--saslmech SASLMECHβ the SASL mechanism to use:PLAINorEXTERNAL.--tls-cacertdir TLS_CACERTDIRβ the directory containing the Trusted Certificate Authority certificate.--tls-cert TLS_CERTβ the absolute file name to the server certificate.--tls-key TLS_KEYβ the absolute file name to the server certificate key.--tls-reqcert TLS_REQCERTβ request certificate strength:'never','allow','hard'--starttlsβ use startTLS for connection to the server. glow up your connection π--pwdfile PWDFILEβ the absolute path to a file containing the Bind DN's password.--do-itβ create the file without any confirmation. no takebacks, bestie π
π¦ COMMAND 'dsctl dsrc modify' π§
same energy as create, except every argument is now optional-ish (they're wrapped in brackets) so you can just poke the one thing you wanna change. lowkey the superior workflow β
usage: dsctl [-v] [-j] [instance] dsrc modify [-h] [--uri [URI]]
[--basedn [BASEDN]]
[--people-rdn
[PEOPLE_RDN]]
[--groups-rdn
[GROUPS_RDN]]
[--binddn [BINDDN]]
[--saslmech [SASLMECH]]
[--tls-cacertdir
[TLS_CACERTDIR]]
[--tls-cert [TLS_CERT]]
[--tls-key [TLS_KEY]]
[--tls-reqcert
[TLS_REQCERT]]
[--starttls]
[--cancel-starttls]
[--pwdfile [PWDFILE]]
[--do-it]
π OPTIONS 'dsctl dsrc modify' π
--uri [URI]β the URI (LDAP URL) for the Directory Server instance.--basedn [BASEDN]β the default database suffix.--people-rdn [PEOPLE_RDN]β sets the RDN used for the'people'container--groups-rdn [GROUPS_RDN]β sets the RDN used for the'groups'container--binddn [BINDDN]β the default Bind DN used or authentication.--saslmech [SASLMECH]β the SASL mechanism to use:PLAINorEXTERNAL.--tls-cacertdir [TLS_CACERTDIR]β the directory containing the Trusted Certificate Authority certificate.--tls-cert [TLS_CERT]β the absolute file name to the server certificate.--tls-key [TLS_KEY]β the absolute file name to the server certificate key.--tls-reqcert [TLS_REQCERT]β request certificate strength:'never','allow','hard'--starttlsβ use startTLS for connection to the server. (no brackets on this one, it's a straight toggle π)--cancel-starttlsβ do not use startTLS for connection to the server. the anti-starttls, if you will π--pwdfile [PWDFILE]β the absolute path to a file containing the Bind DN's password.--do-itβ update the file without any confirmation. periodt.
π COMMAND 'dsctl dsrc delete' πΈ
removing this instance's config from the .dsrc file. it's giving spring cleaning β¨
usage: dsctl [-v] [-j] [instance] dsrc delete [-h] [--do-it]
π OPTIONS 'dsctl dsrc delete' π
--do-itβ delete this instance's configuration from the.dsrcfile.
π COMMAND 'dsctl dsrc display' π
just shows you what's inside your .dsrc file. no flags, no drama, pure vibes β¨
usage: dsctl [-v] [-j] [instance] dsrc display [-h]
π₯ COMMAND 'dsctl dsrc repl-mon' π₯
this is the replica-monitor corner of your .dsrc β you add and delete replica connections and host/port aliases here. very "keeping the family tree tidy" of it π
usage: dsctl [-v] [-j] [instance] dsrc repl-mon [-h]
[--add-conn ADD_CONN
[ADD_CONN ...]]
[--del-conn DEL_CONN
[DEL_CONN ...]]
[--add-alias ADD_ALIAS
[ADD_ALIAS ...]]
[--del-alias DEL_ALIAS
[DEL_ALIAS ...]]
β OPTIONS 'dsctl dsrc repl-mon' π¦
--add-conn ADD_CONN [ADD_CONN ...]β add a replica connection:'NAME:HOST:PORT:BINDDN:CREDENTIAL'. yes the whole thing, colons and all π--del-conn DEL_CONN [DEL_CONN ...]β delete a replica connection by its NAME--add-alias ADD_ALIAS [ADD_ALIAS ...]β add a host/port alias:'ALIAS_NAME:HOST:PORT'--del-alias DEL_ALIAS [DEL_ALIAS ...]β delete a host/port alias by its ALIAS_NAME
π¦ COMMAND 'dsctl cockpit' π
cockpit?? yes, the web console thing. this group flips the Cockpit socket on and off and fiddles with the firewall for the "cockpit" service. it's giving "dashboard era" π
usage: dsctl [-v] [-j] [instance] cockpit [-h]
{enable,open-firewall,disable,close-firewall}
...
β¨ POSITIONAL ARGUMENTS 'dsctl cockpit' πΈ
dsctl cockpit enableβ enable the Cockpit socketdsctl cockpit open-firewallβ open the firewall for the"cockpit"servicedsctl cockpit disableβ disable the Cockpit socketdsctl cockpit close-firewallβ remove the"cockpit"service from the firewall settings
π COMMAND 'dsctl cockpit enable' π
socket goes brrr. (in the good way). no options for this one, bestie β¨
usage: dsctl [-v] [-j] [instance] cockpit enable [-h]
π₯ COMMAND 'dsctl cockpit open-firewall' π
let the outside world in, but politely, and only for one specific zone π
usage: dsctl [-v] [-j] [instance] cockpit open-firewall [-h] [--zone
ZONE]
β OPTIONS 'dsctl cockpit open-firewall' π¦
--zone ZONEβ the firewall zone
π§ COMMAND 'dsctl cockpit disable' πΈ
socket goes off. no options here either π
usage: dsctl [-v] [-j] [instance] cockpit disable [-h]
π COMMAND 'dsctl cockpit close-firewall' π
yeeting the "cockpit" service back out of the firewall settings. goodbye portal πͺβ¨
usage: dsctl [-v] [-j] [instance] cockpit close-firewall [-h]
π COMMAND 'dsctl dblib' π
okay SO. this is the database library migration corner. your backend is either bdb (Berkeley DB) or lmdb, and this group moves you back and forth between them. huge glow-up potential, but also: read the warnings when they show up, bestie π
usage: dsctl [-v] [-j] [instance] dblib [-h] {bdb2mdb,mdb2bdb,cleanup}
...
π POSITIONAL ARGUMENTS 'dsctl dblib' π¦
dsctl dblib bdb2mdbβ migrate bdb databases to lmdbdsctl dblib mdb2bdbβ migrate lmdb databases to bdbdsctl dblib cleanupβ remove migration ldif file and old database
β COMMAND 'dsctl dblib bdb2mdb' π₯
the great migration. bdb in, lmdb out π§
usage: dsctl [-v] [-j] [instance] dblib bdb2mdb [-h] [--tmpdir TMPDIR]
π OPTIONS 'dsctl dblib bdb2mdb' πΈ
--tmpdir TMPDIRβ ldif migration files directory path.
π COMMAND 'dsctl dblib mdb2bdb' β¨
reverse uno card. lmdb in, bdb out π¦
usage: dsctl [-v] [-j] [instance] dblib mdb2bdb [-h] [--tmpdir TMPDIR]
π OPTIONS 'dsctl dblib mdb2bdb' π
--tmpdir TMPDIRβ ldif migration files directory path.
π COMMAND 'dsctl dblib cleanup' π§Ή
cleans up after the migration β the ldif file and the old database both get swept away. tidy queen behavior π
usage: dsctl [-v] [-j] [instance] dblib cleanup [-h]
π«Ά COMMAND 'dsctl thread-pool' πΈ
peek behind the curtain at the server's worker threads. no LDAP connection required for the status subcommand, which is genuinely so convenient fr fr π
usage: dsctl [-v] [-j] [instance] thread-pool [-h] {status} ...
π¦ POSITIONAL ARGUMENTS 'dsctl thread-pool' β
dsctl thread-pool statusβ display pool gauges and per-worker activity without an LDAP connection
π§΅ COMMAND dsctl thread-pool status
okay so this is the one you actually came here for bestie, the status check π it shows you what the thread pool is doing right now, no cap:
usage: dsctl [-v] [-j] [instance] thread-pool status [-h] [--file FILE]
that's the whole shape of it β optional -v and -j up front, optional [instance], then thread-pool status, then -h for help or --file FILE if you wanna peek at a file instead of the live thing. iconic β¨
π OPTIONS β dsctl thread-pool status
--fileFILE β instead of reading the instance's live thread-pool status file, read this file instead. super handy for when the server went π and left you a crash file that got preserved asthreadpool.YYYYMMDD-HHMMSSβ you can still go back and read the receipts π΅οΈββοΈβ¨
β¨ OPTIONS β¨
these ones are the general vibes for the whole dsctl situation, not just thread-pool stuff, iykyk:
-v,--verboseβ show verbose operation tracing while the command runs. it's giving βtell me EVERYTHING that's happeningβ π£οΈ so you can watch it work step by step. main character behavior fr fr.-j,--jsonβ return the result in a JSON object. perfect for when you want to pipe it into something else and be all programmatic about it π§ lowkey the move for scripting bestie.-l,--listβ list the available Directory Server instances. your little roster of servers, all lined up like β¨attendees at the functionβ¨ π
heads up bestie π-vand-jshow up both here as global options and in thethread-pool statususage line, and--fileis the status-specific one. don't mix 'em up β--fileonly means anything for reading a thread-pool status file. periodt.
π AUTHOR
"Red Hat, Inc., and William Brown" <389-devel@lists.fedoraproject.org>
and that's the whole page, bestie, we made it to the end and it ate ππ
you now know more about dsctl than like 99% of people, fr fr. this whole thing shipped as lib389 3.3.1, dated 2026-09-11 ποΈβ¨ β go forth and wrangle your directory servers, you gorgeous genius π«Άπ no cap, obsessed with you. bye bestie! ππ¦πΈ
π¦ where this page comes from
- ubuntu stonking: python3-lib389 3.3.1-3 Β· GPL-3.0-or-later AND Other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms