�PNG
IHDR��;���IDATx��ܻn�0���K��
�)(�pA������7�LeG{�� �§㻢|��ذaÆ
6lذaÆ
6lذaÆ
6lom��$^�y���ذag�5bÆ
6lذaÆ
6lذa{����
6lذaÆ
�`����}H�Fkm�,�m����Ӫ���ô�ô!��x�|'ܢ˟;�E:���9�&ᶒ�}�{�v]�n&�6�
�h��_��t�ڠ͵-ҫ���Z;��Z$�.�P���k�ž)�!��o���>}l�eQfJ�T��u і���چ��\��X=8��Rن4`Vw�l�>����n�G�^��i�s��"ms�$�u��i��?w�bs[m�6�K4���O���.�4��%����/����b�C%��t��M�ז� �-l�G6�mrz2���s�%�9��s@���-�k�9�=���)������k�B5����\��+͂�Zsٲ��Rn��~G���R���C������wIcI��n7jJ���hۛNCS|���j0��8y�iHKֶۛ�k�Ɉ+;Sz������L/��F�*\��Ԕ�#"5��m�2��[S��������=�g��n�a�P�e�ғ�L��
lذaÆ
6l�^k��̱aÆ
6lذaÆ
6lذa;����
�_��ذaÆ
6lذaÆ
6lذaÆ
���R���IEND�B`
package OSDetect;
# cpanel - installd/OSDetect.pm Copyright 2021 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
use strict;
use warnings;
## NOTE: This code has been copied from Cpanel/OS/SysPerlBootstrap.pm with minor modifications.
=encoding utf-8
=head1 NAME
Cpanel::OS::SysPerlBootstrap - SysPerlBootstrap logic used by Cpanel::OS
=head1 DO NOT USE THIS MODULE DIRECTLY
This code is intended to be system and cpanel perl compatible and to be consumed only in very specific circumstances.
Instead use L directly, and as its POD outlines, do not do logic on the OS info to determine what it is you need.
=head1 FUNCTIONS
=head2 get_os_info ($iknowwhatimdoing)
Please use Cpanel::OS for your OS info needs.
This is an internal helper to Cpanel::OS to get the
- distro
- major
- minor
- build id
=cut
sub get_os_info {
my @os_info = _read_os_info_cache();
return @os_info if @os_info;
if ( -e '/etc/redhat-release' ) {
@os_info = _read_redhat_release();
}
elsif ( -e '/etc/os-release' ) { # Only Ubuntu doesn't provide redhat-release
@os_info = _read_os_release();
}
my ( $distro, $major, $minor, $build ) = @os_info;
if ( !defined $distro || !length $distro || !defined $major || !length $major || !defined $minor || !length $minor || !defined $build || !length $build ) {
die sprintf( "Could not determine OS info (distro: %s, major: %s, minor: %s, build: %s)\n", $distro // '', $major // '', $minor // '', $build // '' );
}
return ( $^O, $distro, $major, $minor, $build );
}
=head2 _read_os_info_cache()
Read the previous cached values from /var/cpanel/caches/Cpanel-OS
=cut
sub _read_os_info_cache {
my $cpanel_os_cache_file = "/var/cpanel/caches/Cpanel-OS";
# If we've cached the information, just use it.
my $cache_mtime = ( lstat $cpanel_os_cache_file )[9] or return;
my $custom_os = readlink "$cpanel_os_cache_file.custom";
# Do we need to cache bust?
if ( !$custom_os ) {
my $os_rel_mtime = ( stat("/etc/os-release") )[9];
$os_rel_mtime //= ( stat("/etc/redhat-release") )[9]; # in the case of cloudlinux 6, we check against this instead
# Bail out only if one of the release files is present since the cache file is suddenly our only valid source of truth.
return if ( defined($os_rel_mtime) && $cache_mtime <= $os_rel_mtime );
}
return split /\|/, readlink($cpanel_os_cache_file);
}
=head2 _read_os_release()
Internal helper to read /etc/os-release
=cut
sub _read_os_release {
open( my $os_fh, "<", "/etc/os-release" ) or die "Could not open /etc/os-release for reading: $!\n";
my ( $distro, $ver, $ver_id );
while ( my $line = <$os_fh> ) {
my ( $key, $value ) = split( qr/\s*=\s*/, $line, 2 );
chomp $value;
$value =~ s/\s.+//;
$value =~ s/"\z//;
$value =~ s/^"//;
if ( !$distro && $key eq "ID" ) {
$distro = $value;
}
elsif ( !$ver_id && $key eq "VERSION_ID" ) {
$ver_id = $value;
}
elsif ( !$ver && $key eq "VERSION" ) {
$ver = $value;
}
last if length $distro && length $ver && length $ver_id;
}
close $os_fh;
# ver_id is often enough.
my ( $major, $minor, $build ) = split( qr/\./, $ver_id );
return unless $distro; # We have to at a minimum have a distro name. All hope is lost otherwise.
unless ( length $major && length $minor && length $build ) {
my ( $ver_major, $ver_minor, $ver_build ) = split( qr/\./, $ver );
$major //= $ver_major;
$minor //= ( $ver_minor // 0 );
$build //= ( $ver_build // 0 );
}
return ( $distro, $major, $minor, $build );
}
=head2 _read_redhat_release()
Internal helper to read /etc/redhat-release
=cut
sub _read_redhat_release {
open( my $cr_fh, "<", "/etc/redhat-release" ) or die "Could not open /etc/redhat-release for reading: $!\n";
my $line = <$cr_fh>;
chomp $line;
my ($distro) = $line =~ m/^(\w+)/i;
$distro = lc($distro);
$distro = 'rhel' if $distro eq 'red';
my ( $major, $minor, $build ) = $line =~ m{\b([0-9]+)\.([0-9]+)\.([0-9]+)};
if ( !$major ) {
( $major, $minor ) = $line =~ m{\b([0-9]+)\.([0-9]+)};
}
if ( !$major ) {
($major) = $line =~ m{\b([0-9]+)};
}
$minor //= 0;
$build //= 0;
return ( $distro, $major, $minor, $build );
}
1;