pve-common.git
2 months agocgroup: cpu quota: fix resetting period length for v1
Oguz Bektas [Thu, 21 Oct 2021 14:36:19 +0000 (16:36 +0200)]
cgroup: cpu quota: fix resetting period length for v1

The CFS period µs value for cgroup v1 needs to be >= 1 µs and <= 1 s,
so resetting it to -1 (like we cab do for the quota) cannot work.

So, when the period is passed as undefined it should be set to 100ms,
i.e., the actual default value:

>  - cpu.cfs_quota_us: the total available run-time within a period (in microseconds)
>  - cpu.cfs_period_us: the length of a period (in microseconds)
>  - cpu.stat: exports throttling statistics [explained further below]
>
> The default values are:
>     cpu.cfs_period_us=100ms
>     cpu.cfs_quota=-1
-- https://www.kernel.org/doc/html/v5.14/scheduler/sched-bwc.html

This issue was there since initial addition in its original repo,
pve-container commit 26b645e2.

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
 [ Thomas: add more information, adapt commit subject to reduce
   redundancy, link to new RsT based doc page with a fixed version ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 months agosafe_read_from: bump default size limit to 1 MiB to match pmxcfs
Thomas Lamprecht [Thu, 21 Oct 2021 09:40:23 +0000 (11:40 +0200)]
safe_read_from: bump default size limit to 1 MiB to match pmxcfs

Done in a similar spirit as commit 8fb28ab914a9a9

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 months agobump version to 7.0-11
Thomas Lamprecht [Tue, 19 Oct 2021 07:35:45 +0000 (09:35 +0200)]
bump version to 7.0-11

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 months agotools: getxattr: document how to get actual argument size
Thomas Lamprecht [Tue, 19 Oct 2021 07:33:37 +0000 (09:33 +0200)]
tools: getxattr: document how to get actual argument size

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 months agotools: getxattr: drop debug statement
Thomas Lamprecht [Tue, 19 Oct 2021 07:24:53 +0000 (09:24 +0200)]
tools: getxattr: drop debug statement

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 months agotools: add set/get xattr methods
Thomas Lamprecht [Tue, 19 Oct 2021 06:18:00 +0000 (08:18 +0200)]
tools: add set/get xattr methods

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 months agosyscalls: use new constants available in bullseyes perl
Thomas Lamprecht [Mon, 18 Oct 2021 08:24:14 +0000 (10:24 +0200)]
syscalls: use new constants available in bullseyes perl

All previously unkown are now defined, so drop the literal numbers

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 months agosysfs tools: indentation + text-width fixes
Thomas Lamprecht [Mon, 18 Oct 2021 08:08:42 +0000 (10:08 +0200)]
sysfs tools: indentation + text-width fixes

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agotempfile: add some comment
Thomas Lamprecht [Fri, 15 Oct 2021 09:25:09 +0000 (11:25 +0200)]
tempfile: add some comment

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agotempfile: improve base path selection
Thomas Lamprecht [Fri, 15 Oct 2021 09:23:22 +0000 (11:23 +0200)]
tempfile: improve base path selection

The path is not /that/ relevant privacy wise as we try to use
`O_TMPFILE` anyway and defaulting to /run generates trouble for calls
from non-root processes.

Try the user session run dir first, then /run if root or /tmp else.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agotools: sendmail: code cleanup, factor out some noise
Thomas Lamprecht [Fri, 15 Oct 2021 09:21:17 +0000 (11:21 +0200)]
tools: sendmail: code cleanup, factor out some noise

Reduce by a few lines in general and move out checking the address to
avoid to much (repeated) inline noise..

no semantic change intended.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agotools: fix some perlcritic lints
Thomas Lamprecht [Fri, 15 Oct 2021 08:36:09 +0000 (10:36 +0200)]
tools: fix some perlcritic lints

- Two-argument "open" used at line 462, column 3.  See page 207 of
  PBP. (Severity: 5)
- Subroutine "new" called using indirect syntax at line 487, column
  15. See page 349 of PBP.  (Severity: 5)
- Bareword file handle opened at line 1533, column 5. See pages 202,
  204 of PBP.  (Severity: 5)

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agobump version to 7.0-10
Thomas Lamprecht [Wed, 29 Sep 2021 08:01:11 +0000 (10:01 +0200)]
bump version to 7.0-10

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agoinotify: network: improve "allow-hotplug" & "auto" interaction
Thomas Lamprecht [Fri, 24 Sep 2021 10:29:46 +0000 (12:29 +0200)]
inotify: network: improve "allow-hotplug" & "auto" interaction

commit c86cfb8bbd9b505d06b580582297fa670561437b dropped allow-hotplug
from the primary interfaces file completely on write, but that breaks
setups that come from plain Debian.

Instead, as stop-gap measurement, transform "allow-hotplug" to auto
in the PVE controlled config.

That avoids conflict and improves installing PVE on top of plain
Debian, as the interface still comes up after the first reboot.

But it is not ideal auto is not the same as hotplug, so we need to
also track that difference in the future, but that needs some
adaptions in the API too (change autostart from boolean to
string+enum or so=

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agosubscription: switch verification domain over to shop.proxmox.com
Thomas Lamprecht [Mon, 27 Sep 2021 06:57:10 +0000 (08:57 +0200)]
subscription: switch verification domain over to shop.proxmox.com

With the merger the shop got moved from shop.maurer-it to
shop.proxmox.com, while we transparently redirect we also want to
stop doing that in a few years, so use new domain.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agoinotify: network: detect "allow-auto" as "auto" synonym
Thomas Lamprecht [Fri, 24 Sep 2021 09:52:54 +0000 (11:52 +0200)]
inotify: network: detect "allow-auto" as "auto" synonym

> Note that "allow-auto" and "auto" are synonyms.
-- man 5 interfaces

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agoinotify: network: code+whitespace+indentation cleanup
Thomas Lamprecht [Fri, 24 Sep 2021 09:51:52 +0000 (11:51 +0200)]
inotify: network: code+whitespace+indentation cleanup

no semantic change intended

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agotest: import JSON for quicker debugging
Thomas Lamprecht [Fri, 24 Sep 2021 10:36:53 +0000 (12:36 +0200)]
test: import JSON for quicker debugging

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agonet: get local ip: catch any error from get_reachable_networks
Thomas Lamprecht [Mon, 20 Sep 2021 14:52:35 +0000 (16:52 +0200)]
net: get local ip: catch any error from get_reachable_networks

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agotools: fix typo in comment
Thomas Lamprecht [Mon, 20 Sep 2021 14:52:03 +0000 (16:52 +0200)]
tools: fix typo in comment

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agobump version to 7.0-9
Thomas Lamprecht [Sat, 18 Sep 2021 12:51:51 +0000 (14:51 +0200)]
bump version to 7.0-9

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agonet: add get_local_ip helper
Thomas Lamprecht [Sat, 18 Sep 2021 12:38:59 +0000 (14:38 +0200)]
net: add get_local_ip helper

Sometimes we need to have a fallback for gai (get_ip_from_hostname)
but cannot yet rely on configured networks (get_reachable_networks)
from kernel POV (those may not have been configured yet, e.g., on
boot), so the ones configured in /etc/network/interfaces would be
nice too then, as they're the ones that will get configured soon
anyway on boot.

Add a new helper that takes in all those sources and allows to return
a single (first found) or all of those addresses.

Still prioritize the address we get from getaddrinfo, as there the
admin has control through /etc/hosts, DNS and gai.conf and treat the
remaining ones as fallback.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agobump version to 7.0-8
Thomas Lamprecht [Fri, 17 Sep 2021 14:59:22 +0000 (16:59 +0200)]
bump version to 7.0-8

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agonet: add get reachable networks: fix sorter closure
Thomas Lamprecht [Fri, 17 Sep 2021 15:47:14 +0000 (17:47 +0200)]
net: add get reachable networks: fix sorter closure

argh, perl sorters and nested greps are weird!

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agonet: add get_reachable_networks
Thomas Lamprecht [Fri, 17 Sep 2021 14:25:51 +0000 (16:25 +0200)]
net: add get_reachable_networks

will be used for the issue banner generators and for some "get
nodeip" calls as fallback for get_ip_from_hostname, which tends to
fail in our CT envs (e.g., PMG)

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agonet: ip from host: code shrink
Thomas Lamprecht [Fri, 17 Sep 2021 09:35:06 +0000 (11:35 +0200)]
net: ip from host: code shrink

Return a suitable address directly instead of breaking out of the
loop to do that.

no semantic change intended

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 months agonet: ip from host: avoid using an undefined variable in die
Thomas Lamprecht [Fri, 17 Sep 2021 08:58:08 +0000 (10:58 +0200)]
net: ip from host: avoid using an undefined variable in die

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
5 months agofix #2368: network: extend infiniband recognition in regex
Lorenz Stechauner [Fri, 6 Aug 2021 11:07:11 +0000 (13:07 +0200)]
fix #2368: network: extend infiniband recognition in regex

Signed-off-by: Lorenz Stechauner <l.stechauner@proxmox.com>
fixed RE

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
5 months agobump version to 7.0-6
Fabian Grünbichler [Fri, 6 Aug 2021 11:53:03 +0000 (13:53 +0200)]
bump version to 7.0-6

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
5 months agoProcFSTools: read_proc_stat: add more cpu stats from /proc/stat
Dominik Csapak [Wed, 28 Jul 2021 12:12:43 +0000 (14:12 +0200)]
ProcFSTools: read_proc_stat: add more cpu stats from /proc/stat

those fields might be interesting to users. At the moment, this is
only used in the external metrics export.

These fields exist in the kernel since:
* irq - 2.6.0
* softirq - 2.6.0
* steal - 2.6.11
* guest - 2.6.24
* guest_nice - 2.6.33

so they must all exist

also add a 'total' field which simply sums up the (non-guest) fields

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agointerfaces: do not warn about FD if it was not set explicitly
Thomas Lamprecht [Fri, 16 Jul 2021 10:54:14 +0000 (12:54 +0200)]
interfaces: do not warn about FD if it was not set explicitly

As that would be weird, the use explicitly did not configure it,
which is OK, and we'd then warn due to *our* fallback to `0`.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agointerfaces: code cleanup and use some more actual telling variable names
Thomas Lamprecht [Fri, 16 Jul 2021 10:52:29 +0000 (12:52 +0200)]
interfaces: code cleanup and use some more actual telling variable names

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agointerfaces: improve bridge_fd handling
Fabian Grünbichler [Fri, 16 Jul 2021 07:40:50 +0000 (09:40 +0200)]
interfaces: improve bridge_fd handling

and ignore values with a warning that are outside of the kernels
expected range.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
6 months agofix #2831: never set bridge_fd to 0 with STP on
Fabian Grünbichler [Fri, 16 Jul 2021 07:40:49 +0000 (09:40 +0200)]
fix #2831: never set bridge_fd to 0 with STP on

it's an invalid combination that causes the network reload/setup to
fail. unfortunately, this is not caught by ifupdown2 itself, but only
rejected by the kernel with ERANGE over netlink.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
6 months agobump version to 7.0-5
Thomas Lamprecht [Wed, 14 Jul 2021 09:50:51 +0000 (11:50 +0200)]
bump version to 7.0-5

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agofix #3527: cgroup: drop file buffers from memory usage
Wolfgang Bumiller [Wed, 14 Jul 2021 07:42:15 +0000 (09:42 +0200)]
fix #3527: cgroup: drop file buffers from memory usage

matches the behavior of lxcfs

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
6 months agobump version to 7.0-4
Thomas Lamprecht [Mon, 28 Jun 2021 12:57:24 +0000 (14:57 +0200)]
bump version to 7.0-4

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agofix #3153: INotify: adding comment of interface to inet6 section when this is the...
Lorenz Stechauner [Fri, 25 Jun 2021 12:29:37 +0000 (14:29 +0200)]
fix #3153: INotify: adding comment of interface to inet6 section when this is the only section

Signed-off-by: Lorenz Stechauner <l.stechauner@proxmox.com>
6 months agotools: followup: fix comment length and rename to upid_normalize_status_type
Thomas Lamprecht [Mon, 28 Jun 2021 12:51:54 +0000 (14:51 +0200)]
tools: followup: fix comment length and rename to upid_normalize_status_type

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agoPVE/Tools: add 'upid_get_status_type'
Dominik Csapak [Thu, 24 Jun 2021 07:10:11 +0000 (09:10 +0200)]
PVE/Tools: add 'upid_get_status_type'

as a single point where we get the type of upid status

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoPVE/JSONSchema: add pve-task-status-type
Dominik Csapak [Thu, 24 Jun 2021 07:10:10 +0000 (09:10 +0200)]
PVE/JSONSchema: add pve-task-status-type

to have a format that contains the possible worker task states

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoinotify/network: indentation fix
Thomas Lamprecht [Thu, 24 Jun 2021 13:36:04 +0000 (15:36 +0200)]
inotify/network: indentation fix

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agobump version to 7.0-3
Thomas Lamprecht [Wed, 23 Jun 2021 10:08:00 +0000 (12:08 +0200)]
bump version to 7.0-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agosystemd: allow SendSIGKILL and TimeoutStopUSec dbus properties
Stefan Reiter [Mon, 21 Jun 2021 16:35:42 +0000 (18:35 +0200)]
systemd: allow SendSIGKILL and TimeoutStopUSec dbus properties

Used in qemu-server for avoiding KillMode 'none'. SendSIGKILL is a
boolean, so we need to use dbus_boolean to serialize it.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
6 months agoSysFSTools: change 'product' to 'device'
Dominik Csapak [Mon, 21 Jun 2021 13:55:16 +0000 (15:55 +0200)]
SysFSTools: change 'product' to 'device'

so it is more consistend with the source (it comes from the file
'device') as well as the subsytem_device field

the only place we use that field is in the same file in pci_dev_bind_to_vfio,
which we also change here, so that should not be a breaking change
(in qemu-server we only really use the existance and the has_fl_reset
flag)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agoSysFSTools: add verbose flag to pci_device_info
Dominik Csapak [Mon, 21 Jun 2021 13:55:15 +0000 (15:55 +0200)]
SysFSTools: add verbose flag to pci_device_info

to also get the subsystem_vendor and device, as well as the
iommu group and mediated device support

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
6 months agobump version to 7.0-2
Thomas Lamprecht [Thu, 17 Jun 2021 14:41:57 +0000 (16:41 +0200)]
bump version to 7.0-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agotools: add upid_status_is_error function
Fabian Ebner [Wed, 12 May 2021 12:32:50 +0000 (14:32 +0200)]
tools: add upid_status_is_error function

There's also support for ending a task with warnings now, so the logic "status
not 'OK' means error" does not work anymore.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
6 months agod/control: record new dependency for libnetaddr-ip-perl
Thomas Lamprecht [Thu, 17 Jun 2021 13:20:14 +0000 (15:20 +0200)]
d/control: record new dependency for libnetaddr-ip-perl

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
6 months agonetwork: add unique_ips function
Fabian Ebner [Mon, 10 May 2021 12:18:16 +0000 (14:18 +0200)]
network: add unique_ips function

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
6 months agonetwork: add canonical_ip function
Fabian Ebner [Mon, 10 May 2021 12:18:15 +0000 (14:18 +0200)]
network: add canonical_ip function

Net::IP doesn't seem to have a function for it and normalizing to the full
quad-form is less then ideal if we inted to output IPv6 addresses returned by
that function at some point.

Instead, use NetAddr::IP, which is already used in pve-network.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
6 months agonetwork: is_ip_in_cidr: avoid warning when versions don't match
Fabian Ebner [Mon, 10 May 2021 12:18:14 +0000 (14:18 +0200)]
network: is_ip_in_cidr: avoid warning when versions don't match

is_ip_in_cidr('fd80:1::10', '127.0.0.1/24') would result in
    Use of uninitialized value in numeric eq (==)
as overlaps() returns undef in such a case.

Note that there are (albeit few) existing callers that don't specify $version.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
6 months agonetwork: is_ip_in_cidr: correctly handle the CIDR being a singleton range
Fabian Ebner [Mon, 10 May 2021 12:18:13 +0000 (14:18 +0200)]
network: is_ip_in_cidr: correctly handle the CIDR being a singleton range

i.e.  is_ip_in_cidr('127.0.0.1', '127.0.0.1/32', 4) should return 1;

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
7 months agotools: download from url: add option to allow overriding existing files
Thomas Lamprecht [Wed, 16 Jun 2021 10:41:33 +0000 (12:41 +0200)]
tools: download from url: add option to allow overriding existing files

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agotools: download_file_from_url: move check for existing file outside eval
Lorenz Stechauner [Wed, 16 Jun 2021 09:35:58 +0000 (11:35 +0200)]
tools: download_file_from_url: move check for existing file outside eval

it is not necessary to include this block in the eval which when it
fails tries to unlink $tmpdest, because in the check for the existing
file $tmpdest is not used.

7 months agotools: download_file_from_url: adapt error messages to start at new line
Lorenz Stechauner [Wed, 16 Jun 2021 09:35:57 +0000 (11:35 +0200)]
tools: download_file_from_url: adapt error messages to start at new line

the front end expects the error message to be the first part of the
last line. putting the new line at the beginning of the die message
does not work, either.

https://lists.proxmox.com/pipermail/pve-devel/2021-June/048676.html

7 months agoinotify: also detect VLAN id from "vlan\d+" ifaces
Thomas Lamprecht [Tue, 15 Jun 2021 14:45:30 +0000 (16:45 +0200)]
inotify: also detect VLAN id from "vlan\d+" ifaces

We support also vlanX, with X being a integer for the VLAN id, as
valid vlan iface name, so support that too here.

and make the dev name check for definedness, even if "0" is currently
not really supported (officially) it is still a valid iface name for
the kernel (which takes any byte).

The VLAN id is in the range of [2, 4094] (inclusive) so defined check
is not required there.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agotools: download_file_from_url: fix typo
Lorenz Stechauner [Tue, 15 Jun 2021 14:08:34 +0000 (16:08 +0200)]
tools: download_file_from_url: fix typo

7 months agoinotify: read_interfaces: add vlan-id and vlan-raw-device on dot notation vlan interfaces
Aaron Lauterer [Mon, 12 Apr 2021 13:14:38 +0000 (15:14 +0200)]
inotify: read_interfaces: add vlan-id and vlan-raw-device on dot notation vlan interfaces

Setting the vlan-id and vlan-raw-device value for vlan devices that
follow the dot notaton (interface.vlan) aligns how dot notation vlan
devices and vlan devices that use the explicit vlan-id and
vlan-raw-device options, available with ifupdown2, are represented in
API return values.

Previously the type for both was 'vlan' but only the latter showed more
details.

Setting these values here should not have any influence on how the
interfaces file is being written as these two values are already
filtered in __write_etc_network_interfaces for dot notation devices.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
7 months agoSyscalls/Tools: add renameat2
Wolfgang Bumiller [Wed, 9 Jun 2021 13:18:45 +0000 (15:18 +0200)]
Syscalls/Tools: add renameat2

Mostly for the ability to atomically swap files.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
7 months agotools, rest env: sort use statements
Thomas Lamprecht [Tue, 15 Jun 2021 12:24:47 +0000 (14:24 +0200)]
tools, rest env: sort use statements

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agotools: get_file_hash: add use statements for Digest module
Thomas Lamprecht [Tue, 15 Jun 2021 12:22:18 +0000 (14:22 +0200)]
tools: get_file_hash: add use statements for Digest module

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agotools: download_file_from_url: handle interrupts
Thomas Lamprecht [Tue, 15 Jun 2021 12:20:49 +0000 (14:20 +0200)]
tools: download_file_from_url: handle interrupts

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agotools: download_file_from_url: improve UX and avoid cyclic dependencies
Thomas Lamprecht [Tue, 15 Jun 2021 12:11:07 +0000 (14:11 +0200)]
tools: download_file_from_url: improve UX and avoid cyclic dependencies

plus some refactoring

* drop worker, cannot be done here (RPCEnv is in pve-access-control)
* actually output the wrong "got" hash on mismatch
* die on existing file with mismatched
* drop double array for passing cmd
* drop `/usr/bin` prefix
* adapt rename error message
* add error handling for unlinking the temp. file

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agotools: cleanup usage line
Thomas Lamprecht [Tue, 15 Jun 2021 11:12:58 +0000 (13:12 +0200)]
tools: cleanup usage line

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agotools: add download_file_from_url
Lorenz Stechauner [Mon, 14 Jun 2021 09:05:51 +0000 (11:05 +0200)]
tools: add download_file_from_url

adds a common function to download arbitrary files from urls.

code is based on
manager:PVE/API2/Nodes.pm:aplinfo

Security notice: this function does not perform any permission
checking. The callee has to make sure, that only authorized users may
use this function.

Caution: This function is able to download files from internal
networks (which would not be visible/accessible from outside), the
callee needs to ensure that unprivileged (e.g., non root@pam or the
like) can only pass OK URLs (e.g., resolving to public routable IPs)

Signed-off-by: Lorenz Stechauner <l.stechauner@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
7 months agoRevert "daemon: add compat code for pmgproxy 6.x"
Stoiko Ivanov [Fri, 11 Jun 2021 15:55:52 +0000 (17:55 +0200)]
Revert "daemon: add compat code for pmgproxy 6.x"

This reverts commit a3777dce67cf17cafa82deeeedd9e6067eeb2e2e.

With the upcoming release of pmg-api 7.0 we included the changes for
configuring a LISTEN_IP, thus this compatibility code is not needed
anymore.

Quickly tested with current pmg-api master

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
7 months agotests: run with static TZ value
Fabian Grünbichler [Wed, 19 May 2021 09:49:19 +0000 (11:49 +0200)]
tests: run with static TZ value

else tests may randomly fail depending on which local TZ is set..

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
8 months agobump version to 7.0-1
Thomas Lamprecht [Sun, 9 May 2021 15:33:35 +0000 (17:33 +0200)]
bump version to 7.0-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agobuildsys: change upload dist to bullseye
Thomas Lamprecht [Sun, 9 May 2021 15:33:31 +0000 (17:33 +0200)]
buildsys: change upload dist to bullseye

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agod/control: bump debhelper compat to >= 12
Thomas Lamprecht [Sun, 9 May 2021 15:32:30 +0000 (17:32 +0200)]
d/control: bump debhelper compat to >= 12

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agobump version to 6.4-3
Thomas Lamprecht [Fri, 7 May 2021 14:24:39 +0000 (16:24 +0200)]
bump version to 6.4-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agodaemon: add compat code for pmgproxy 6.x
Stoiko Ivanov [Wed, 5 May 2021 14:36:24 +0000 (16:36 +0200)]
daemon: add compat code for pmgproxy 6.x

The changes to the listening behavior introduced with PVE 6.4 break
backwardscompatibility w.r.t. listening address and logging, which
should not be changed without explictly notifying the user.

This patch re-adds the family parameter, which is still used by
pmgproxy and based on its existence creates the socket as before.

compared to the IO::Socket::IP->new call used before
390fc10dc4a696dd30646cbdd018ad08d855175f, the only change is the
renaming of 'LocalAddr' to 'LocalHost' (which are synonymous in
IO::Socket::IP [0])

It can simply be reverted with the release of pmg-api 7.0 (where
we'll record the change in the release-notes and upgrade-page)

[0] https://perldoc.perl.org/IO::Socket::IP
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
8 months agodaemon: explicitly bind to wildcard address.
Stoiko Ivanov [Wed, 5 May 2021 14:36:23 +0000 (16:36 +0200)]
daemon: explicitly bind to wildcard address.

with the recent change in pve-manager pveproxy (and spiceproxy)
try binding to '::' per default. This fails for hosts having disabled
ipv6 via kernel commandline.

Our desired behavior of binding on '::' and only falling back to
'0.0.0.0' in case this is not supported is not directly possible with
IO::Socket::IP->new (or rather by Socket::GetAddrInfo, which at least
on my system always returns the v4 wildcard-address first).

the code now binds to:
* the provided $host if not undef
* '::' if $host is not set
* '0.0.0.0' if $host is not set and binding on '::' yields undef,
  which means that it failed to create a socket which normally means
  that IPv6 is disabled

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agodaemon: drop Domain parameter from create_reusable_socket
Stoiko Ivanov [Wed, 5 May 2021 14:36:22 +0000 (16:36 +0200)]
daemon: drop Domain parameter from create_reusable_socket

The Domain parameter for IO::Socket::IP is not used/needed.
It is needed to create a IP Socket when calling IO::Socket->new,
but here we call IO::Socket::IP-new directly (see [0]).

[0] https://perldoc.perl.org/IO::Socket::IP

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
8 months agoschema: check format: parse list formats as arrays
Fabian Ebner [Thu, 18 Mar 2021 08:44:18 +0000 (09:44 +0100)]
schema: check format: parse list formats as arrays

Previously, the returned value would be only the last element or undef in case
of an empty list. There's only a handful of callers of check_format() that look
at the return value and AFAICT none of the exisitng ones is for a -list format.
But best to avoid any future surprises.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
8 months agoindentation fix
Fabian Ebner [Thu, 18 Mar 2021 08:44:17 +0000 (09:44 +0100)]
indentation fix

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
8 months agobump version to 6.4-2
Thomas Lamprecht [Mon, 26 Apr 2021 17:34:26 +0000 (19:34 +0200)]
bump version to 6.4-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agoINotify: add support for dummy interfaces type
Alexandre Derumier [Sun, 22 Nov 2020 16:37:25 +0000 (17:37 +0100)]
INotify: add support for dummy interfaces type

They can be used like loopback, but not limited to only 1 interface.
It's needed for bgp with multipath/ecmp to have a unique src ip

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
8 months agoREST handler: make API return validation opt-in
Thomas Lamprecht [Sun, 4 Apr 2021 15:05:56 +0000 (17:05 +0200)]
REST handler: make API return validation opt-in

It has not shown any real value in the last decade+ it was enabled,
and it can actually add quite some performance overhead. E.g., if an
API endpoint returns a few 100k of relatively simple entries we can
easily require several seconds, even tens of seconds, to run the
return validation - making it easier to run into timeouts along the
transmit path to the client.

The CLI handler has it still enabled, normally there's no timeout
there as no HTTP transmit path is involved, and d.csapak had a slight
preference for that in an off-list discussion.

The actual implementations in PMG or PVE could enable it too if
running under debug mode.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agocode cleanup
Thomas Lamprecht [Sun, 4 Apr 2021 15:04:56 +0000 (17:04 +0200)]
code cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agobump version to 6.4-1
Thomas Lamprecht [Fri, 23 Apr 2021 12:59:57 +0000 (14:59 +0200)]
bump version to 6.4-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agoallow workers to count warnings and finish tasks in a WARNINGS state
Fabian Ebner [Fri, 9 Apr 2021 08:44:35 +0000 (10:44 +0200)]
allow workers to count warnings and finish tasks in a WARNINGS state

as is already supported by the UI (and PBS).

A nice bonus is that warn() can be used by both workers and non-workers. For
workers, the output is redirected/duplicated as set up by {fork,tee}_worker(),
and non-erroring workers that issued a warning will end in a WARNINGS state.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
8 months agopbs: keep a separate $USE_CRYPT_PARAMS list per command exe
Thomas Lamprecht [Fri, 23 Apr 2021 12:15:13 +0000 (14:15 +0200)]
pbs: keep a separate $USE_CRYPT_PARAMS list per command exe

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agopbs: rework client exe handling and error message
Thomas Lamprecht [Fri, 23 Apr 2021 12:14:36 +0000 (14:14 +0200)]
pbs: rework client exe handling and error message

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agoPBSClient: use crypt params for file 'list' and 'extract'
Stefan Reiter [Thu, 22 Apr 2021 15:34:51 +0000 (17:34 +0200)]
PBSClient: use crypt params for file 'list' and 'extract'

Necessary for accessing encrypted backups.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
8 months agoPBSClient: add file_restore_extract function
Stefan Reiter [Thu, 22 Apr 2021 15:34:50 +0000 (17:34 +0200)]
PBSClient: add file_restore_extract function

*_prepare creates a fifo for streaming data back to clients directly,
filefile_restore_extract blocks and should be called from a background
worker - while it is running outcoming data can be read from the FIFO.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
8 months agoPBSClient: add file_restore_list command
Stefan Reiter [Thu, 22 Apr 2021 15:34:49 +0000 (17:34 +0200)]
PBSClient: add file_restore_list command

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
8 months agoPBSClient: adapt error message to include full package names
Stefan Reiter [Thu, 22 Apr 2021 15:34:48 +0000 (17:34 +0200)]
PBSClient: adapt error message to include full package names

More helpful for a user to know what they're missing.

Suggested-by: Dominic Jäger <d.jaeger@proxmox.com>
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
8 months agodaemon: create_reusable_socket: listen on IPv6 and IPv4
Oguz Bektas [Wed, 24 Mar 2021 13:20:36 +0000 (14:20 +0100)]
daemon: create_reusable_socket: listen on IPv6 and IPv4

When the 'Domain' configuration of IO::Socket::IP is set to PF_INET6,
it will prefer IPv6, but since we don't set 'V6Only' it will also
listen on IPv4 interfaces[0].

Drop the now obsoleted '$family' parameter.

[0]: https://perldoc.perl.org/IO::Socket::IP#REPLACING-IO::Socket-DEFAULT-BEHAVIOUR

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
8 months agoPBSClient: allow running other binaries
Stefan Reiter [Wed, 21 Apr 2021 11:15:31 +0000 (13:15 +0200)]
PBSClient: allow running other binaries

...such as proxmox-file-restore.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
8 months agoJSONSchema: don't cycle-check 'download' responses
Stefan Reiter [Wed, 21 Apr 2021 11:15:30 +0000 (13:15 +0200)]
JSONSchema: don't cycle-check 'download' responses

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
8 months agofixup: remove double braces
Stefan Reiter [Mon, 19 Apr 2021 08:43:50 +0000 (10:43 +0200)]
fixup: remove double braces

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
9 months agoschema: pull out abstract 'id-pair' verifier
Fabian Grünbichler [Tue, 13 Apr 2021 12:16:29 +0000 (14:16 +0200)]
schema: pull out abstract 'id-pair' verifier

we'll need another one for guest bridge IDs

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
9 months agotools: getaddrinfo: code/indentation cleanup
Thomas Lamprecht [Tue, 6 Apr 2021 08:33:51 +0000 (10:33 +0200)]
tools: getaddrinfo: code/indentation cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
10 months agoget_options: don't set optional positional params to `undef`
Wolfgang Bumiller [Tue, 16 Mar 2021 10:24:24 +0000 (11:24 +0100)]
get_options: don't set optional positional params to `undef`

Currently this happened if (and only if) at least one
positional parameter was passed.

We run into this with
  `pmgconfig cert delete <type> [<restart>]`
vs
  `pvenode cert delete [<restart>]`

where in the PVE case the `restart` option was simply
omitted, whereas for PMG due to the existence of `<type>`
the `restart` option was explicitly passedset in the $opts
hash but ended up being `undef`.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
10 months agobump version to 6.3-5
Thomas Lamprecht [Tue, 9 Mar 2021 07:35:17 +0000 (08:35 +0100)]
bump version to 6.3-5

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
10 months agoformat: fix render_bytes with CLIFormatter
Stefan Reiter [Wed, 17 Feb 2021 13:32:16 +0000 (14:32 +0100)]
format: fix render_bytes with CLIFormatter

CLIFormatter passes in an options hash as a second paramter, which so
far was ignored. Now that we treat it as a precision parameter, check if
it is a hash and extract the option from it before using it.

Otherwise perl puts HASH(0x...) into the format and sprintf chokes.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
10 months agonet: ip from CIDR: sort result
Thomas Lamprecht [Thu, 25 Feb 2021 12:07:56 +0000 (13:07 +0100)]
net: ip from CIDR: sort result

this should not be a real problem yet, but the perl keys hash pseudo
random order was an issue way to often to bet on that..

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
10 months agonetwork: get_local_ip_from_cidr: return unique IPs
Fabian Ebner [Mon, 22 Feb 2021 13:24:07 +0000 (14:24 +0100)]
network: get_local_ip_from_cidr: return unique IPs

to avoid erroring out when "multiple" addresses are configured on live
migration, when in fact it's the same IP multiple times.

Seems like the same problem for a caller in pve-cluster was fixed by checking
the uniqueness afterwards, see commit 266041169beb36c8892ca54265e2d91335307ffb
in pve-cluster. But there doesn't seem to be any caller relying on the current
behavior, and no additional information other than the addresses are returned,
so fix it here.

Reported here:
https://forum.proxmox.com/threads/live-migration-of-vms-via-full-mesh-network-could-not-get-ip-multiple-addresses-configured-on-local-node-for-network.84585/

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>