{"id":248644,"date":"2025-09-05T21:19:53","date_gmt":"2025-09-05T21:19:53","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/package-installator\/"},"modified":"2026-04-13T02:19:32","modified_gmt":"2026-04-13T02:19:32","slug":"package-installator","status":"publish","type":"plugin","link":"https:\/\/es-hn.wordpress.org\/plugins\/package-installator\/","author":22011295,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.1.2","stable_tag":"2.1.2","tested":"6.9.4","requires":"5.0","requires_php":"8.2","requires_plugins":null,"header_name":"Package Installator","header_author":"Tlloancy (in zusammenarbeit mit xAI)","header_description":"A plugin to manage system packages (e.g., php-xml) with a modern UI.","assets_banners_color":"217c85","last_updated":"2026-04-13 02:19:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":564,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"tlloancy","date":"2025-09-05 21:19:24"},"1.1.0":{"tag":"1.1.0","author":"tlloancy","date":"2025-12-11 15:02:42"},"1.2.0":{"tag":"1.2.0","author":"tlloancy","date":"2026-03-03 03:59:58"},"1.2.1":{"tag":"1.2.1","author":"tlloancy","date":"2026-03-03 05:35:31"},"1.3.0":{"tag":"1.3.0","author":"tlloancy","date":"2026-04-08 04:41:13"},"1.4.0":{"tag":"1.4.0","author":"tlloancy","date":"2026-04-08 23:53:42"},"2.0.0":{"tag":"2.0.0","author":"tlloancy","date":"2026-04-12 01:18:36"},"2.1.0":{"tag":"2.1.0","author":"tlloancy","date":"2026-04-12 15:50:53"},"2.1.2":{"tag":"2.1.2","author":"tlloancy","date":"2026-04-13 02:19:32"}},"upgrade_notice":{"1.1.0":"<p>Major update with translations, command logging, and safer execution mode. Backup your database before updating.<\/p>","1.0.0":"<p>Initial release. Configure SSH settings before managing packages. Ensure the SSH user has <code>sudo<\/code> privileges.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3356907,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.gif":{"filename":"banner-772x250.gif","revision":3356907,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0","1.2.1","1.3.0","1.4.0","2.0.0","2.1.0","2.1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3502038,"resolution":"1","location":"assets","locale":""},"screenshot-2.gif":{"filename":"screenshot-2.gif","revision":3502038,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3504555,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"<strong>Package Manager Interface<\/strong>: Searchable table with package status, actions, progress bars, expandable command logs, and SSH status indicator.","2":"<strong>SSH Settings<\/strong>: Configure SSH host, username, port, authentication type, with a connection status indicator and test button."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[260001,22989,59197,38959,247468],"plugin_category":[],"plugin_contributors":[232640],"plugin_business_model":[],"class_list":["post-248644","plugin","type-plugin","status-publish","hentry","plugin_tags-ansible","plugin_tags-debian","plugin_tags-docker","plugin_tags-ssh","plugin_tags-system-packages","plugin_contributors-tlloancy","plugin_committers-tlloancy"],"banners":{"banner":"https:\/\/ps.w.org\/package-installator\/assets\/banner-772x250.gif?rev=3356907","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/package-installator\/assets\/icon-256x256.gif?rev=3356907","icon_2x":"https:\/\/ps.w.org\/package-installator\/assets\/icon-256x256.gif?rev=3356907","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/package-installator\/assets\/screenshot-1.gif?rev=3502038","caption":"<strong>Package Manager Interface<\/strong>: Searchable table with package status, actions, progress bars, expandable command logs, and SSH status indicator."},{"src":"https:\/\/ps.w.org\/package-installator\/assets\/screenshot-2.gif?rev=3502038","caption":"<strong>SSH Settings<\/strong>: Configure SSH host, username, port, authentication type, with a connection status indicator and test button."},{"src":"https:\/\/ps.w.org\/package-installator\/assets\/screenshot-3.png?rev=3504555","caption":""}],"raw_content":"<!--section=description-->\n<p>Package Installator empowers WordPress administrators to manage system-level packages, such as PHP extensions, directly from the WordPress admin dashboard. It features a modern, React-based interface with a searchable table, animated progress bars, and detailed command output for installing and uninstalling packages via SSH.<\/p>\n\n<h3>Key Features<\/h3>\n\n<ul>\n<li><strong>Customizable Automation Catalog<\/strong>: Designed for full extensibility, the plugin allows anyone to <strong>fork<\/strong> our <a href=\"https:\/\/github.com\/elestranobaron\/wp-package-installator-playbooks\">Official Playbook Repository<\/a> to learn from its README how the <code>manifest.json<\/code> is parsed and how to structure custom <code>.yml<\/code> files, enabling you to define exactly which playbooks appear in your dashboard by simply linking your own repository.<\/li>\n<li><strong>Ansible Orchestrator (New)<\/strong>: Run complex playbooks in the background with real-time log streaming.<\/li>\n<li><strong>Docker Integration<\/strong>: List, start, stop, and restart containers securely.<\/li>\n<li><strong>Modern UI<\/strong>: React-based interface with live feedback and terminal-like consoles.<\/li>\n<li><strong>SSH Integration<\/strong>: Secure connections using private keys or passwords.\n<strong>Important Note<\/strong>: Currently compatible with all Linux distributions (Red Hat, Fedora, Arch, etc.) with tools like <code>yum<\/code>, <code>dnf<\/code>, and <code>pacman<\/code>.<\/li>\n<\/ul>\n\n<h3>Dependencies<\/h3>\n\n<p>Includes all dependencies: React, Axios, React-Select, phpseclib3.\nNo Composer or npm required.<\/p>\n\n<h3>\u26a0\ufe0f Avertissements de s\u00e9curit\u00e9 tr\u00e8s importants<\/h3>\n\n<ul>\n<li>Ce plugin ex\u00e9cute des commandes <strong>root<\/strong> via SSH depuis WordPress.<\/li>\n<li>Une vuln\u00e9rabilit\u00e9 (XSS, vol de session, compte admin compromis) pourrait permettre une prise de contr\u00f4le totale du serveur.<\/li>\n<li><strong>N'utilisez PAS en production sans<\/strong> :\n\n<ul>\n<li>HTTPS forc\u00e9<\/li>\n<li>2FA sur tous les comptes admin<\/li>\n<li>Restriction IP sur l'admin WP<\/li>\n<li>Liste blanche stricte des commandes autoris\u00e9es<\/li>\n<li>Sauvegardes r\u00e9guli\u00e8res (fichiers + base)<\/li>\n<\/ul><\/li>\n<li>Testez <strong>uniquement sur staging<\/strong> au d\u00e9but.<\/li>\n<\/ul>\n\n<h3>1.1.0 - December 2025<\/h3>\n\n<ul>\n<li>Full internationalization (i18n) support with French and English translations<\/li>\n<li>Command history logging with database table<\/li>\n<li>Non-interactive root command executor<\/li>\n<li>Improved session handling and security<\/li>\n<li>Updated for WordPress 6.9 compatibility<\/li>\n<\/ul>\n\n<h3>1.0.0<\/h3>\n\n<ul>\n<li>Initial release with React UI, SSH package management, and support for Debian-based systems.<\/li>\n<li>Features animated progress bars, expandable command output, and SSH status indicators.<\/li>\n<\/ul>\n\n<h3>Arbitrary Section<\/h3>\n\n<h3>Future Plans<\/h3>\n\n<ul>\n<li>Support for Red Hat, Fedora, Arch, and other Linux distributions.<\/li>\n<li>Enhanced error handling and user feedback.<\/li>\n<li>Real-time log streaming for long-running operations.<\/li>\n<li>Support for additional package managers (<code>yum<\/code>, <code>dnf<\/code>, <code>pacman<\/code>).<\/li>\n<\/ul>\n\n<h3>Contact<\/h3>\n\n<p>For contributions or issues, contact Tlloancy at [tlloancy@deter-mi.net].<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/wordpress-package-installator\/<\/code> or install it via the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Configure SSH credentials (host, username, port, private key, or password) in the \"SSH Settings\" submenu under \"Package Installator\".<\/li>\n<li>Navigate to the \"Package Installator\" menu to manage packages.<\/li>\n<\/ol>\n\n<h3>Permissions Setup<\/h3>\n\n<pre><code>`bash\n<\/code><\/pre>\n\n<p>sudo chown -R www-data:www-data \/var\/www\/html\/wordpress\/wp-content\/plugins\/wordpress-package-installator\nsudo chmod -R 755 \/var\/www\/html\/wordpress\/wp-content\/plugins\/wordpress-package-installator\n    `<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20is%20it%20only%20compatible%20with%20debian%3F\"><h3>Why is it only compatible with Debian?<\/h3><\/dt>\n<dd><p>The plugin uses <code>apt<\/code> for package management. Future updates will detect the Linux distribution and use appropriate tools (e.g., <code>yum<\/code>, <code>dnf<\/code>, <code>pacman<\/code>).<\/p><\/dd>\n<dt id=\"how%20do%20i%20configure%20ssh%3F\"><h3>How do I configure SSH?<\/h3><\/dt>\n<dd><p>In the \"SSH Settings\" submenu, enter your SSH host, username, port, and choose between private key or password authentication. Ensure the SSH user has <code>sudo<\/code> privileges for <code>apt<\/code>.<\/p><\/dd>\n<dt id=\"what%20if%20a%20package%20is%20already%20installed%3F\"><h3>What if a package is already installed?<\/h3><\/dt>\n<dd><p>The plugin uses <code>dpkg-query<\/code> to check package status and updates the UI accordingly. If a package is already installed, it will be marked as \"Install\u00e9\" with 100% progress.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20to%20use%3F\"><h3>Is it safe to use?<\/h3><\/dt>\n<dd><p>The plugin executes system commands via SSH. Secure your SSH credentials and test on a non-production server. Always back up your system before use.<\/p><\/dd>\n<dt id=\"can%20i%20add%20more%20packages%3F\"><h3>Can I add more packages?<\/h3><\/dt>\n<dd><p>Edit the <code>$packages<\/code> array in <code>includes\/ajax-handlers.php<\/code> to include additional packages relevant to your environment.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p><strong>Version 2.1.2 April 26<\/strong><\/p>\n\n<h3>\ud83d\ude80 Even Further Beyond<\/h3>\n\n<ul>\n<li><strong>The return of the Pingu<\/strong> : As Arch and Suse are now supported, it's a 99% cover of the distribs.<\/li>\n<li><strong>Use the Fork<\/strong> : Package installation system, now also use nohup like the rest.<\/li>\n<\/ul>\n\n<p><strong>Version 2.1.0 April 26<\/strong><\/p>\n\n<h3>\ud83d\ude80 Optimisations &amp; Performances<\/h3>\n\n<ul>\n<li><strong>Moteur SSH \"One-Shot\"<\/strong> : Fusion des commandes syst\u00e8me (CPU, RAM, Disque, Distro) en une seule session SSH. Gain de performance massif et r\u00e9duction de la charge sur le serveur distant.<\/li>\n<li><strong>Migration vers l'API REST<\/strong> : Remplacement du polling AJAX fragment\u00e9 par une route API REST centralis\u00e9e (<code>\/wp-json\/wpkginst\/v1\/full-status<\/code>).<\/li>\n<li><strong>Efficacit\u00e9 R\u00e9seau<\/strong> : R\u00e9duction de <strong>80%<\/strong> des requ\u00eates HTTP n\u00e9cessaires au rafra\u00eechissement du tableau de bord.<\/li>\n<\/ul>\n\n<h3>\ud83d\udee1\ufe0f S\u00e9curit\u00e9<\/h3>\n\n<ul>\n<li><strong>Architecture Double-Nonce<\/strong> : Impl\u00e9mentation d'un syst\u00e8me de jetons hybrides pour isoler les flux de donn\u00e9es (REST) des actions syst\u00e8me (AJAX).<\/li>\n<li><strong>Contr\u00f4le d'acc\u00e8s<\/strong> : Renforcement des <code>permission_callback<\/code> pour garantir l'\u00e9tanch\u00e9it\u00e9 des donn\u00e9es sensibles du serveur.<\/li>\n<\/ul>\n\n<h3>\ud83d\udcbb Interface &amp; React<\/h3>\n\n<ul>\n<li><strong>Synchronisation Atomique<\/strong> : Mise \u00e0 jour simultan\u00e9e de tous les composants de l'interface (Docker, Packages, Stats) pour une exp\u00e9rience utilisateur sans latence.<\/li>\n<li><strong>Clean Architecture<\/strong> : Refonte du cycle de vie React (<code>useEffect<\/code>) pour supprimer les appels redondants et optimiser la gestion de la m\u00e9moire.<\/li>\n<li><strong>Gestion d'erreurs<\/strong> : Am\u00e9lioration du feedback visuel en cas de perte de liaison avec l'API ou d'\u00e9chec de connexion SSH.<\/li>\n<\/ul>\n\n<p><strong>2.0.0 \u2013 April 2026<\/strong>\n* <strong>Major Milestone<\/strong>: Transition from a simple package manager to a full DevOps orchestrator.\n* <strong>New: Ansible Core<\/strong>: Integration of Ansible playbook execution.\n* <strong>Customizable Automation Catalog<\/strong>: Designed for full extensibility, the plugin allows anyone to <strong>fork<\/strong> our <a href=\"https:\/\/github.com\/elestranobaron\/wp-package-installator-playbooks\">Official Playbook Repository<\/a> to learn from its README how the <code>manifest.json<\/code> is parsed and how to structure custom <code>.yml<\/code> files, enabling you to define exactly which playbooks appear in your dashboard by simply linking your own repository.\n* <strong>New: Background Processing<\/strong>: Asynchronous execution of long-running tasks via SSH (nohup).\n* <strong>New: Real-time Streaming<\/strong>: Live log polling for Ansible and installations.\n* <strong>Improved: Security<\/strong>: Hardened nonce validation and strict path sanitization.\n* <strong>Refactoring<\/strong>: Complete rewrite of the AJAX polling logic to handle high-concurrency background tasks.<\/p>\n\n<h3>1.4.0<\/h3>\n\n<ul>\n<li><strong>New:<\/strong> \"Cockpit\" Dashboard featuring real-time system resource scanning.<\/li>\n<\/ul>\n\n<h3>1.3.0 \u2013 April 2026<\/h3>\n\n<ul>\n<li><strong>Collaboration<\/strong>: Security audit and refactoring co-authored with Gemini (Google AI).<\/li>\n<li><strong>Security<\/strong>: Hardened SQL queries and input sanitization to meet 2026 WordPress standards.<\/li>\n<li><strong>Docker Integration<\/strong>: Added ability to list, start, stop, and restart Docker containers via SSH.<\/li>\n<li><strong>System Control<\/strong>: Beyond apt packages, the plugin now acts as a lightweight container orchestrator.<\/li>\n<\/ul>\n\n<h3>1.2.1 \u2013 March 2026 (Terminal refresh fix + Site Health compatibility)<\/h3>\n\n<ul>\n<li>PHP session is now opened <strong>only<\/strong> on the Terminal and Log pages (via conditional check in <code>admin_init<\/code> hook)<\/li>\n<li><code>session_write_close()<\/code> is called systematically after every session usage (via <code>shutdown<\/code> hook + manual calls where needed)<\/li>\n<li>Terminal authentication now persists correctly across page refreshes without blocking REST API or loopback requests<\/li>\n<li>Fixed \"Access denied \u2013 Session expired or insufficient rights\" error when running commands after a refresh<\/li>\n<li>Removed global session lock \u2192 Critical issues in Site Health (active PHP session + REST API timeout) are resolved<\/li>\n<li>Co-authored-by: Grok &amp; User (we own the plot twist)<\/li>\n<\/ul>\n\n<p><strong>Note<\/strong>: After validating your WordPress password on the Terminal page, you remain logged in on refresh as long as the browser session cookie (PHPSESSID) is active.\n<strong>Version 1.2.0<\/strong> : refonte compl\u00e8te de la gestion des sessions PHP pour corriger les probl\u00e8mes Site Health (REST API timeout + session active d\u00e9tect\u00e9e).<\/p>\n\n<p><strong>Compatibilit\u00e9 actuelle<\/strong> : Debian\/Ubuntu (apt). Support futur pour d'autres distributions pr\u00e9vu.<\/p>","raw_excerpt":"A plugin to manage system packages (e.g., php-xml) with a modern React-based UI via SSH.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/248644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=248644"}],"author":[{"embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tlloancy"}],"wp:attachment":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=248644"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=248644"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=248644"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=248644"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=248644"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=248644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}