5
0
mirror of git://git.proxmox.com/git/pve-common.git synced 2025-01-25 18:03:33 +03:00

673 Commits

Author SHA1 Message Date
Alexandre Derumier
a9b02ee637 ProcFSTools:read_proc_mounts: increase read size
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
2017-09-26 10:47:56 +02:00
Wolfgang Bumiller
e8c13610c4 tools: df: handle a failing df
This function assumed df() will work or hang, but it can
also actually fail and return undef which results in
warnings - let's silence those.
2017-09-12 14:00:45 +02:00
Wolfgang Bumiller
45d51061bc bump version to 5.0-18 2017-09-12 13:43:55 +02:00
Thomas Lamprecht
f2c72fc3ba run_fork_with_timeout: allow returning complex structures
Encode the result or the error in JSON. This way complex objects or
exceptions may be passed to the parent in a generic way.

This allows to remove the second pipe 'pipe_err'.

Allow also to return undef without any warnings to our caller.
This avoids a "use of uninitialized variable ..." warning

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-09-12 13:37:56 +02:00
Emmanuel Kasper
a4f181a37e Use double hyphens when prefixing command options in the documentation
This makes our man pages follow the GNU long option recommandations
where non-single character options are prefixed with a double hyphen
(https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html)

The benefit for PVE is that our documentation looks more similar to what
a user with previous Linux knowledge is used to.

Our bash autocompletion helper only completes options using double hyphens too.
2017-09-12 12:18:50 +02:00
Thomas Lamprecht
8e677e74e7 Tools: add convert_size for generic byte conversion
We often need to convert between file sizes, for formatting output,
but also code-internal. Some methods expect kilobytes, some gigabytes
and sometimes we need bytes.

While conversion from smaller to bigger units can be simply done with
a left-shift, the opposite conversion may need more attention -
depending on the used context.

If we allocate disks this is quite critical. For example, if we need
to allocate a disk with size 1023 bytes using the
PVE::Storage::vdisk_alloc method (which expects kilobytes) a
right shift by 10 (<=> division by 1024) would result in "0", which
obviously fails.

Thus we round up the converted value if a remainder was lost on the
transformation in this new method. This behaviour is opt-out, to be
on the safe side.

The method can be used in a clear way, as it gives information about
the source and target unit size, unlike "$var *= 1024", which doesn't
gives direct information at all, if not commented or derived
somewhere from its context.

For example:
 > my $size = convert_unit($value, 'gb' => 'kb');
is more clear than:
 > my $size = $value*1024*1024;

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-09-11 11:12:41 +02:00
Thomas Lamprecht
eead1ccaa5 run_fork_with_timeout: do not overwrite global signal handlers
perls 'local' must be either used in front of each $SIG{...}
assignments or they must be put in a list, else it affects only the
first variable and the rest are *not* in local context.

This may cause weird behaviour where daemons seemingly do not get
terminating signals delivered correctly and thus may not shutdown
gracefully anymore.

As we only send SIGINT to processes if a manual stop action gets
triggered just catch this one here.

As this is a general method which allows to pass an arbitrary code
payload we cannot sanely handle all signals here, so remove trapping
all other besides SIGINT, if those need to be trapped that should be
done by the caller on a case by case basis.

Fixes: #1495

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-09-07 10:27:29 +02:00
Fabian Grünbichler
cea9c7b430 bump version to 5.0-17 2017-09-06 09:37:01 +02:00
Fabian Grünbichler
57e46a44ba build: drop -rfakeroot 2017-09-06 09:36:49 +02:00
Fabian Grünbichler
2131eb50a4 build: use 'git rev-parse' for GITVERSION 2017-09-06 09:36:41 +02:00
Fabian Grünbichler
77096a6fa4 rename variable
to prevent confusion of rendered type text vs. original type
property

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2017-09-01 13:45:41 +02:00
Fabian Grünbichler
fbb0ec640a api: fix rendering of filepath/string parameters
25d9bda94127b1a91181cd80bb9948093dea389b broke this check,
but it is a better idea to check against the actual type
rather then the rendered type text anyway.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2017-09-01 13:45:41 +02:00
Thomas Lamprecht
2d38b8a1b9 tools: add pipe_socket_to_command
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-08-21 16:07:30 +02:00
Wolfgang Bumiller
1b71e56485 JSONSchema: add parse_boolean helper 2017-08-18 12:37:16 +02:00
Thomas Lamprecht
9a42d8a201 restenv: catch broadcast_tasklist errors gracefully
Don't die because the tasklist could not be broadcasted, just log the
error.
Else we may hinder all task to run with a quite confusing error (i.e.
"ipcc_send_rec: file to big").

This may happen if there are a lot currently running tasks at once.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-08-18 10:39:36 +02:00
Thomas Lamprecht
08b0c7c800 restenv: remove unused variable 'ctime'
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-08-18 10:21:50 +02:00
Thomas Lamprecht
ad7962b47e restenv: remove unnecessary if
we return early from this function if the $rest_env singleton doesn't
evaluates to true yet, so this check is useless here.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-08-18 10:21:50 +02:00
Wolfgang Bumiller
b1dc435ef6 bump version to 5.0-16 2017-06-30 09:18:17 +02:00
Emmanuel Kasper
72fba9114b Add run_fork_with_timeout utility
This runs subroutine in a forked process
and kills it after a timeout
2017-06-29 15:16:03 +02:00
Dietmar Maurer
61a967bf1f bump version to 5.0-15 2017-06-27 11:26:56 +02:00
Thomas Lamprecht
9a41a7b7c9 use more reliable checks in wait_for_vnc_port
We run into problems where this method returned to early, even if the
port wasn't actually ready yet. The reason for this is that we
checked /proc/net/tcp which does not guarantees and always up to date
state of only those ports which are actuall available, i.e. a port
could linger around (time-wait state) or appear even if it wasn't
accepting connections yet (as stated in the kernel docs:
/proc/net/tcp is seen as obsolete by the kernel devs).

Use the `ss` tool from the iproute2 package, it uses netlink to get
the current state and has switches where we can direct it to really
only get the state of those sockets which interest us currently.
I.e., we tell it to get only listening TCP sockets from the requested
port.

The only drawback is that we loop on a run_command, which is slower
than just reading a file. A single loop needs about 1ms here vs the
60µs on the /proc/net/tcp read. But this isn't a api call which is
used highly frequently but rather once per noVNC console open.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-06-27 11:22:55 +02:00
Dietmar Maurer
701270450e bump version to 5.0-14 2017-06-22 08:26:17 +02:00
Dominik Csapak
05477bfe8e add the parsing error message to the format
so that one can see its error when using the api/gui

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-06-13 11:36:31 +02:00
Dominik Csapak
e2c29de775 add ability to have multiple timespecs for hours and minutes
so things like: 2,4:0 will work

also add regression tests for this

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-06-13 11:36:20 +02:00
Dominik Csapak
a5ffa49fda trim event and check if empty
give a meaningful error if it is empty and disallow it instead of having
an implicit default (the default should be set by the component using
the calendarevent, not the calendarevent itself)

also add regression tests

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-06-13 11:36:11 +02:00
Fabian Grünbichler
3dabe28a23 add and use physical NIC regexp
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2017-06-08 15:00:49 +02:00
Dietmar Maurer
4ed6974a55 get_ip_from_hostname: improve error message
And do not generate multi-line error message.
2017-06-02 16:27:09 +02:00
Dominik Csapak
057c619ab2 calendarevent: check range for start also without repetition
else an event like "61" never finishes when calculating the next event

also add regression tests for this and other range checks

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-06-02 09:30:55 +02:00
Dietmar Maurer
d31335c674 bump version to 5.0-13 2017-05-31 09:08:07 +02:00
Dominik Csapak
a4200306fe calendarevent: change sorting of hours and minutes to numeric
otherwise the numbers are sorted like this:
[1,10,11 .. 19, 2, 20, ..]
which would lead to the wrong next time

also add regression tests for this and mixed forms like:
20..22:*/30

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-05-31 08:37:19 +02:00
Wolfgang Bumiller
a0ecb15991 tools: next_unused_port: use IPPROTO_TCP explicitly
Otherwise perl tries to bind+listen on a UDP socket if the
TCP socket fails - which is a waste since we're looking for
TCP ports.
Additionall since UDP doesn't support listen(), perl will
return EOPNOTSUPP instead of, say, EADDRINUSE. (We don't
care about the error in this code though.)
2017-05-31 07:34:14 +02:00
Wolfgang Bumiller
c14960cc1d tools: unused ports: optional address parameter
While it should be impossible to bind to a wildcard address
when the port is in use by any other address there's one
case where this is allowed, and that's when the port is in
use by an ipv6 address while trying to bind to an ipv4
wildcard.
This currently happens when qemu finds ::1 for the
'localhost' we pass to qemu's spice address while we're
resolving the local nodename via IPv4.
2017-05-31 07:32:17 +02:00
Dietmar Maurer
031efdd022 PVE::JSONSchema - add proxyto_callback property 2017-05-31 07:25:52 +02:00
Dietmar Maurer
752743e717 Revert "JSONSchema.pm: register new standard option pve-replicate"
This reverts commit b6501c2fd913d9359a48007594d94a8c8a8745b5.

No longer required, because we use a separate SectionConfig file to
store replication config.
2017-05-31 07:25:52 +02:00
Fabian Grünbichler
7ef316c824 Merge branch 'master' of pve-git:pve/pve-common 2017-05-29 13:57:03 +02:00
Thomas Lamprecht
c8e94d4bb5 swap raw syscall numbers with syscall.ph for easier porting
Raw syscall numbers were not platform independent, so replace them
with the helpers provided from the syscall.ph perl bits helper.

This makes reading the code easier as a nice side effect.

As syscall.ph is not an ordinary module and makes problems when it is
required by multiple modules we make a own module PVE::Syscall which
loads it and allows to export the necessary constants in a sane way.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-05-24 11:24:34 +02:00
Fabian Grünbichler
eb9924760d bump version to 5.0-12 2017-05-18 15:44:42 +02:00
Wolfgang Bumiller
1cffb285c5 fix #1388: cpuset: sort members numerically 2017-05-18 09:06:42 +02:00
Dietmar Maurer
55c6e2cd32 PVE::CalendarEvent - register format 'pve-calendar-event' 2017-05-17 13:38:16 +02:00
Dietmar Maurer
3ebebd191d test/calendar_event_test.pl: regression tests for PVE::CalendarEvent 2017-05-17 13:38:16 +02:00
Dietmar Maurer
2244b2711a CalendarEvent.pm: implement parser/utils for systemd like calender exents
Not complete, but useful.
2017-05-17 13:38:16 +02:00
Wolfgang Bumiller
d9f86d0d87 Tools: make file-locking aware of external exception sources
Previously an external exception (eg. caused by a SIGARLM in a code
which is already inside a run_with_timeout() call) could happen in
various places where we did not properly this situation.
For instance after calling $lock_func() but before reaching the cleanup
code. In this case a lock was leaked.
Additionally the code was broken in that it used perl's automatic hash
creation side effect ($a->{x}->{y} implicitly initializing $a->{x} with
an empty hash when it did not exist). The effect was that if our own
time out was triggered after the initial check for an existing file
handle inside $lock_func() happened (extremely rare since perl would have
to be running insanely slow), the cleanup did:

    if (my $fh = $lock_handles->{$$}->{$filename}->{fh}) {

This recreated $lock_handles->{$$}->{$filename} as an empty hash.
A subsequent call to lock_file_full() will think a file descriptor
already exists because the check simply used:

    if (!$lock_handles->{$$}->{$filename}) {

While this could have been a one-line fix for this one particular case,
we'd still not be taking external timeouts into account causing the
first issue described above.
2017-05-12 11:40:26 +02:00
Dietmar Maurer
2d63b598e1 SectionConfig.pm: pass section data to format_section_header
So that we can store data in section headers
2017-05-10 11:32:08 +02:00
Dietmar Maurer
b6501c2fd9 JSONSchema.pm: register new standard option pve-replicate 2017-05-08 11:23:39 +02:00
Fabian Grünbichler
03c2655620 bump version to 5.0-11 2017-05-05 12:39:24 +02:00
Thomas Lamprecht
c990256896 get_options: handle array and scalar refs on decoding
get_options is for parsing CLI options, here we decode after using
Getopt as we are not sure how well it handles already decoded data.
But as Gettopt can produces references for the parsed data we must
handle them explictily.
So check if we have a ARRAY or SCALAR reference and decode them
respectively.
All other reference types should not get returned from Getopt so
error out on them.

This bug was seen when viewing backup jobs, as we save the job as a
comand entry in /etc/pve/vzdump.cron and parse it then with this
function on reading.
Besides the use there we use it in the RESTHandler Packages
cli_handler sub method, so some CLI tools could be possibly affected
by this.

Fixes: 24197a9f6c698985b7255fbf7792b0b6bd8188b5
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-05-05 12:37:50 +02:00
Thomas Lamprecht
87aa00de73 Network: add helpers to resolve hostnames to IPs
Add addr_to_ip and get_ip_from_hostname helpers to PVE::Network

The first helper, addr_to_ip, is based on Wolfgangs version of this
[0]
I just moved it from PVE::Tools to PVE::Network, as it seems a more
fitting place.
It uses getnameinfo to extract information from the paddr parameter,
which is sockaddr struct
It gets used in the second helper and in a bug fix series from
Wolfgang [1]

The second helper, get_ip_from_hostname, resolves an hostname to an
IP and checks if it isn't one from the for loopback reserved 127/8
subnet. It will be used in get_remote_nodeip from PVE::CLuster and
for a bugfix in pvecm.

[0]: http://pve.proxmox.com/pipermail/pve-devel/2017-April/026099.html
[1]: http://pve.proxmox.com/pipermail/pve-devel/2017-April/026098.html

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2017-05-04 08:42:55 +02:00
Dietmar Maurer
09f8882f6c bump version to 5.0-10 2017-05-02 11:52:41 +02:00
Dietmar Maurer
6d46baf63a mark decode_utf8_parameters() as depreciated 2017-05-02 11:51:29 +02:00
Dietmar Maurer
24197a9f6c use Encode::Locale to encode parameters read from console(getopt) 2017-05-02 11:14:36 +02:00