....................................../////.===Shadow-Here===./////................................................ > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < ------------------------------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// RIFF¤ WEBPVP8 ˜ ðÑ *ôô>‘HŸK¥¤"§£±¨àð enü¹%½_F‘åè¿2ºQú³íªú`N¿­3ÿƒügµJžaÿ¯ÿ°~¼ÎùnúîÞÖô•òíôÁÉß®Sm¥Ü/ ‡ó˜f£Ùà<˜„xëJ¢Ù€SO3x<ªÔ©4¿+ç¶A`q@Ì“Úñè™ÍÿJÌ´ª-˜ÆtÊÛL]Ïq*‘Ý”ì#ŸÌÏãY]@ê`¿ /ªfkØB4·®£ó z—Üw¥Pxù–ÞLШKÇN¾AkÙTf½è'‰g gÆv›Øuh~ a˜Z— ïj*á¥t d£“uÒ ¨`K˜¹ßþ]b>˜]_ÏÔ6W—è2r4x•íÖ…"ƒÖNîä!¦å Ú}ýxGøÌ —@ ;ÆÚŠ=ɾ1ý8lªË¥ô ^yf®Œ¢u&2©nÙÇ›ñÂñŒ³ aPo['½»øFùà­+4ê“$!lövlüÞ=;N®3ð‚õ›DÉKòÞ>ÄÍ ¥ˆuߤ#ˆ$6ù™¥îЇy’ÍB¼ çxÛ;X"WL£R÷͝*ó-¶Zu}º.s¸sšXqù–DþÿvªhüïwyŸ ¯é³lÀ:KCûÄ£Ëá\…­ ~—ýóî ¼ûûÜTÓüÇy…ŽÆvc»¾×U ñ¸žþоP÷¦ó:Ò¨¨5;Ð#&#ÖúñläÿÁœ GxÉ­/ñ‡áQðìYÉtÒw޼GÔ´zàÒò ð*ëzƒ•4~H]Ø‹f ñÓÈñ`NåWçs'ÆÏW^ø¹!XžµmQ5ÃËoLœÎ: ÞËÍ¥J ù…î èo£ßPÎñ¶ž8.Œ]ʵ~5›ÙË-ù*8ÙÖß±~ ©¹rÓê‚j¶d¸{^Q'˜±Crß ÚH—#¥¥QlÀ×ëã‡DÜ«èî þ&Çæžî;ŽÏºò6ÒLÃXy&ZŒ'j‚¢Ù€IßÚù+–MGi‰*jE€‘JcÜ ÓÌ EÏÚj]o˜ Þr <¾U ûŪæÍ/šÝH¥˜b”¼ ÁñßX GP›ï2›4WŠÏà×£…íÓk†¦H·ÅíMh–*nó÷à]ÁjCº€b7<ب‹¨5車bp2:Á[UªM„QŒçiNMa#<5›áËó¸HýÊ"…×Éw¹¦ì2º–x<›»a±¸3Weü®FÝ⑱ö–î–³|LPÈ~çð~Çå‡|º kD¢µÏàÆAI %1À% ¹Ò – ”ϝS¦‰4&¶£°à Öý”û_Ò Áw°A«Å€?mÇÛgHÉ/8)á¾ÛìáöŽP í¨PŸNÙµº¦‡§Ùš"ÿ«>+ªÕ`Ê÷‡‚ß Õû˜þãÇ-PÍ.¾XV‘€ dÜ"þ4¹ ±Oú‘©t¥¦FªÄÃÄ•b‚znýu½—#cDs˜ÃiÑOˆñ×QO=*IAÊ,¶ŽZƒ;‡wøXè%EÐk:F±Ú” .Ѽ+Áu&Ç`."pÈÉw o&¿dE6‘’EqTuK@Ì¥ã™À(Êk(h‰,H}RÀIXÛš3µ1©_OqÚÒJAñ$ÊÙÜ;D3çŒ[þùœh¬Ã³™ö6ç†NY".Ú‰ï[ªŸŒ '²Ð öø_¨ÂÉ9ué¶³ÒŠõTàîMØ#û¯gN‡bÙ놚X„ö …ÉeüÌ^J ‹€.œ$Æ)βÄeæW#óüßĺŸ€ ÀzwV 9oä»f4V*uB «Ë†¹ì¯žR霓æHXa=&“I4K;¯ç‹h×·"UŠ~<•╪Vêª&ÍSÃÆÅ?ÔqÎ*mTM ˜›µwêd#[C¡©§‘D<©àb†–ÁœøvH/,í:¯( ²£|4-„Æövv„Yͼ™^Á$ˆ„¢Û[6yB.åH*V¨æ?$=˜Ñ€•ñ·­(VlŸ‘ nÀt8W÷´Bûba?q9ú¶Xƒl«ÿ\ù¶’þòUÐj/õ¢Ìµ³g$ƒÎR!¸»|Oߍë’BhîÚÑ¢ñåŒJ„®„£2Ð3•ô02Nt…!£Í]Ïc½Qÿ?ˆ<&ÃA¾Ú,JˆijÌ#5yz„‰Î|ÊŽ5QÏ:‹ÐaóVÔxW—CpeÏzÐïíçôÿÅ_[hãsÐ_/ŽTÝ?BîˆííV$<¿i>²F¬_Eß¿ †bÊŒº­ÿ®Z H“C}”¬,Mp ý/Bá£w>˜YV°aƒúh+cŠ- r/[%|üUMHäQ°X»|û/@|°¥Ð !BÔ Ç¢Ä©š+Õì D«7ìN¶ŽðÔ " ƶ’ÖçtA‰Û×}{tþz­¾GÍ›k¹OEJR$ Â׃ «ëÁ"oÉôž$oUK(Ä)Ãz³Ê-‹êN[Ò3Œñbï8P 4ƒ×q¢bo|?<ÛX¬òÄͰL–±›(™ûG?ýË©ÚÄ–ÂDØÐ_Ç¡ô ¾–ÄÏø ×e8Ë©$ÄF¹Å‹ì[©óìl:F¾f´‹‹Xì²ï®\¬ôùƒ ÿat¥óèÒùHß0äe‚;ü×h:ÆWðHž=Ã8骣"kœ'Y?³}Tûè€>?0l›e1Lòñ„aæKÆw…hÖŠùW…ÈÆÄ0ši·›[pcwËþñiêíY/~-Á5˜!¿†A›™Mÿþ(±“t@â“ö2­´TG5yé]çå僳 .·ÍïçÝ7UÚ±Ð/Nè»,_Ï ùdj7\ï Wì4›„»c¸àešg#ÒÊ⥭áØo5‘?ÌdÝô¯ ¹kzsƒ=´#ëÉK›Ø´±-¥eW?‡çßtòTã…$Ý+qÿ±ƒ÷_3Ô¥í÷:æ–ž<·Ö‡‰Å¢ š‡%Ô—utÌÈìðžgÖÀz²À—ï÷Óîäõ{K'´È÷³yaÏÁjƒô}ž§®æÊydÕÈë5¯èˆõvÕ©ã*çD„ “z„Ó‡^^xÂ3M§A´JG‚öï 3W'ˆ.OvXè¡ÊÕª?5º7†˜(˜Ç¶#çê’¶!ÌdZK§æ 0fãaN]òY³RV ™î$®K2R¨`W!1Ôó\;Ý ýB%qæK•&ÓÈe9È0êI±žeŸß -ú@žQr¦ ö4»M¼Áè¹µmw 9 EÆE_°2ó„ŸXKWÁ×Hóì^´²GѝF©óäR†¦‰ç"V»eØ<3ùd3ÿÚ¤Žú“Gi" —‘_ÙËÎ~Üö¯¥½Î»üŸEÚŽåmÞþí ;ÞólËΦMzA"Âf(´òá;Éï(/7½ûñÌ­cïÕçлþÝz¾-ÍvÑ“pH­–ðÓj$¸Äû¤‚‘ãUBË-n“2åPkS5&‹Â|+g^œ®Ì͆d!OïäîU«c;{Û!ÅŽ«ëZ9Ókóˆ]¯ƒ›né `ÇÒ+tÆš (ØKá¾—=3œ®•vuMñg²\ï Ec€ 05±d™‡×iÇ×›UúvÌ¢£Èþ¡ÕØô¶ßÎA"ß±#Ö²ˆÊŸ¦*Ä~ij|àø.-¼'»Ú¥£h ofº¦‡VsR=N½„Î v˜Z*SÌ{=jÑB‹tê…;’HžH¯8–îDù8ñ¢|Q•bÛçš–‹m³“ê¨ åÏ^m¬Žãþ©ïêO‡½6] µÆ„Ooòü ²x}N¦Ë3ïé¿»€›HA˜m%çÞ/¿í7Fø“‹léUk)É°Œµ8Q8›:ÀŠeT*šõ~ôڝG6 ¢}`ùH­–”¡k ‰P1>š†®9z11!X wKfmÁ¦xÑ,N1Q”–æB¶M…ÒÃv6SMˆhU¬ÊPŽï‘öj=·CŒ¯u¹ƒVIЃsx4’ömÛýcå¡¶7ßŠß 57^\wÒÐÆ k§h,Œý î«q^R½3]J¸ÇðN ‚çU¬ôº^Áì} ³f©Õœ§ˆã:FÄÈ‚é(€™?àýÓüè1Gô£¼éj‚OÅñ  #>×—ßtà 0G¥Åa뀐kßhc™À_ÉñÞ#±)GD" YîäË-ÿÙ̪ ¹™a¯´¢E\ÝÒö‚;™„ë]_ p8‰o¡ñ+^÷ 3‘'dT4œŽ ðVë½° :¬víÑ«£tßÚS-3¶“þ2 †üüʨòrš¹M{É_¤`Û¨0ìjœøJ‡:÷ÃáZ˜†@GP&œÑDGÏs¡þ¦þDGú‘1Yá9Ôþ¼ ûø…§÷8&–ÜÑnÄ_m®^üÆ`;ÉVÁJ£?â€-ßê}suÍ2sõA NÌúA磸‘îÿÚ»ƒìö·á¿±tÑÐ"Tÿü˜[@/äj¬€uüªìù¥Ý˜á8Ý´sõj 8@rˆð äþZÇD®ÿUÏ2ùôõrBzÆÏÞž>Ì™xœ“ wiÎ×7_… ¸ \#€MɁV¶¥üÕÿPÔ9Z‡ø§É8#H:ƒ5ÀÝå9ÍIŒ5åKÙŠ÷qÄ>1AÈøžj"µÂд/ªnÀ qªã}"iŸBå˜ÓÛŽ¦…&ݧ;G@—³b¯“•"´4í¨ôM¨åñC‹ïùÉó¯ÓsSH2Ý@ßáM‡ˆKÀªÛUeø/4\gnm¥‹ŸŒ qÄ b9ÞwÒNÏ_4Ég³ú=܆‚´ •â¥õeíþkjz>éÚyU«Íӝ݃6"8/ø{=Ô¢»G¥ äUw°W«,ô—¿ãㆅү¢³xŠUû™yŒ (øSópÐ 9\åTâ»—*oG$/×ÍT†Y¿1¤Þ¢_‡ ¼ „±ÍçèSaÓ 3ÛMÁBkxs‰’R/¡¤ˆÙçª(*õ„üXÌ´ƒ E§´¬EF"Ù”R/ÐNyÆÂ^°?™6¡œïJ·±$§?º>ÖüœcNÌù¯G ‹ñ2ЁBB„^·úìaz¨k:#¨Æ¨8LÎõލ£^§S&cŒÐU€ü(‡F±Š¼&P>8ÙÁ ‰ p5?0ÊÆƒZl¸aô š¼¡}gÿ¶zÆC²¹¬ÎÖG*HB¡O<º2#ñŒAƒ–¡B˜´É$¥›É:FÀÔx¾u?XÜÏÓvN©RS{2ʈãk9rmP¼Qq̳ è¼ÐFׄ^¡Öì fE“F4A…!ì/…¦Lƒ… … $%´¾yã@CI¬ á—3PþBÏNÿ<ý°4Ü ËÃ#ØÍ~âW«rEñw‹eùMMHß²`¬Öó½íf³:‹k˜¯÷}Z!ã¿<¥,\#öµÀ¯aÒNÆIé,Ћ–lŽ#Àæ9ÀÒS·I’½-Ïp Äz¤Š Â* ­íÄ9­< h>׍3ZkËU¹§˜ŒŠ±f­’¤º³Q ÏB?‹#µíÃ¥®@(Gs«†vI¥Mµ‹Á©e~2ú³ÁP4ìÕi‚²Ê^ö@-DþÓàlÜOÍ]n"µã:žpsŽ¢:! Aõ.ç~ÓBûH÷JCÌ]õVƒd «ú´QÙEA–¯¯Œ!.ˆˆëQ±ù œ·Ì!Õâ )ùL„ÅÀlÚè5@B…o´Æ¸XÓ&Û…O«˜”_#‡ƒ„ûÈt!¤ÁÏ›ÎÝŠ?c9 â\>lÓÁVÄÑ™£eØY]:fÝ–—ù+p{™ðè û³”g±OƒÚSù£áÁÊ„ä,ï7š²G ÕÌBk)~ÑiCµ|h#u¤¶îK¨² #²vݯGãeÖ϶ú…¾múÀ¶þÔñ‚Š9'^($¤§ò “š½{éúp÷J›ušS¹áªCÂubÃH9™D™/ZöØÁ‡¦ÝÙŸ·kð*_”.C‹{áXó€‡c¡c€§/šò/&éš÷,àéJþ‰X›fµ“C¨œ®r¬"kL‰Â_q…Z–.ÉL~O µ›zn‚¹À¦Öª7\àHµšÖ %»ÇníV[¥*Õ;ƒ#½¾HK-ÖIÊdÏEÚ#=o÷Óò³´Š: Ç?{¾+9›–‘OEáU·S€˜j"ÄaÜ ŒÛWt› á–c#a»pÔZÞdŽtWê=9éöÊ¢µ~ ë ;Öe‡Œ®:bî3±ýê¢wà¼îpêñ¹¾4 zc¾ðÖÿzdêŒÑÒŝÀ‰s6¤í³ÎÙB¿OZ”+F¤á‡3@Ñëäg©·Ž ˆèª<ù@É{&S„œÕúÀA)‰h:YÀ5^ÂÓŒ°õäU\ ùËÍû#²?Xe¬tu‰^zÒÔãë¼ÛWtEtû …‚g¶Úüâî*moGè¨7%u!]PhÏd™Ý%Îx: VÒ¦ôÊD3ÀŽKÛËãvÆî…N¯ä>Eró–ð`5 Œ%u5XkñÌ*NU%¶áœÊ:Qÿú»“úzyÏ6å-၇¾ ´ ÒÊ]y žO‘w2Äøæ…H’²f±ÎÇ.ª|¥'gîV•Ü .̘¯€šòü¤U~Ù†*¢!?ò wý,}´°ÔÞnïoKq5µb!áÓ3"vAßH¡³¡·G(ÐÎ0Îò¼MG!/ài®@—¬04*`…«é8ªøøló“ˆÊ”èù¤…ßÊoÿé'ËuÌÖ5×È¡§ˆˆfŽë9}hìâ_!!¯  B&Ëö¶‰ÀAÙNVŸ Wh›¸®XÑJì¨ú“¿÷3uj²˜¨ÍÎìë±aúŠÝå¯ð*Ó¨ôJ“yºØ)m°WýOè68†ŸÏ2—‰Ïüꪫٚ¥‹l1 ø ÏÄFjêµvÌbü¦èÝx:X±¢H=MÐß—,ˆÉÇ´(9ú¾^ÅÚ4¿m‡$âX‘å%(AlZo@½¨UOÌÕ”1ø¸jÎÀÃÃ_ µ‘Ü.œº¦Ut: Æï’!=¯uwû#,“pþÇúŒø(é@?³ü¥‘Mo §—s@Œ#)§ŒùkL}NOÆêA›¸~r½¼ÙA—HJ«eˆÖ´*¡ÓpÌŸö.m<-"³ûÈ$¬_6­åf£ïÚâj1y§ÕJ½@dÞÁr&Í\Z%D£Íñ·AZ Û³øüd/ªAi†/Й~  ‡âĮҮÏh§°b—›Û«mJžòG'[ÈYýŒ¦9psl ýÁ ®±f¦x,‰½tN ‚Xª9 ÙÖH.«Lo0×?͹m¡å†Ѽ+›2ƒF ±Ê8 7Hցϓ²Æ–m9…òŸï]Â1äN†VLâCˆU .ÿ‰Ts +ÅÎx(%¦u]6AF Š ØF鈄‘ |¢¶c±soŒ/t[a¾–û:s·`i햍ê›ËchÈ…8ßÀUÜewŒðNOƒõD%q#éû\9¤x¹&UE×G¥ Í—™$ð E6-‡¼!ýpãÔM˜ Âsìe¯ñµK¢Ç¡ùôléœ4Ö£”À Š®Ðc ^¨À}ÙËŸ§›ºê{ÊuÉC ×Sr€¤’fÉ*j!úÓ’Gsùìoîßîn%ò· àc Wp÷$¨˜)û»H ×8ŽÒ€Zj¤3ÀÙºY'Ql¦py{-6íÔCeiØp‘‡XÊîÆUߢ܂ž£Xé¼Y8þ©ëgñß}é.ÎógÒ„ÃØËø¯»™§Xýy M%@NŠ À(~áÐvu7&•,Ù˜ó€uP‡^^®=_E„jt’ 403WebShell
403Webshell
Server IP : 217.79.180.202  /  Your IP : 216.73.216.172
Web Server : Apache
System : Linux vps2460721.fastwebserver.de 5.15.0-122-generic #132-Ubuntu SMP Thu Aug 29 13:45:52 UTC 2024 x86_64
User : tecnoelite ( 1001)
PHP Version : 8.1.2-1ubuntu2.18
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/perl5/Virtualmin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/share/perl5/Virtualmin/Config.pm
package Virtualmin::Config;

# ABSTRACT: Configure a system for use by Virtualmin
use strict;
use warnings;
no warnings qw(once);    # We've got some globals that effect Webmin behavior
use 5.010_001;           # Version shipped with CentOS 6. Nothing older.
use Module::Load;
use Term::ANSIColor qw(:constants);
use Log::Log4perl qw(:easy);

# globals
our (%gconfig, %uconfig, %miniserv, %uminiserv);
our ($root_directory, $config_directory);
our ($trust_unknown_referers, $no_acl_check, $error_must_die, $file_cache);

sub new {
  my ($class, %args) = @_;
  my $self = {};

  $self->{bundle}  = $args{bundle};
  $self->{include} = $args{include};
  $self->{exclude} = $args{exclude};
  $self->{test}    = $args{test};
  $self->{log}     = $args{log} || "/root/virtualmin-install.log";

  return bless $self, $class;
}

# Gathered plugins are processed
sub run {
  my $self = shift;

  $| = 1;    # No line buffering.

  # TODO This should really just be "use Webmin::Core"
  $no_acl_check   = 1;
  $error_must_die = 1;

  # Initialize logger
  my $log_conf = qq(
  	log4perl.logger 		= INFO, FileApp
  	log4perl.appender.FileApp	= Log::Log4perl::Appender::File
    log4perl.appender.FileApp.utf8     = 1
  	log4perl.appender.FileApp.filename = $self->{log}
  	log4perl.appender.FileApp.layout   = PatternLayout
  	log4perl.appender.FileApp.layout.ConversionPattern = [%d] [%p] - %m%n
  	log4perl.appender.FileApp.mode	= append
  );
  Log::Log4perl->init(\$log_conf);
  my $log = Log::Log4perl->get_logger("virtualmin-config-system");
  $log->info("Starting init-system log...");

  my @plugins = $self->_gather_plugins();
  @plugins = $self->_order_plugins(@plugins);
  my $total = scalar @plugins;
  $log->info("Total plugins to be run: $total");
  for (@plugins) {
    my $pkg = "Virtualmin::Config::Plugin::$_";
    load $pkg || die "Loading Plugin failed: $_";
    my $plugin = $pkg->new(total => $total, bundle => $self->{bundle});
    $plugin->actions();
    if ($self->{test} && $plugin->can('tests')) {
      $plugin->tests();
    }
  }
  return 1;
}

# list_bundles
# Returns a list of the available configuration bundles.
sub list_bundles {
  my $self = shift;

  # Figure out our module home directory
  my $modpath = $INC{'Virtualmin/Config.pm'};
  use File::Basename;
  my $bundlepath = dirname($modpath) . '/Config';
  opendir(my $DIR, $bundlepath);
  my @bundles = grep(/\.pm$/, readdir($DIR));
  closedir($DIR);
  @bundles = grep { $_ ne 'Dummy.pm' && $_ ne 'Plugin.pm' } @bundles;
  for (@bundles) {s/\.pm$//}
  @bundles = sort(@bundles);
  return @bundles;
}

# list-plugins
# Returns a sorted list of the available plugins.
sub list_plugins {
  my $self = shift;

  # Figure out our module home directory
  require Virtualmin::Config::Plugin;
  my $modpath = $INC{'Virtualmin/Config/Plugin.pm'};
  use File::Basename;
  my $pluginpath = dirname($modpath) . '/Plugin';
  opendir(my $DIR, $pluginpath);
  my @plugins = grep(/\.pm$/, readdir($DIR));
  closedir($DIR);
  @plugins = grep { $_ ne 'Test.pm' && $_ ne 'Test2.pm' } @plugins;
  for (@plugins) {s/\.pm$//}
  @plugins = sort(@plugins);
  return @plugins;
}

# Merges the selected bundle, with any extra includes, and removes excludes
sub _gather_plugins {
  my $self = shift;
  my @plugins;

  # If bundle specified, load it up.
  if ($self->{bundle}) {
    my $pkg = "Virtualmin::Config::$self->{bundle}";
    load $pkg;
    my $bundle = $pkg->new();

    # Ask the bundle for a list of plugins
    @plugins = $bundle->plugins();
  }

  # Check with the command arguments
  if (ref($self->{include}) eq 'ARRAY' || ref($self->{include}) eq 'STRING') {
    for my $include ($self->{'include'}) {
      push(@plugins, $include)
        unless (map { grep(/^$include$/, @{$_}) } @plugins);
    }
  }

  # Check for excluded plugins
  my @noplugins = _flat($self->{'exclude'});
  if (@noplugins) {
    @plugins = _flat(@plugins);
    no warnings "uninitialized";
    @plugins
      = grep { my $noplugin = $_; !grep(/^$noplugin$/, @noplugins) } @plugins;
  }
  return @plugins;
}

# Take the gathered list of plugins and sort them to resolve deps
sub _order_plugins {
  my ($self, @plugins) = @_;
  my %plugin_details;    # Will hold an array of hashes containing name/depends
                         # Load up @plugin_details with name and dependency list
  if (ref($plugins[0]) eq 'ARRAY') {    # XXX Why is this so stupid?
    @plugins = map {@$_} @plugins;      # Flatten the array of refs into list.
  }
  for my $plugin_name (@plugins) {
    my $pkg = "Virtualmin::Config::Plugin::$plugin_name";
    load $pkg;
    my $plugin = $pkg->new();
    $plugin_details{$plugin->{'name'}} = $plugin->{'depends'} || [];
  }
  return _topo_sort(%plugin_details);
}

# Topological sort on dependencies
sub _topo_sort {
  my (%deps) = @_;

  my %ba;
  while (my ($before, $afters_aref) = each %deps) {
    unless (@{$afters_aref}) {
      $ba{$before} = {};
    }
    for my $after (@{$afters_aref}) {
      $ba{$before}{$after} = 1 if $before ne $after;
      $ba{$after} ||= {};
    }
  }
  my @rv;
  while (my @afters = sort grep { !%{$ba{$_}} } keys %ba) {
    push @rv, @afters;
    delete @ba{@afters};
    delete @{$_}{@afters} for values %ba;
  }

  return _uniq(@rv);
}

# uniq so we don't have to import List::MoreUtils
sub _uniq {
  my %seen;
  return grep { !$seen{$_}++ } @_;
}

# Flatten into plain list
sub _flat {
  return map { ref eq 'ARRAY' ? @$_ : $_ } @_;
}

1;

__END__

=pod

=encoding utf8

=for html <a href="https://travis-ci.org/virtualmin/Virtualmin-Config">
<img src="https://travis-ci.org/virtualmin/Virtualmin-Config.svg?branch=master">
</a>&nbsp;
<a href='https://coveralls.io/github/virtualmin/Virtualmin-Config?branch=master'>
<img src='https://coveralls.io/repos/github/virtualmin/Virtualmin-Config/badge.svg?branch=master'
alt='Coverage Status' /></a>


=head1 NAME

Virtualmin::Config - A collection of plugins to initialize the configuration
of services that Virtualmin manages, and a command line tool called
config-system to run them. It can be thought of as a very specialized
configuration management system (e.g. puppet, chef, whatever) for doing
just one thing (setting up a system for Virtualmin). It has basic dependency
resolution (via topological sort), logging, and ties into the Webmin API to
make some common tasks (like starting/stopping services, setting them to run
on boot) simpler to code.

=head1 SYNOPSIS

    my $bundle = Virtualmin::Config->new(bundle	=> 'LAMP');
    $bundle->run();

You can also call it with specific plugins, rather than a whole bundle of
plugins.

    my $plugin = Virtualmin::Config->new(include => 'Apache');
    $plugin->run();

Adding new features to the installer, or modifying installer features, should
be done by creating new plugins or by adding to existing ones.

=head1 DESCRIPTION

This is a mini-framework for configuring elements of a Virtualmin system. It
uses Webmin as a library to abstract common configuration tasks, provides a
friendly status indicator, and makes it easy to pick and choose the kind of
configuration you want (should you choose to go that route). The Virtualmin
install script chooses either the LAMP (with Apache) or LEMP (with nginx)
bundle, and performs the configuration for the whole stack.

It includes plugins for all of the common tasks in a Virtualmin system, such
as Apache, MySQL/MariaDB, Postfix, SpamAssassin, etc.

=head1 INSTALLATION

The recommended installation method is to use native packages for your
distribution. We provide packages for Debian, Ubuntu, CentOS/RHEL, and Fedora
in our repositories.

You can use the standard Perl process to install from the source tarball or
git clone:

    perl Makefile.PL
    make
    make test
    make install

Or, use your system native package manager. The followin assumes you have all
of the packages needed to build native packages installed.

To build a dpkg for Debian/Ubuntu:

    dpkg-buildpackage -b -rfakeroot -us -uc

And, for CentOS/Fedora/RHEL/etc. RPM distributions:

    dzil build # Creates a tarball
    cp Virtualmin-Config-*.tar.gz ~/rpmbuild/SOURCES
    rpmbuild -bb virtualmin-config.spec

=head1 ATTRIBUTES

=over

=item bundle

Selects the plugin bundle to be installed. A bundle is a list of plugins
configured in a C<Virtualmin::Config::*> class.

=item include

One or more additional plugins to include in the C<run()>. This can be
used alongside C<bundle> or by itself. Dependencies will also be run, and
there is no way to disable dependencies (because they're depended on!).

=item exclude

One or more plugins to remove from the selected C<bundle>. Plugins that are
needed to resolve dependencies will be re-added automatically.

=back

=head1 METHODS

=over

=item run

This method figures out which plugins to run (based on the C<bundle>,
C<include>, and C<exclude> attributes.

=back

=head1 LICENSE AND COPYRIGHT

Licensed under the GPLv3. Copyright 2017 Virtualmin, Inc. <joe@virtualmin.com>

Youez - 2016 - github.com/yon3zu
LinuXploit