1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
|
# Slackware Pentesting Suite
A curated collection of penetration testing tools packaged as SlackBuilds for
Slackware GNU/Linux, following [SlackBuilds.org (SBo)](https://slackbuilds.org)
conventions where applicable.
---
## Repo Structure
Each package lives in its own top-level subfolder:
```
<package-name>/
├── <package-name>.SlackBuild # Main build script
├── <package-name>.info # Metadata (version, checksums, URLs)
├── README # Description and usage notes
├── slack-desc # Package description (11-line format)
├── <package-name>.desktop # (optional) Desktop entry for GUI apps
├── doinst.sh # (optional) Post-install script
├── rc.<daemon> # (optional) Init script for daemon packages
├── patches/ # (optional) Patch directory for source builds
│ ├── series # (optional) Ordered patch list
│ └── *.patch
└── [...] # Other optional files (man pages, completions, etc.)
```
---
## Build Strategies
Packages in this repo fall into several categories — the SlackBuild style
differs accordingly.
### 1. Source builds (Go)
Packages such as `ffuf`, `gobuster`, `nuclei` are built from upstream source
tarballs using `go build`. Key points:
- Set `GOPATH`, `GOPROXY`, `GOFLAGS` before building
- Use `-buildmode=pie -trimpath -mod=readonly -modcacherw`
- Strip ELF binaries after build
- Clean up `$GOPATH` / Go module cache before packaging
- `REQUIRES="google-go-lang"` in the `.info` file
### 2. Source builds (autotools / cmake)
Packages such as `hydra`, `cadaver` are built from source using `./configure`
or `cmake`. Follow standard SBo template conventions.
### 3. Binary repacks — Debian `.deb`
Packages such as `metasploit-framework-bin` are repacked from upstream `.deb`
archives (SBo convention: `.deb`/binary repacks take a `-bin` suffix):
- Extract with: `ar p <file>.deb data.tar.gz | tar xzv`
- Set `DOWNLOAD="UNSUPPORTED"` and use `DOWNLOAD_x86_64` / `MD5SUM_x86_64`
- These packages are x86_64 only; exit with an error for other arches
- Strip ELF binaries after extraction
### 4. Binary repacks — RPM
Packages such as `nessus` are repacked from upstream `.rpm` archives:
- Extract with: `rpm2cpio <file>.rpm | cpio -idmv`
- Set `DOWNLOAD="UNSUPPORTED"` and use `DOWNLOAD_x86_64` / `MD5SUM_x86_64`
### 5. Data / archive packages
Packages such as `SecLists`, `exploitdb`, `webshells`, `windows-binaries`
install data files rather than compiled binaries. No stripping needed.
---
## SlackBuild Scripting Guidelines
### Templates (source of truth)
Local templates live in `~/Templates/SlackBuilds/`. **Always start from the
matching template there** rather than writing a SlackBuild or its accompanying
files from scratch or from memory. The directory holds:
- Per-build-type SlackBuild templates: `autotools-template.SlackBuild`,
`cmake-template.SlackBuild`, `meson-template.SlackBuild`,
`go-template.SlackBuild`, `conraid-go-template.SlackBuild`,
`python-template.SlackBuild`, `perl-template.SlackBuild`,
`rubygem-template.SlackBuild`, `haskell-template.SlackBuild`. Pick the one
matching the package's build system.
- Shared support files: `slack-desc`, `template.info`, `doinst.sh`,
`douninst.sh`, `README`. Use these as the base for the corresponding files
in a package.
When the local template and the upstream SBo template disagree, the local one
wins. Only fall back to the [SBo template](https://slackbuilds.org/templates/)
if no local template fits.
### Copyright line
In every `.SlackBuild`, the maintainer copyright line is exactly:
```
# Copyright <year> danix <danix@danix.xyz>
```
### General
- Use `set -e` to abort on errors
- Honor `$TMP`, `$BUILD`, `$TAG`, `$OUTPUT`; provide defaults if unset
- Use `$ARCH` detection with proper `SLKCFLAGS` and `LIBDIRSUFFIX`
- Strip binaries and libraries unless the package type makes it irrelevant
- Install docs to `/usr/doc/$PRGNAM-$VERSION/`
- Always include `find -L` + `chown`/`chmod` cleanup block before packaging
- Use `makepkg -l y -c n` to create the final package
### Patch support
When upstream patches are needed, store them in `patches/` and apply via:
```bash
if compgen -G "$CWD/patches/*.patch" > /dev/null; then
if [ -f "$CWD/patches/series" ]; then
while IFS= read -r PATCH; do
[ -z "$PATCH" ] && continue
[ "${PATCH#\#}" != "$PATCH" ] && continue
patch -p1 -i "$CWD/patches/$PATCH"
done < "$CWD/patches/series"
else
for PATCH in "$CWD"/patches/*.patch; do
patch -p1 -i "$PATCH"
done
fi
fi
```
---
## `.info` File
Must contain:
```
PRGNAM="..."
VERSION="..."
HOMEPAGE="..."
DOWNLOAD="..."
MD5SUM="..."
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="danix"
EMAIL="danix@danix.xyz"
```
- Use `DOWNLOAD="UNSUPPORTED"` when no 32-bit source exists
- Use `DOWNLOAD_x86_64` / `MD5SUM_x86_64` for architecture-specific downloads
- Checksums must match the exact source archive
- `REQUIRES=""` if no SBo dependencies; list space-separated SBo names otherwise
- For packages originally authored by others (e.g. Nessus), preserve the
original `MAINTAINER` and `EMAIL` values
---
## `slack-desc`
- Exactly 11 lines in the `package-name: description` format
- First line: `package-name: package-name (short one-liner)`
- Lines 2–11: description; blank lines use `package-name:` with nothing after
- Do not include the ruler line in the committed file
---
## Tooling: sbo-maintainer-tools
Source: https://slackware.uk/~urchlay/repos/sbo-maintainer-tools
| Tool | Purpose |
|------|---------|
| `sbolint` | Lint `.SlackBuild`, `README`, `.info`, `slack-desc` |
| `sbopkglint` | Lint the built package |
| `sbofixinfo` | Auto-fix common `.info` file issues |
| `sbodl` | Download sources and verify `MD5SUM`/`SHA256SUM` from `.info` |
### Workflow per package
```bash
# 1. Fix any .info issues automatically
cd <package-name> && sbofixinfo
# 2. Download sources and verify checksums
# NOTE: when updating to a new version, sbodl will download the source but fail
# because the .info file still has the old (or placeholder) MD5SUM. In that case:
# a) compute the checksum manually: md5sum <source-file>
# b) update MD5SUM in the .info file
# c) run sbodl again — it should now report "md5sum matches OK"
cd <package-name> && sbodl
# 3. Lint the script and metadata
cd <package-name> && sbolint
# 4. Build the package
cd <package-name> && sudo bash <package-name>.SlackBuild
# 5. Lint the built package
cd <package-name> && sbopkglint
# 6. Remove symlinks created by sbodl before staging
# sbodl creates symlinks in the package directory pointing to downloaded sources.
# These must never be committed to git.
find . -type l -delete
# 7. Commit
git add <package-name>/
git commit -m'<package-name>: add version X.Y.Z'
```
---
## Git Hooks
Versioned source lives in `.extras/hooks/`. They are NOT auto-installed
(git ignores `.git/hooks/` only if `core.hooksPath` is unset; the user's
global `core.hooksPath` dispatches to `.git/hooks/<name>` when executable).
After a fresh clone, install them:
```bash
cp .extras/hooks/* .git/hooks/ && chmod 0755 .git/hooks/{pre,post}-commit
```
- `pre-commit` — runs `sbolint` on each changed package; aborts the commit on
any error. Also auto-removes staged source-archive symlinks and blocks
staged regular source archives (`*.tar.*`, `*.zip`, `*.deb`, etc.). Skip
with `SBOLINT=no git commit ...`.
- `post-commit` — for each added/updated `*.SlackBuild`, offers to build the
SBo submission tarball into `SBo/<package>.tar.gz`.
### `SBO_ARCHIVE` (non-interactive archive answer)
`post-commit` normally prompts on a TTY. To answer without one (agents,
scripts), set `SBO_ARCHIVE`:
- `SBO_ARCHIVE=yes git commit ...` — build the tarball, no prompt
- `SBO_ARCHIVE=no git commit ...` — skip, no prompt
- unset + TTY → interactive prompt; unset + no TTY → skip
---
## Commit Conventions
- One commit per package add/update
- Commit message format:
- Add: `<package-name>: add version X.Y.Z`
- Update: `<package-name>: update to X.Y.Z`
- Fix: `<package-name>: fix <short description>`
---
## Maintainer
danix — danix@danix.xyz
|