Бэкап fail2ban и своих geo-файлов 3x-ui
CI / test (push) Successful in 1m48s

- новая категория fail2ban: jail.local, jail.d (в т.ч. 3x-ipl.local),
  IP-лимит 3x-ui (filter.d/action.d/3x-ipl.conf), свои *.local;
  при восстановлении создаются логи 3xipl*.log, без которых jail не поднимается
- xui: свои *.dat из /usr/local/x-ui/bin (ipcheck, discord-*) — на них ссылается
  роутинг; штатные geo-файлы релиза не бэкапятся
- recipe 3x-ui больше не очищает /usr/local/x-ui и не стирает восстановленные файлы
- маски (*, ?) в paths и keep_binaries каталога
- provision ставит nftables вместе с fail2ban
- .gitattributes: LF во всех файлах

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Opus 5.5 committed 2026-10-17 14:24:21 +03:00
1 parent 83832fc734
commit cbd3cde01d
8 files changed
+503 -400

No files matched your search

+16 -2
View File
@@ -155,7 +155,7 @@ func (c *collector) collectSpec(s catalog.Spec) (*manifest.Category, error) {
RestoreAfter: s.RestoreAfter,
}
skip := archive.NewMatcher(c.cat.Exclude, s.Exclude)
for _, p := range s.Paths {
for _, p := range expandPaths(s.Paths) {
if !sysx.Exists(p) {
continue
}
@@ -177,7 +177,7 @@ func (c *collector) collectSpec(s catalog.Spec) (*manifest.Category, error) {
return nil, nil
}
for _, b := range s.KeepBinaries {
for _, b := range expandPaths(s.KeepBinaries) {
if sysx.Exists(b) {
mc.Binaries = append(mc.Binaries, b)
c.add(manifest.MainPart, binItem(s.Name, b))
@@ -236,6 +236,20 @@ func (c *collector) cmdDump(cat string, d catalog.CmdDump, mc *manifest.Category
return nil
}
// expandPaths раскрывает маски (*, ?, [...]) в путях категории; пути без масок — как есть.
func expandPaths(paths []string) []string {
var out []string
for _, p := range paths {
if !strings.ContainsAny(p, "*?[") {
out = append(out, p)
continue
}
m, _ := filepath.Glob(p)
out = append(out, m...)
}
return out
}
func anyExists(paths []string) bool {
for _, p := range paths {
if sysx.Exists(p) {