God says:
You do not have a valid subscription for this server.
Why do we have this?
Honestly the idiot who comes up with this idea must be fired immediately.
Individual won't be able to afford the cheapest plan;
And enterprises would always pay for supports.
Search res.data.status.toLowerCase()
and edit the expression:
if (
res === null ||
res === undefined ||
!res ||
// res.data.status.toLowerCase() !== 'active' // FROM
res.data.status.toLowerCase() === 'fucked' // TO
// ^ ^^^^^^
) {
// More
}/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
Here is a global APT hook that is triggered on post-* package stage, as APT don't have per-package hook:
#!/usr/bin/env sh
echo 'apt.conf.d/99nopvesub: Removing "no valid subscription" popup...'
sed -i "s|res.data.status.toLowerCase() !== 'active'|res.data.status.toLowerCase() === 'fucked'|" '/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js'/usr/local/bin/hook-nopvesub.sh
Yup, sed can use any characters more than /.
just RTFM or tldr
DPkg::Post-Invoke {"/usr/local/bin/hook-nopvesub.sh"};/etc/apt/apt.conf.d/99nopvesub
Last step: chmod +x /usr/local/bin/hook-nopvesub.sh
And you are good to go. I would use this instead btw
sed --in-place --posix \
's|function(e,t){e=e.result;null!=e&&e&&"active"===e.data.status.toLowerCase()?i():Ext.Msg.show({title:gettext("No valid subscription"),icon:Ext.Msg.WARNING,message:Proxmox.Utils.getNoSubKeyHtml(e.data.url),buttons:Ext.Msg.OK,callback:function(e){"ok"===e&&i()}})}|i()|' \
'/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.min.js'
ln -sf /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.min.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
...Is that all?
Access WebUI with your smart phone (you really do that?), the annoying popup is still there.
But, this time, it's not that easy to get rid of it. It's from a WASM file, /yew-mobile/js/pve-yew-mobile-gui_bg.wasm
Since it's difficult to read and edit the IR codes, you'd better get the source code and then rebuild it.
Again, Proxmox VE is mostly FREE and open source, the corresponding source code is here:
pub fn subscription_is_active(result: Option<&Result<Value, Error>>) -> bool {
match result {
Some(Ok(data)) => {
data["status"].as_str().map(|s| s.to_lowercase()).as_deref() == Some("active")
}
_ => false,
}
}proxmox-yew-comp/src/subscription_alert.rs
But you are not going to recompile the whole Proxmox component stuffs, are you?
Finding another way out...
Damn it! Can't modify the frontend? Then just sabotage the backend!
We have 2 choices...
- Rewrite response to provide required kv pairs.
- Generate a looks like valid, but won't work licence.
- Smash your server with hammer.
For option 1 this has been very easy, here's the patch:
diff (Selection broken, bug, use Copy button)
--- /usr/share/perl5/PVE/API2/Subscription.pm
+++ /usr/share/perl5/PVE/API2/Subscription.pm
@@ -197,6 +197,21 @@
},
},
code => sub {
+ syslog('info', 'Hijacking subscription info');
+ my %info = (
+ 'nextduedate' => '6202-10-24',
+ 'serverid' => '0123456789ABCDEF0123456789ABCDEF',
+ 'key' => 'pve8p-0000000000',
+ 'level' => 'p',
+ 'sockets' => '8',
+ 'checktime' => time,
+ 'regdate' => '2026-06-04 00:00:00',
+ 'url' => 'https://example.com',
+ 'status' => 'active',
+ 'productname' => 'Proxmox uwu VE');
+ my $inforef = \%info;
+ return $inforef;
+
my ($param) = @_;
my $node = $param->{node};option1.patch