Ensure reliable /etc/hosts handling for EasyEngine in containerized environments
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 42/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- docker, php
- Ambito
- infrastructure
Direzione di ricerca
Inizia in src/helper/site-utils.php, in remove_etc_hosts_entry, e verifica come viene letto e aggiornato /etc/hosts. Verifica il comportamento sia in un contenitore Docker con un /etc/hosts montato sia in un ambiente a livello di host, inclusi i fallimenti di lettura o scrittura. Il lavoro è completato quando il comportamento di rimozione esistente rimane invariato e le operazioni nei contenitori non falliscono più silenziosamente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description:
This change ensures that EasyEngine can reliably handle /etc/hosts entries when deployed in Docker or containerized environments, without affecting functionality on host systems.
Context:
When EasyEngine is run inside a container, its attempt to update the host system's /etc/hosts file via a mounted volume may silently fail due to permission or compatibility issues in the Filesystem()->dumpFile() method.
/**
* Removes entry of the site from /etc/hosts
*
* @param string $site_url site name.
*
*/
function remove_etc_hosts_entry( $site_url ) {
$fs = new Filesystem();
$hosts_file = file_get_contents( '/etc/hosts' );
$site_url_escaped = preg_replace( '/\./', '\.', $site_url );
$hosts_file_new = preg_replace( "/127\.0\.0\.1\s+$site_url_escaped\n/", '', $hosts_file );
$fs->dumpFile( '/etc/hosts', $hosts_file_new );
}
Objective:
Not to change existing behavior, but to ensure consistent and reliable operation of the remove_etc_hosts_entry function across environments, especially in container deployments.
Modifications:
Refactored remove_etc_hosts_entry in src/helper/site-utils.php to use PHP's native file I/O operations with added safety and compatibility:
- Replaced
Filesystem()->dumpFile()withfile_put_contents()andfile_get_contents(). - Added
LOCK_EXto ensure atomic writes. - Used
stream_context_createwith'file' => ['privileged' => true]to improve write permissions handling in volume-mounted/etc/hosts. - Implemented
preg_quote()to safely match hostnames. - Included explicit error handling for file read/write failures.
Benefits:
- Container Compatibility: Improves EasyEngine’s robustness when run in Docker or similar environments.
- Backward-Safe: Function continues to work without modification on traditional (host-level) deployments.
- Resilience: Adds clear error messages in case of failure, reducing silent breakages.
Testing:
-
Verified successful read/write operations to
/etc/hostsin:- Docker container with volume-mounted
/etc/hosts - Host-level execution without container
- Docker container with volume-mounted
Updated Function:
/**
* Removes entry of the site from /etc/hosts
*
* @param string $site_url site name.
*
*/
function remove_etc_hosts_entry($site_url) {
$hosts_file = @file_get_contents('/etc/hosts');
if ($hosts_file === false) {
throw new Exception("Failed to read /etc/hosts");
}
$site_url_escaped = preg_quote($site_url, '/');
$hosts_file_new = preg_replace("/127\.0\.0\.1\s+$site_url_escaped\n/", '', $hosts_file);
$context = stream_context_create([
'file' => ['privileged' => true]
]);
$result = file_put_contents('/etc/hosts', $hosts_file_new, LOCK_EX, $context);
if ($result === false) {
throw new Exception("Failed to update /etc/hosts");
}
}
- Lingua principale
- PHP
- Stelle
- 18
- Fork
- 27
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di EasyEngine/site-command
-
Site Update Custom SSL Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
EasyEngine/site-command#395 · 2 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
EasyEngine/site-command#377 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
EasyEngine/site-command#375 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 20/100
EasyEngine/site-command#373 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
EasyEngine/site-command#330 ·
Tutte le issue di EasyEngine/site-command
Issue simili
-
[Chore] Keep one viget-block-generator skill and replicate it, instead of four tracked copies Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
hector-jewell/food-delivery-system-for-restaurant-using-php#1311 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
Sylius/SyliusGridBundle#501 ·