@porosys/pss
Version:
Porosys Server Setup (pss): General-purpose server setup and automation tool (including Netdata management)
154 lines (147 loc) âĸ 5.72 kB
text/typescript
import { execa } from 'execa';
import { input } from '@inquirer/prompts';
import { configChangeAlertDeps } from '../alerts/helpers/setup-config-change-alert/setup-config-change-alert.constant';
import { loadConfig } from '../config/config.helper';
import { netdataInstallDependencies } from './install/netdata-install.constant';
import { isDependencyCustom } from '../../types';
const uninstallScript = `
#!/bin/bash
sudo killall netdata
sudo wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh && sh /tmp/netdata-kickstart.sh --uninstall --non-interactive
sudo systemctl stop netdata
sudo systemctl disable netdata
sudo systemctl unmask netdata
sudo rm -rf /lib/systemd/system/netdata.service
sudo rm -rf /lib/systemd/system/netdata-updater.service
sudo rm -rf /lib/systemd/system/netdata-updater.timer
sudo rm -rf /etc/logrotate.d/netdata
sudo /usr/libexec/netdata/netdata-uninstaller.sh --yes --env /etc/netdata/.environment
sudo apt-get --purge remove netdata -y
sudo rm /usr/lib/netdata* -R
sudo rm /var/lib/apt/lists/packagecloud.io_netdata_* -R
sudo rm /etc/init.d/netdata
sudo rm /etc/rc0.d/K01netdata
sudo rm /etc/rc1.d/K01netdata
sudo rm /etc/rc2.d/K01netdata
sudo rm /etc/rc3.d/K01netdata
sudo rm /etc/rc4.d/K01netdata
sudo rm /etc/rc5.d/K01netdata
sudo rm /etc/rc6.d/K01netdata
sudo rm /etc/rc0.d/S01netdata
sudo rm /etc/rc1.d/S01netdata
sudo rm /etc/rc2.d/S01netdata
sudo rm /etc/rc3.d/S01netdata
sudo rm /etc/rc4.d/S01netdata
sudo rm /etc/rc5.d/S01netdata
sudo rm /etc/rc6.d/S01netdata
sudo rm /usr/sbin/netdata
sudo rm -rf /var/lib/dpkg/info/netdata* -R
sudo rm -rf /var/lib/apt/lists/packagecloud.io_netdata* -R
sudo rm -rf /usr/share/netdata -R
sudo rm -rf /usr/share/doc/netdata* -R
sudo rm /usr/share/lintian/overrides/netdata*
sudo rm /usr/share/man/man1/netdata.1.gz
sudo rm /var/lib/systemd/deb-systemd-helper-enabled/netdata.service.dsh-also
sudo rm /var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/netdata.service
sudo rm /var/lib/systemd/deb-systemd-helper-masked/netdata.service
sudo rm -rf /usr/lib/netdata -R
sudo rm -rf /etc/rc2.d/S01netdata -R
sudo rm -rf /etc/rc3.d/S01netdata -R
sudo rm -rf /etc/rc4.d/S01netdata -R
sudo rm -rf /etc/rc5.d/S01netdata -R
sudo rm -rf /etc/default/netdata -R
sudo rm -rf /etc/apt/sources.list.d/netdata.list
sudo rm -rf /etc/apt/sources.list.d/netdata-edge.list
sudo rm -rf /etc/apt/trusted.gpg.d/netdata-archive-keyring.gpg
sudo rm -rf /etc/apt/trusted.gpg.d/netdata-edge-archive-keyring.gpg
sudo rm -rf /etc/apt/trusted.gpg.d/netdata-repoconfig-archive-keyring.gpg
sudo rm -rf /SM_DATA/sm_virt_machines/media/netdata-uninstaller.sh
sudo rm -rf /SM_DATA/sm_virt_machines/media/netdata*
sudo rm -rf /SM_DATA/working/netdata-kickstart*
sudo rm -rf /usr/share/lintian/overrides/netdata
sudo rm -rf /var/cache/apt/archives/netdata*
sudo rm -rf /opt/netdata*
sudo rm -rf /etc/cron.daily/netdata-updater
sudo rm -rf /usr/libexec/netdata -R
sudo rm -rf /var/log/netdata -R
sudo rm -rf /var/cache/netdata -R
sudo rm -rf /var/lib/netdata -R
sudo rm -rf /etc/netdata -R
sudo rm -rf /opt/netdata -R
systemctl daemon-reload
`;
export const netdataUninstallCommand = async () => {
console.log('đ§š Running Netdata uninstall script...');
try {
await execa(`bash -c '${uninstallScript.replace(/'/g, "'\\''")}'`, {
shell: true,
stdio: 'inherit',
});
console.log('â
Netdata uninstall script completed.');
} catch (err) {
console.error('â Failed to run Netdata uninstall script:', err);
}
// remove cron jobs that are related to health scripts
try {
const config = await loadConfig();
if (config?.healthScriptsPath) {
const { stdout: currentCrontab } = await execa('crontab', ['-l']);
const filteredCrontab =
currentCrontab
.split('\n')
.filter((line) => !line.includes(config.healthScriptsPath!))
.join('\n') + '\n'; // Ensure trailing newline
await execa('crontab', ['-'], { input: filteredCrontab });
console.log(
`â
Removed cron jobs containing: ${config.healthScriptsPath}`,
);
}
} catch (err) {
if (
typeof err === 'object' &&
err &&
'stderr' in err &&
typeof (err as any).stderr === 'string' &&
(err as any).stderr.includes('no crontab for')
) {
console.log('âšī¸ No crontab set for current user.');
} else {
console.error('â Failed to update crontab:', err);
}
}
// uninstall config change alert dependencies
const dependenciesToUninstall = [
...configChangeAlertDeps,
...netdataInstallDependencies,
];
for (const dep of dependenciesToUninstall) {
if (isDependencyCustom(dep)) {
const shouldUninstallInput = await input({
message: `Do you want to uninstall ${dep.binary} (custom uninstall)? (y/N): `,
});
const shouldUninstall = /^y(es)?$/i.test(shouldUninstallInput.trim());
if (shouldUninstall) {
await dep.uninstall();
} else {
console.log(`âšī¸ Skipped uninstalling ${dep.binary}`);
}
} else {
const answer = await input({
message: `Do you want to uninstall ${dep.binary} (apt package: ${dep.packageName})? (y/N): `,
});
if (/^y(es)?$/i.test(answer.trim())) {
try {
await execa(`sudo apt-get --purge remove -y ${dep.packageName}`, {
shell: true,
stdio: 'inherit',
});
console.log(`â
Uninstalled ${dep.packageName}`);
} catch (err) {
console.error(`â Failed to uninstall ${dep.packageName}:`, err);
}
} else {
console.log(`âšī¸ Skipped uninstalling ${dep.packageName}`);
}
}
}
};