raijin-server 0.2.2__py3-none-any.whl → 0.2.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
raijin_server/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  """Pacote principal do CLI Raijin Server."""
2
2
 
3
- __version__ = "0.2.2"
3
+ __version__ = "0.2.3"
4
4
 
5
5
  __all__ = ["__version__"]
raijin_server/utils.py CHANGED
@@ -203,8 +203,64 @@ def ensure_tool(name: str, ctx: ExecutionContext, install_hint: str = "") -> Non
203
203
  raise typer.Exit(code=1)
204
204
 
205
205
 
206
+ def _fix_broken_apt_sources(ctx: ExecutionContext) -> None:
207
+ """Corrige repositórios APT quebrados (mirrors brasileiros problemáticos)."""
208
+ if ctx.dry_run:
209
+ typer.echo("[dry-run] Verificando/corrigindo repositórios APT...")
210
+ return
211
+
212
+ sources_list = Path("/etc/apt/sources.list")
213
+
214
+ # Detecta se está usando mirror brasileiro quebrado
215
+ needs_fix = False
216
+ if sources_list.exists():
217
+ content = sources_list.read_text()
218
+ if "br.archive.ubuntu.com" in content or "br.ports.ubuntu.com" in content:
219
+ needs_fix = True
220
+
221
+ if not needs_fix:
222
+ return
223
+
224
+ typer.secho(
225
+ "⚠ Detectado mirror brasileiro possivelmente quebrado. Corrigindo...",
226
+ fg=typer.colors.YELLOW,
227
+ )
228
+ logger.warning("Corrigindo mirror brasileiro quebrado em sources.list")
229
+
230
+ # Backup do original
231
+ backup = sources_list.with_suffix(".list.bak")
232
+ if not backup.exists():
233
+ import shutil as sh
234
+ sh.copy2(sources_list, backup)
235
+
236
+ # Substitui mirror brasileiro pelo principal
237
+ new_content = content.replace("br.archive.ubuntu.com", "archive.ubuntu.com")
238
+ new_content = new_content.replace("br.ports.ubuntu.com", "ports.ubuntu.com")
239
+ sources_list.write_text(new_content)
240
+
241
+ typer.secho("✓ Repositórios corrigidos (backup em sources.list.bak)", fg=typer.colors.GREEN)
242
+
243
+
206
244
  def apt_update(ctx: ExecutionContext) -> None:
207
- run_cmd(["apt-get", "update"], ctx)
245
+ """Executa apt-get update, corrigindo repositórios quebrados se necessário."""
246
+ _fix_broken_apt_sources(ctx)
247
+
248
+ # Tenta o update; se falhar com erro de Release, tenta corrigir
249
+ try:
250
+ run_cmd(["apt-get", "update"], ctx, retries=2)
251
+ except Exception as e:
252
+ error_msg = str(e).lower()
253
+ if "release" in error_msg or "no longer has" in error_msg:
254
+ typer.secho(
255
+ "⚠ Erro de repositório detectado. Tentando fallback...",
256
+ fg=typer.colors.YELLOW,
257
+ )
258
+ # Força correção e tenta novamente
259
+ ctx_temp = ExecutionContext(dry_run=False)
260
+ _fix_broken_apt_sources(ctx_temp)
261
+ run_cmd(["apt-get", "update"], ctx)
262
+ else:
263
+ raise
208
264
 
209
265
 
210
266
  def apt_install(packages: Iterable[str], ctx: ExecutionContext) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: CLI para automacao de setup e hardening de servidores Ubuntu Server.
5
5
  Home-page: https://example.com/raijin-server
6
6
  Author: Equipe Raijin
@@ -1,8 +1,8 @@
1
- raijin_server/__init__.py,sha256=Hab-ShCbCccDeV0rMro8pi6eZ53o1rnzj1_CvAx-3IY,94
1
+ raijin_server/__init__.py,sha256=AKDS9uS_9UXF-3BZWSJvcQdgvkhbsxMs1o-P7R5xBE4,94
2
2
  raijin_server/cli.py,sha256=ZgaSkXwXaND7HHeySjIn4GEmTVTqUDttUfqXJ9yZV1E,16772
3
3
  raijin_server/config.py,sha256=Dta2CS1d6RgNiQ84P6dTXk98boFrjzuvhs_fCdlm0I4,4810
4
4
  raijin_server/healthchecks.py,sha256=-mQq-dGZ2id16wvPmiTPjDHw14PBwz_i8AXi307V38k,12411
5
- raijin_server/utils.py,sha256=zqwbI48MwEI9YPOF2dtFYgjTlPxeJ6k1EWrL8xQbo7o,9401
5
+ raijin_server/utils.py,sha256=oQM-NGL_kmlNZejFvxXk85MI_WkcxNfwaw5LeAsKUFU,11476
6
6
  raijin_server/validators.py,sha256=qOZMHgwjHogVf17UPlxfUCpQd9qAGQW7tycd8mUvnEs,9404
7
7
  raijin_server/modules/__init__.py,sha256=e_IbkhLGPcF8to9QUmIESP6fpcTOYcIhaXLKIvqRJMY,920
8
8
  raijin_server/modules/apokolips_demo.py,sha256=gMUpYNaO0V20KoNa4ljyA1W9HJbY__O9AEO64NuWGhE,12365
@@ -36,9 +36,9 @@ raijin_server/scripts/checklist.sh,sha256=j6E0Kmk1EfjLvKK1VpCqzXJAXI_7Bm67LK4ndy
36
36
  raijin_server/scripts/install.sh,sha256=IZOTujOSGmKpznwgL59picsQNVzYkai6FtfFS3Klf34,3908
37
37
  raijin_server/scripts/log_size_metric.sh,sha256=rC2Ck4xnYVJV4Qymu24-indC8bkzfZs4FBqqxGPRl1I,1143
38
38
  raijin_server/scripts/pre-deploy-check.sh,sha256=naPUgKjnKgsh-eGDH2623C7zcr9VjDEw1H0lfYaXW8c,4853
39
- raijin_server-0.2.2.dist-info/licenses/LICENSE,sha256=kJsMCjOiRZE0AQNtxWqBa32z9kMAaF4EUxyHj3hKaJo,1105
40
- raijin_server-0.2.2.dist-info/METADATA,sha256=vQdAqxd4Ycmm6QQDfIg_Sx1Ldvm7MlsVz2WcFSpIOnE,16941
41
- raijin_server-0.2.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
42
- raijin_server-0.2.2.dist-info/entry_points.txt,sha256=3ZvxDX4pvcjkIRsXAJ69wIfVmKa78LKo-C3QhqN2KVM,56
43
- raijin_server-0.2.2.dist-info/top_level.txt,sha256=Yz1xneCRtsZOzbPIcTAcrSxd-1p80pohMXYAZ74dpok,14
44
- raijin_server-0.2.2.dist-info/RECORD,,
39
+ raijin_server-0.2.3.dist-info/licenses/LICENSE,sha256=kJsMCjOiRZE0AQNtxWqBa32z9kMAaF4EUxyHj3hKaJo,1105
40
+ raijin_server-0.2.3.dist-info/METADATA,sha256=Bh7AicqZXP3kLYhHxgf1uB3R4PGI4hcC8AYaDAaUg6A,16941
41
+ raijin_server-0.2.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
42
+ raijin_server-0.2.3.dist-info/entry_points.txt,sha256=3ZvxDX4pvcjkIRsXAJ69wIfVmKa78LKo-C3QhqN2KVM,56
43
+ raijin_server-0.2.3.dist-info/top_level.txt,sha256=Yz1xneCRtsZOzbPIcTAcrSxd-1p80pohMXYAZ74dpok,14
44
+ raijin_server-0.2.3.dist-info/RECORD,,