| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- # by DSR! from https://github.com/xchwarze/wifi-pineapple-cloner
- error_reporting(E_ALL);
- if (!isset($_SERVER['argv']) && !isset($argv)) {
- echo "Please enable the register_argc_argv directive in your php.ini\n";
- exit(1);
- } elseif (!isset($argv)) {
- $argv = $_SERVER['argv'];
- }
- if (!isset($argv[1])) {
- echo "Run with \"php opkg-parser.php [PATH] [DIFF_SEPARATOR]\"\n";
- echo " PATH -> path to opkg status file\n";
- echo " DIFF_SEPARATOR -> use /n separator\n";
- exit(1);
- }
- function processFile($filePath, $showEssentials, $showDependencies)
- {
- $block = [];
- $packagesData = [];
- foreach (file($filePath) as $line) {
- $clean = trim($line);
- if (empty($clean)) {
- if (count($block) > 0) {
- $packagesData[] = $block;
- $block = [];
- }
- } else {
- $parts = explode(': ', $clean);
- if (count($parts) == 2) {
- $block[ trim($parts[0]) ] = trim($parts[1]);
- }
- }
- }
- if (count($block) > 0) {
- $packagesData[] = $block;
- }
- return cleanInstallData($packagesData, $showEssentials, $showDependencies);
- }
- function cleanInstallData($output, $showEssentials, $showDependencies)
- {
- $packages = [];
- $depends = [];
- // generate packages and depends array
- foreach ($output as $data) {
- if (
- !isset($data['Auto-Installed']) &&
- isValidPackage($data['Package'])
- ) {
- if (
- !isset($data['Essential']) ||
- (
- isset($data['Essential']) && $showEssentials
- )
- ) {
- $packages[] = $data['Package'];
- if (isset($data['Depends'])) {
- foreach (explode(',', $data['Depends']) as $dependency) {
- $dependency = trim($dependency);
- if (!in_array($dependency, $depends)) {
- $depends[] = $dependency;
- }
- }
- }
- }
- }
- }
- // show all installed packages
- if ($showDependencies) {
- sort($packages);
- return $packages;
- }
- // show only target packages
- $targetPackages = [];
- foreach ($packages as $package) {
- if (!in_array($package, $depends)) {
- $targetPackages[] = $package;
- }
- }
- //var_dump($depends);
- sort($targetPackages);
- return $targetPackages;
- }
- function isValidPackage($name)
- {
- $packageBlacklist = [
- // hak5 packages (based on mk6)
- 'pineap',
- 'aircrack-ng-hak5',
- 'cc-client',
- 'libwifi',
- 'resetssids',
- 'http_sniffer',
- 'log_daemon',
- // based on hardware
- 'kmod-ath',
- 'kmod-ath9k',
- 'kmod-ath9k-htc',
- 'mt7601u-firmware',
- 'uboot-envtools',
- 'ubi-utils',
- ];
- // only kmod
- //return !in_array($name, $packageBlacklist) && strpos($name, 'kmod-') !== false;
- // not show kmod
- //return !in_array($name, $packageBlacklist) && strpos($name, 'kmod-') === false;
- // all
- return !in_array($name, $packageBlacklist);
- }
- echo "\nopkg status parser - by DSR!";
- echo "\n---------------------------------------\n\n";
- $printSep = (isset($argv[2]) && filter_var($argv[2], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) ? "\n" : ' ';
- $statusFile = $argv[1];
- if (!file_exists($statusFile)) {
- echo "[!!!] File not found: \"($statusFile)\"\n";
- return 0;
- }
- $statusData = processFile($statusFile, false, false);
- echo "======== Packages (" . count($statusData) . ") ========\n";
- echo implode($printSep, $statusData);
- echo "\n\n\n";
- $statusDataEssentials = processFile($statusFile, true, false);
- $essentialPackages = [];
- foreach ($statusDataEssentials as $key) {
- if (!in_array($key, $statusData)) {
- $essentialPackages[] = $key;
- }
- }
- echo "======== Essentials Packages (" . count($essentialPackages) . ") ========\n";
- echo implode($printSep, $essentialPackages);
- echo "\n";
|