JFIF       %%-))-969KKd       %%-))-969KKd! f%eK_.T  v_/n6q>e}&Cx@t7OuqySN%y%tz@ Un(quo{tS]\~LzǚPk;fϛϹ2y-=_z.NWW7DW@'4`3w3rr;hP8B%ַBe]`7Ҽo1e)弆O|4Wk*}7Su[9=U 9 |_+:@}@˵u@ g<4N<@=/ I(~}qq=y- u|. y'`3S+4$e= k4P]M^_Nou*R-,X0EI}m&LtVȱa|R\@ ʟ+YeIlY`XV^HV/c-eb du ̈́_2+DpV ` ^^->t7JydE]I 8:7#j̀iiVbp~o݃[}zwGF@-(RTJY@ Ty}X 1!2AQaq"3BR`r@PSb #4CTs0DU$EFcd?Lc4\K#E1$@CV8OƂZ5g;.141;%]6e laǃpv8)80D1ŌxLgWYc+z%:( w^PtdԣV Z:qDsh W) ͷ+~FO]"բ?eN 4)WREZ;T+}]:FRtI ѱއ>'s_[\qNhK ' ^qJv9 ]ʜ1FMzwF8ѯBIp-g`?si;|Hr%>jOh29-+-gQmBH?3P9e')>[k^OaxtLiS30ҿ6*o--I$ 1 z2+OЪ+i˺,_n3(~}StUMc \xSmGD0jMB06%') #1c6s/iaIɉgC%Yoi**MHЛ=rh ĭ總 E>Jў2+ct/^$[_kAOʕicR4qm#Lw!Squ/:e%~zMBfa|e7PUC|"/)CD\cy gڰF9(?\jU+>Cwl#>x^'a7C}LYX<@X`W8P hۂx͍q֜?de1qe* NDuTm-ߣ y+pUy*9aĺ:P4n$2&BTϵ@ a>v3uc,(uF0jˊ́a~32f2=ήZe[r!F !Bu)b FŌt%41N/֑41n1|> 1^;1=IĖEpq%"{/~M.QWDdUA6~z>kPh2Oi?Uc[`+l;՚':۾ږtoZjQ7\:Z3}~ &ڮRQH{mDq0TaM5i:5sC0x<]=Mp c!C<6]~vpxeH[AmY'iԖ_~ a(Ȕ@+a< w] wbk1#aD 9. ?p$ Qؒi-8S㨸f45t:ʙѾ.{mMshU1k\z^*#It@ v:%#iSZ.{.Vemm,Z3*;HtU8E.v'e ޴ 4WwLDe)jY*R'?wM֣ b+IfO('Y J$o޼ l.蕁~ Y Em>Y^m"r^4w}2PI7R1gV\wtVT׿w'*N{ZGN8qzrM/LO~ O~|ڞ櫮o{\dV斀AJmn E#HQg$!{XM'{u* 4O)>F.";l2z3IJ2?Fh7)rjrv@ AJlУ 0`StpGD&nƒpxΡ}P늿D@cEH҆2[9a}U/biEzu)xYR>߹q (yA~ُp \U\L\6~" U'>GJOP,ko:JGI*٢C8f8굟m#GV̐Cj]}N_]aJulE.+I&y5 6*TGHZRů}efjv"\3/3_hq՝g !ir,ܐv%~*lXccyo) 拏Qp_tT3!,Dur!CH7;9GQQmE:ÑCaƅ;zeij;d+% z#e%gdI9E5BB&۟S"=C(>{֠ ɫNUळiu>;P}حW]ouBmJS0ktRtDm+$ԫU_dq)$ ʃnLGSፑf'vlzP/_]QԂ]ȗ|W\;wTSf!m,ri{w了enP(`*.1i2.}e@;HA&_N᷸1|:Gjڒj~i/֬]1(N +^ bQq:›m*o5Y(.JPV[3ޭj֭j+i(uָ]kV)A/%X Fa?8'o>ꝣKks\_k)S%zDTRw#h#e#1Euk&,Yw+Ap"PIZ*j*Ug">m>|ڇ(#FXzCi9%J'H3Xwi-9s0S`R^֮ YLJz+q^i}i1jLK+ [ NzDSq[+Q'ݖl=s<[iIWz=%}[jɁ֠$$N7IUm83SVŭw)#0$g C26^ʓW<=B>{R)&繻8j3cbbce7TE1r\'}FūLO+KʢXm/=H 6FaRHI^Lȹ83g9CM93쑑nE)=q4I$s'ݠajm]"O>L4Vb;(eHm$֫ӆyYtYYr(<Ɠ2Fm "f֒;Tξu8jZR$b!E*9 yy+V:Dm Œ9@-f*l2#ٿPt#T҂ӵ&;AȃWlf xϜZكfj%bs ,/uN{,Gz*kkP M6f/0[I;S)ml-؉)~q9v`ǣ4gZJ}h&dﺥ#{}uDa7j(I'2OҒMF7 .Ey<$5;2ժTI %)TwG54Ŭ Kb6rG;uq\[8DJ'i$?Pq-ݗs\JGkYO2%}b\9;Tk⾜3%qSd( [O4i'jQՃ &F Ҧ T2!G{N j~:Cz J3|xd(6TZ a b5gfK\I)WYARA(RVE$G8at̖qWq{B:Q^g3QzcAZrH|GMcjb{+)r=>:de:¹[QOe@>ISP1nIq!:3G).!ŶB꠲#0Eb2"Lt4ƺKCGn9P=PeoX8@fղ Gi9k ^aHAV<)GG*k_aUΜWsX4ʷ\%m,W*F}<1E/&NJIʳ:PmeRuń%A<ᶧ2s^s-9$PHw]ZB#[>9Fm*>Ut.HugK9uaAF.%fW&J~$k^S:iގT9_5`_bR`ܒ(8Fa?jMc4Pŭ!VB7 W+߀ i>b٠,]?<{aXgpJ]璹نrV53-)p:,R%>#W۲4K{%L%]ͅP,7"[NI:ܴ- AJr)#"=k#Eoa PP$C>7m_t ڠcJZymA [qwDw|*3(FMۭ\KP-'1WK, suu;~ZaTnyi$A =46i֑AUU"l:gA ]"8&ד<{z&O!WF^XGhViWM\q(*p#Fk?p\Ym*J3B3'%jn+ IG{VcVL-f7 #/u}5bD7XMi!{#b$U]q\RGa ;OZXv^WZ\ܭ( lhSˎ6 V'h GY{49$r8AIȃ#V$HL/~l.]:>29:EkSO%N$Ϋkͯ⫝̸yˮ0mE+IVwuIu>Xj%6@[k)aqJz|؏!Υ֔RP.l@tⵅkZg'5nrqDU^kJBEBfrG)+J$"dB3#ٔk4yQCz9S\8'#/5cˑYO(4dhIM<6BߢJNDZFEgD6vnl|^kr;^hϨ1!ʌ:įZBᝋx|T+'!c t"YH=)"g6-t+.Ur$+ZzRG s*f9_QY4El>DI[}B=>v)iTg[?oWwۿlWG69k{Qx]-*$<-=W¹nUĂ}G4tZ]^Q8m!])SyR)vOR(_Aiϵei#{$hਧ.SLN}߬e}EgZwgAWPBcZÖ']P ;2/hy}1M9Fj'.ӖZy-,r ND|jlC)jqSʚV)]p3;❀[:tBH##HqhZr\j"tG-тtHtB24PJ:w;xI0$ wEQ#)FejK rSw|">Tҙ#2Xc8g,(L`S2 tM>5@<)A71iXSlHڛ9(y4KUu:xARdf5\Zq|m{ӭjI8%. ڟ5pxvqd(9P$#"8CQ NKFۘ;RTPE8^`WãRxL髍{}ġͭ緗Ҍ/<xcKOVy0\{Uk85A07)_uCuopN>~3e e޽ytYnDm3)ܠ&,![y3CcؽK+raޱX~aRbm<wE #+ԺQXfGq+h[71_A* [V٣sCEXb\fNiXNݔz NҲ wrG"+ kлYI`ϼUՄ o9Vc7^[Y"E]W>(GSkt]Gcx~hM`?WV8q w< `bJb̑ NNG[xr̈>Kþ7<7H56pIEKgoE`?4e)ޛ)7M(-4ot}LDG6"qycg~x{>8.,7W_ɦ/nG|MFU^VYpa",BBBH;GC#2JerK*ZIqbIphت݉)c繥ՅVtLnEcf62:;\Rw@{ S5Q $ϑTz;EzFO5Pn.NA<~ҌoXR|Ig$^]A|^_mmҷj8mbMbՅHmvI_MqƊFCq&Б%z>ΧKEAg4y;/0f[|@$SG,h5@0RȁцEH-qm%Kb%Dx:0XNHWIᰵ$G)|^ χ,m,#%6צIpO FDFUH5JKlI>Vxn;ĶY;dZkarnƭaeG< W#9+؄l?jEmDo<~W++0#π*<.ۘZ+H$VfF|J&#N ?*<<⢌՞\.#I: !#Sh-4'F |-[WQFH7 )d`JFCbFɞ9N9vՅW4xPOBHc2a"*90Iv5IGI<hI I*'Ƿ.-m1ȼѹKF2ٷ;*A*T6FDSKsipI tGx f$9 Ǐzf{kd@r:/?(i^b 3)_g;&IEWu̓*2t7qL Ti5, wdXr&Gwmŏy)IJD+iE:v6[=9ʰ;q` =}#q:<>~mFU631TqQ (t2/c~ iK'y˴TlxsF_$ {a8[yfc>Y͘k8&9x\Նڻ{I&7+ fv F=,ꌼcCA[c:麑î6B겦&|mFm㪈Rfw .xJês1?_UnuQGǪ?6wR5b-:q{wK  !1A2Qq"@PRa #03BCSbr4$T`c?K)o<rzѸUL<6K4F̘E¹?Q7 QZtʄSV9iE$m6vU>8_F!zaS# j_4Jzm_bȚ;/:Iq7A9Qڜp͖!QTaOSTQzqS5U{LHOWc;TWUA}YWqUNKURѾĴ:gfYnQ*dv?F6i1G6[H?W*!Wl 8OlE?U$jv<&Rا@TG"X޺51?Ikymc{TLʧA4Y+#a=[#j Ge;@֍Xًv_(uVgJjbէz;5$۱ʡ)zv|eS u̎b{ean<6\;CQ<@΍b{ZM%[*n,z{EZR++e`w޹bh9cWF2ǴU:RMWd架;UJcDtK_G@y5GāYzF 8cWb㖈qw4ecqMis,)',o=ߘq5e-0j.}xNGq?d;D5T Dbng2!zN%i`IJ4]JN Kv ./iLZFOii h=yn%wdԲ:d뉆2 ]|1jnvBV@XkxN_;J Kӯ$ΟVlXm x[0'id =qcamjdӚȹaE4rY26!۩PS#U v{-51~q<'x;Z *'Fg"pojg9l:5W媴txyyUU%`_58Mngv[+jz>XwbIt$]ɞ*{ &b^F=C4ЏZ+ F\pR]9c1b * @@K,\ϔ =0<9N{U^ozﺊ<˒D4p2 ,Ƿ˗:#]j*&*jFTܪTdF@x8׭CX2U&y({9b駴to90\DUaaƏ@J:tš#x]d0pUiJ!Џ_1Ke9s$\t%ZiW-]ZVp[!c8OڋGPmM 'ÈX$I"s)Ȍ[ڦT ׫wJsn$QӨ]dJ[;~ԕ$lŧt}7RU@&778ܷK "$4C^iQ􄆺h(Cg#P QҤ1 7~V=6~8:#7/N5qz=8ȂiEʀJpnx8.9@~1m3sE? :zqGY}:O#yw23$1%m}8`E毑s_PznQ[LF%D;S)י -YW < quTݪҒl>I£$qG,Ȑf=g + `~}m5dO+ipyOfv]ishu*8tx"4n7putfV]D`i=ZHWIwȩ<[.P\xӊF)jbKfzASi{*u#8 9p뚰 H@ff>,`2 L6b8 mw{Hn3|b3Fg1e6C<eH /_~B#L *t0xbS% 웞: Aɔ89hjd[OY墪9sŎzNZ:&Yiu%MGw=Y ]QӍ -u@'p[wK%suԘse^wbiɫ:f䲯4ֶCP JFE32 X;yVeAbFyyX%H ,vgb~Ksʊ&V φ 5f̅2K7ZVԎBLǑ=zv-yq,nȇ'(:8$(rH*!S RI.Lj"9\W>])|›\o?-tEs#678PI:e5n$i0ScudA F(ET lq{讬3 28xۆ1IPԲ v0r$0{[J*cyA 1OQ-3f5;׆!`;mV[g{*d$221VR8jk.aH)7c=BO>~ T77XӇʧ _NاVV:Gye)NKk Ǵ`ՏS=Wy\cu`}@8C2su XqC Պ̜xEU ڭ{$KόI@F؛NLOA$F[X2rĔG L\wE2J3S8IJ2e`A7),b +noĐ<{XA"Lj%W̮RI7=e0O {F 3t6ǽN7aNHmo!_5G/GGz`ǻwl${wzd2X,!a/@X{wh]S MARIJUANA
— DIOS — NO — CREA — NADA — EN — VANO —
Linux vps-ed8565de 5.10.0-32-cloud-amd64 #1 SMP Debian 5.10.223-1 (2024-08-10) x86_64
  SOFT : Apache/2.4.65 (Debian) PHP : 7.4.33
/sbin/
51.178.36.14

 
[ NAME ] [ SIZE ] [ PERM ] [ DATE ] [ ACT ]
+FILE +DIR
a2disconf 15.895 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
a2dismod 15.895 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
a2dissite 15.895 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
a2enconf 15.895 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
a2enmod 15.895 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
a2ensite 15.895 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
a2query 9.639 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
aa-remove-unknown 2.996 KB -rwxr-xr-x 2021-04-03 06:09 R E G D
aa-status 34.438 KB -rwxr-xr-x 2021-04-03 06:09 R E G D
aa-teardown 0.136 KB -rwxr-xr-x 2020-12-07 11:27 R E G D
accessdb 14.383 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
add-shell 0.894 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
addgnupghome 3.003 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
addgroup 33.717 KB -rwxr-xr-x 2023-07-24 20:12 R E G D
adduser 33.717 KB -rwxr-xr-x 2023-07-24 20:12 R E G D
agetty 63.414 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
apache2 720.422 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
apache2ctl 7.06 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
apachectl 7.06 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
apparmor_parser 1.38 MB -rwxr-xr-x 2021-04-03 06:09 R E G D
apparmor_status 34.438 KB -rwxr-xr-x 2021-04-03 06:09 R E G D
applygnupgdefaults 2.165 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
arp 66.086 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
arpd 78.266 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
arptables 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
arptables-nft 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
arptables-nft-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
arptables-nft-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
arptables-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
arptables-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
badblocks 34.164 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
blkdeactivate 15.968 KB -rwxr-xr-x 2021-02-22 21:39 R E G D
blkdiscard 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
blkid 118.258 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
blkzone 74.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
blockdev 66.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
bridge 128.43 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
capsh 30.148 KB -rwxr-xr-x 2025-02-24 11:38 R E G D
cfdisk 102.586 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
cgdisk 210.328 KB -rwxr-xr-x 2021-02-09 05:35 R E G D
chcpu 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
check_forensic 0.93 KB -rwxr-xr-x 2011-04-26 15:10 R E G D
chgpasswd 66.047 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
chmem 62.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
chpasswd 58.047 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
chronyd 282.891 KB -rwxr-xr-x 2022-03-14 21:17 R E G D
chroot 46.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
cpgr 60.18 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
cppw 60.18 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
cron 54.484 KB -rwxr-xr-x 2021-02-22 22:43 R E G D
ctrlaltdel 38.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
debugfs 233.656 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
delgroup 15.18 KB -rwxr-xr-x 2023-07-24 20:12 R E G D
deluser 15.18 KB -rwxr-xr-x 2023-07-24 20:12 R E G D
depmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
devlink 166.469 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
dhclient 504.703 KB -rwxr-xr-x 2023-02-20 08:19 R E G D
dhclient-script 14.125 KB -rwxr-xr-x 2023-02-20 08:19 R E G D
dmsetup 166.867 KB -rwxr-xr-x 2021-02-22 21:39 R E G D
dmstats 166.867 KB -rwxr-xr-x 2021-02-22 21:39 R E G D
dpkg-fsys-usrunmess 15.104 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-preconfigure 3.577 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
dpkg-reconfigure 4.344 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
dumpe2fs 30.234 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2freefrag 14.227 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2fsck 339.656 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2image 38.234 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2label 110.406 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2mmpstatus 30.234 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2scrub 7.125 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2scrub_all 5.269 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e2undo 22.227 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e4crypt 26.227 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
e4defrag 34.148 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
ebtables 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ebtables-nft 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ebtables-nft-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ebtables-nft-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ebtables-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ebtables-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ethtool 520.008 KB -rwxr-xr-x 2020-10-28 21:37 R E G D
faillock 13.992 KB -rwxr-xr-x 2025-08-03 09:06 R E G D
fdformat 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fdisk 150.273 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
filefrag 18.172 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
findfs 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fixparts 74.32 KB -rwxr-xr-x 2021-02-09 05:35 R E G D
fsck 54.273 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fsck.cramfs 42.258 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fsck.ext2 339.656 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
fsck.ext3 339.656 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
fsck.ext4 339.656 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
fsck.minix 122.25 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fsfreeze 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fstab-decode 14.156 KB -rwxr-xr-x 2021-12-16 18:12 R E G D
fstrim 70.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
gdisk 210.328 KB -rwxr-xr-x 2021-02-09 05:35 R E G D
genl 82.289 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
getcap 14.148 KB -rwxr-xr-x 2025-02-24 11:38 R E G D
getpcaps 14.148 KB -rwxr-xr-x 2025-02-24 11:38 R E G D
getty 63.414 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
groupadd 86.766 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
groupdel 82.578 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
groupmems 62.086 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
groupmod 90.703 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
grpck 62.023 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
grpconv 57.898 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
grpunconv 57.898 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
grub-install 1.14 MB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-macbless 922.18 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkconfig 8.425 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkdevicemap 216.648 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-probe 938.492 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-reboot 4.727 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-set-default 3.472 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
halt 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
httxt2dbm 14.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
hwclock 102.352 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
iconvconfig 30.664 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
ifconfig 81.961 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
ifdown 86.078 KB -rwxr-xr-x 2020-11-04 06:37 R E G D
ifquery 86.078 KB -rwxr-xr-x 2020-11-04 06:37 R E G D
ifup 86.078 KB -rwxr-xr-x 2020-11-04 06:37 R E G D
init 1.66 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
insmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
installkernel 2.597 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
invoke-rc.d 16.12 KB -rwxr-xr-x 2020-12-14 20:19 R E G D
ip 617.805 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
ip6tables 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-apply 6.892 KB -rwxr-xr-x 2021-01-15 22:03 R E G D
ip6tables-legacy 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-legacy-restore 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-legacy-save 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-nft 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-nft-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-nft-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-restore-translate 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ip6tables-translate 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ipmaddr 18.5 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
iptables 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-apply 6.892 KB -rwxr-xr-x 2021-01-15 22:03 R E G D
iptables-legacy 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-legacy-restore 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-legacy-save 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-nft 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-nft-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-nft-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-restore 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-restore-translate 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-save 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptables-translate 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
iptunnel 26.492 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
isosize 30.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
killall5 26.227 KB -rwxr-xr-x 2021-12-16 18:12 R E G D
ldattach 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ldconfig 967.789 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
locale-gen 1.498 KB -rwxr-xr-x 2025-05-19 10:56 R E G D
logrotate 98.086 KB -rwxr-xr-x 2023-06-30 17:45 R E G D
logsave 14 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
losetup 110.336 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
make-ssl-cert 6.653 KB -rwxr-xr-x 2021-06-06 21:02 R E G D
mariadbd 23.44 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mii-tool 27 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
mke2fs 138.469 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
mkfs 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
mkfs.bfs 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
mkfs.cramfs 42.164 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
mkfs.ext2 138.469 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
mkfs.ext3 138.469 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
mkfs.ext4 138.469 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
mkfs.minix 110.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
mkhomedir_helper 22.016 KB -rwxr-xr-x 2025-08-03 09:06 R E G D
mkinitramfs 10.595 KB -rwxr-xr-x 2021-03-13 18:13 R E G D
mklost+found 14.148 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
mkswap 106.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
modinfo 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
modprobe 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
mysqld 23.44 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
nameif 18.68 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
newusers 94.641 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
nfnl_osf 18.148 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
nologin 14.148 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
pam-auth-update 20.201 KB -rwxr-xr-x 2025-08-03 09:06 R E G D
pam_getenv 2.822 KB -rwxr-xr-x 2025-07-22 19:53 R E G D
pam_timestamp_check 13.992 KB -rwxr-xr-x 2025-08-03 09:06 R E G D
phpdismod 7.107 KB -rwxr-xr-x 2020-05-11 13:22 R E G D
phpenmod 7.107 KB -rwxr-xr-x 2020-05-11 13:22 R E G D
phpquery 6.239 KB -rwxr-xr-x 2020-05-11 13:22 R E G D
pivot_root 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
plipconfig 14.422 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
postalias 21.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postcat 22.063 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postconf 187.469 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postdrop 18.117 KB -r-xr-sr-x 2024-03-09 15:38 R E G D
postfix 18.07 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postfix-add-filter 4.899 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postfix-add-policy 3.831 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postkick 13.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postlock 13.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postlog 14.148 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postmap 21.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postmulti 30.383 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
postqueue 22.07 KB -r-xr-sr-x 2024-03-09 15:38 R E G D
postsuper 30.289 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
posttls-finger 38.086 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
poweroff 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
pwck 58.016 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
pwconv 53.891 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
pwunconv 53.898 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
qemu-ga 595.32 KB -rwxr-xr-x 2025-09-08 21:30 R E G D
qemu-make-debian-root 3.217 KB -rwxr-xr-x 2025-09-02 15:58 R E G D
qmqp-sink 17.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
qmqp-source 22.008 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
qshape 12.548 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
rarp 37.117 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
raw 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
readprofile 22.258 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
reboot 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
remove-shell 0.94 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
resize2fs 62.227 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
resolvconf 4.926 KB -rwxr-xr-x 2021-01-06 17:54 R E G D
rmail 13.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
rmmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
rmt 58.961 KB -rwxr-xr-x 2024-01-20 09:59 R E G D
rmt-tar 58.961 KB -rwxr-xr-x 2024-01-20 09:59 R E G D
route 69.125 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
rsyslogd 706.328 KB -rwxr-xr-x 2022-05-20 21:05 R E G D
rtacct 48.289 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
rtcwake 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
rtmon 78.242 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
runlevel 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
runuser 70.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
sendmail 30.148 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
service 8.884 KB -rwxr-xr-x 2020-12-14 20:19 R E G D
setcap 14.148 KB -rwxr-xr-x 2025-02-24 11:38 R E G D
sfdisk 142.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
sgdisk 202.328 KB -rwxr-xr-x 2021-02-09 05:35 R E G D
shadowconfig 0.864 KB -rwxr-xr-x 2020-02-07 14:54 R E G D
shutdown 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
slattach 45.18 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
smtp-sink 34.93 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
smtp-source 30.016 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
split-logfile 2.358 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
sshd 867.633 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
start-stop-daemon 43.195 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
sudo_logsrvd 179.469 KB -rwxr-xr-x 2025-06-26 17:03 R E G D
sudo_sendlog 147 KB -rwxr-xr-x 2025-06-26 17:03 R E G D
sulogin 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
swaplabel 18.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
swapoff 22.219 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
swapon 50.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
switch_root 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
sysctl 30.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
tarcat 0.914 KB -rwxr-xr-x 2024-01-20 09:59 R E G D
tc 557.914 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
tcptraceroute 1.557 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
tcptraceroute.db 1.557 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
telinit 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
tipc 126.234 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
traceroute 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
tune2fs 110.406 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
tzconfig 0.104 KB -rwxr-xr-x 2025-04-01 08:18 R E G D
unix_chkpwd 38 KB -rwxr-sr-x 2025-08-03 09:06 R E G D
unix_update 38 KB -rwxr-xr-x 2025-08-03 09:06 R E G D
update-ca-certificates 5.176 KB -rwxr-xr-x 2021-01-19 10:11 R E G D
update-grub 0.063 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
update-grub2 0.063 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
update-icon-caches 0.582 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
update-info-dir 1.66 KB -rwxr-xr-x 2021-01-08 21:54 R E G D
update-initramfs 6.744 KB -rwxr-xr-x 2021-01-14 18:04 R E G D
update-locale 2.991 KB -rwxr-xr-x 2025-05-19 10:56 R E G D
update-mime 9.182 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
update-passwd 34.406 KB -rwxr-xr-x 2021-07-10 11:57 R E G D
update-pciids 1.712 KB -rwxr-xr-x 2020-12-24 17:49 R E G D
update-rc.d 16.918 KB -rwxr-xr-x 2020-12-14 20:19 R E G D
update-secureboot-policy 5.133 KB -rwxr-xr-x 2019-05-25 01:26 R E G D
useradd 139.523 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
userdel 94.703 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
usermod 135.336 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
uuidd 42.305 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
validlocale 1.731 KB -rwxr-xr-x 2025-05-19 10:55 R E G D
vigr 68.398 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
vipw 68.398 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
visudo 230.477 KB -rwxr-xr-x 2025-06-26 17:03 R E G D
wipefs 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
xtables-legacy-multi 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
xtables-monitor 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
xtables-nft-multi 215.07 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
zic 54.563 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
zramctl 114.344 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
REQUEST EXIT
©TheAlmightyZeus
#! /usr/bin/perl # vim: ft=perl # # update-rc.d Update the links in /etc/rc[0-9S].d/ # use strict; use warnings; # NB: All Perl modules used here must be in perl-base. Specifically, depending # on modules in perl-modules is not okay! See bug #716923 my $initd = "/etc/init.d"; my $etcd = "/etc/rc"; # Print usage message and die. sub usage { print STDERR "update-rc.d: error: @_\n" if ($#_ >= 0); print STDERR < remove update-rc.d [-f] defaults update-rc.d [-f] defaults-disabled update-rc.d disable|enable [S|2|3|4|5] -f: force The disable|enable API is not stable and might change in the future. EOF exit (1); } exit main(@ARGV); sub info { print STDOUT "update-rc.d: @_\n"; } sub warning { print STDERR "update-rc.d: warning: @_\n"; } sub error { print STDERR "update-rc.d: error: @_\n"; exit (1); } sub error_code { my $rc = shift; print STDERR "update-rc.d: error: @_\n"; exit ($rc); } sub make_path { my ($path) = @_; my @dirs = (); my @path = split /\//, $path; map { push @dirs, $_; mkdir join('/', @dirs), 0755; } @path; } # Given a script name, return any runlevels except 0 or 6 in which the # script is enabled. If that gives nothing and the script is not # explicitly disabled, return 6 if the script is disabled in runlevel # 0 or 6. sub script_runlevels { my ($scriptname) = @_; my @links=<"/etc/rc[S12345].d/S[0-9][0-9]$scriptname">; if (@links) { return map(substr($_, 7, 1), @links); } elsif (! <"/etc/rc[S12345].d/K[0-9][0-9]$scriptname">) { @links=<"/etc/rc[06].d/K[0-9][0-9]$scriptname">; return ("6") if (@links); } else { return ; } } # Map the sysvinit runlevel to that of openrc. sub openrc_rlconv { my %rl_table = ( "S" => "sysinit", "1" => "recovery", "2" => "default", "3" => "default", "4" => "default", "5" => "default", "6" => "off" ); my %seen; # return unique runlevels return grep !$seen{$_}++, map($rl_table{$_}, @_); } sub systemd_reload { if (-d "/run/systemd/system") { system("systemctl", "daemon-reload"); } } # Creates the necessary links to enable/disable a SysV init script (fallback if # no insserv/rc-update exists) sub make_sysv_links { my ($scriptname, $action) = @_; # for "remove" we cannot rely on the init script still being present, as # this gets called in postrm for purging. Just remove all symlinks. if ("remove" eq $action) { unlink($_) for glob("/etc/rc?.d/[SK][0-9][0-9]$scriptname"); return; } # if the service already has any links, do not touch them # numbers we don't care about, but enabled/disabled state we do return if glob("/etc/rc?.d/[SK][0-9][0-9]$scriptname"); # for "defaults", parse Default-{Start,Stop} and create these links my ($lsb_start_ref, $lsb_stop_ref) = parse_def_start_stop("/etc/init.d/$scriptname"); my $start = $action eq "defaults-disabled" ? "K" : "S"; foreach my $lvl (@$lsb_start_ref) { make_path("/etc/rc$lvl.d"); my $l = "/etc/rc$lvl.d/${start}01$scriptname"; symlink("../init.d/$scriptname", $l); } foreach my $lvl (@$lsb_stop_ref) { make_path("/etc/rc$lvl.d"); my $l = "/etc/rc$lvl.d/K01$scriptname"; symlink("../init.d/$scriptname", $l); } } # Creates the necessary links to enable/disable the service (equivalent of an # initscript) in systemd. sub make_systemd_links { my ($scriptname, $action) = @_; # If called by systemctl (via systemd-sysv-install), do nothing to avoid # an endless loop. if (defined($ENV{_SKIP_SYSTEMD_NATIVE}) && $ENV{_SKIP_SYSTEMD_NATIVE} == 1) { return; } # If systemctl is available, let's use that to create the symlinks. if (-x "/bin/systemctl" || -x "/usr/bin/systemctl") { # Set this env var to avoid loop in systemd-sysv-install. local $ENV{SYSTEMCTL_SKIP_SYSV} = 1; # Use --quiet to mimic the old update-rc.d behaviour. system("systemctl", "--quiet", "$action", "$scriptname"); return; } # In addition to the insserv call we also enable/disable the service # for systemd by creating the appropriate symlink in case there is a # native systemd service. In case systemd is not installed we do this # on our own instead of using systemctl. my $service_path; if (-f "/etc/systemd/system/$scriptname.service") { $service_path = "/etc/systemd/system/$scriptname.service"; } elsif (-f "/lib/systemd/system/$scriptname.service") { $service_path = "/lib/systemd/system/$scriptname.service"; } elsif (-f "/usr/lib/systemd/system/$scriptname.service") { $service_path = "/usr/lib/systemd/system/$scriptname.service"; } if (defined($service_path)) { my $changed_sth; open my $fh, '<', $service_path or error("unable to read $service_path"); while (<$fh>) { chomp; if (/^\s*WantedBy=(.+)$/i) { my $wants_dir = "/etc/systemd/system/$1.wants"; my $service_link = "$wants_dir/$scriptname.service"; if ("enable" eq $action) { make_path($wants_dir); symlink($service_path, $service_link); } else { unlink($service_link) if -e $service_link; } } } close($fh); } } sub create_sequence { my $force = (@_); my $insserv = "/usr/lib/insserv/insserv"; # Fallback for older insserv package versions [2014-04-16] $insserv = "/sbin/insserv" if ( -x "/sbin/insserv"); # If insserv is not configured it is not fully installed my $insserv_installed = -x $insserv && -e "/etc/insserv.conf"; my @opts; push(@opts, '-f') if $force; # Add force flag if initscripts is not installed # This enables inistcripts-less systems to not fail when a facility is missing unshift(@opts, '-f') unless is_initscripts_installed(); my $openrc_installed = -x "/sbin/openrc"; my $sysv_insserv ={}; $sysv_insserv->{remove} = sub { my ($scriptname) = @_; if ( -f "/etc/init.d/$scriptname" ) { return system($insserv, @opts, "-r", $scriptname) >> 8; } else { # insserv removes all dangling symlinks, no need to tell it # what to look for. my $rc = system($insserv, @opts) >> 8; error_code($rc, "insserv rejected the script header") if $rc; } }; $sysv_insserv->{defaults} = sub { my ($scriptname) = @_; if ( -f "/etc/init.d/$scriptname" ) { my $rc = system($insserv, @opts, $scriptname) >> 8; error_code($rc, "insserv rejected the script header") if $rc; } else { error("initscript does not exist: /etc/init.d/$scriptname"); } }; $sysv_insserv->{defaults_disabled} = sub { my ($scriptname) = @_; return if glob("/etc/rc?.d/[SK][0-9][0-9]$scriptname"); if ( -f "/etc/init.d/$scriptname" ) { my $rc = system($insserv, @opts, $scriptname) >> 8; error_code($rc, "insserv rejected the script header") if $rc; } else { error("initscript does not exist: /etc/init.d/$scriptname"); } sysv_toggle("disable", $scriptname); }; $sysv_insserv->{toggle} = sub { my ($action, $scriptname) = (shift, shift); sysv_toggle($action, $scriptname, @_); # Call insserv to resequence modified links my $rc = system($insserv, @opts, $scriptname) >> 8; error_code($rc, "insserv rejected the script header") if $rc; }; my $sysv_plain = {}; $sysv_plain->{remove} = sub { my ($scriptname) = @_; make_sysv_links($scriptname, "remove"); }; $sysv_plain->{defaults} = sub { my ($scriptname) = @_; make_sysv_links($scriptname, "defaults"); }; $sysv_plain->{defaults_disabled} = sub { my ($scriptname) = @_; make_sysv_links($scriptname, "defaults-disabled"); }; $sysv_plain->{toggle} = sub { my ($action, $scriptname) = (shift, shift); sysv_toggle($action, $scriptname, @_); }; my $systemd = {}; $systemd->{remove} = sub { systemd_reload; }; $systemd->{defaults} = sub { systemd_reload; }; $systemd->{defaults_disabled} = sub { systemd_reload; }; $systemd->{toggle} = sub { my ($action, $scriptname) = (shift, shift); make_systemd_links($scriptname, $action); systemd_reload; }; # Should we check exit codeS? my $openrc = {}; $openrc->{remove} = sub { my ($scriptname) = @_; system("rc-update", "-qqa", "delete", $scriptname); }; $openrc->{defaults} = sub { my ($scriptname) = @_; # OpenRC does not distinguish halt and reboot. They are handled # by /etc/init.d/transit instead. return if ("halt" eq $scriptname || "reboot" eq $scriptname); # no need to consider default disabled runlevels # because everything is disabled by openrc by default my @rls=script_runlevels($scriptname); if ( @rls ) { system("rc-update", "add", $scriptname, openrc_rlconv(@rls)); } }; $openrc->{defaults_disabled} = sub { # In openrc everything is disabled by default }; $openrc->{toggle} = sub { my ($action, $scriptname) = (shift, shift); my (@toggle_lvls, $start_lvls, $stop_lvls, @symlinks); my $lsb_header = lsb_header_for_script($scriptname); # Extra arguments to disable|enable action are runlevels. If none # given parse LSB info for Default-Start value. if ($#_ >= 0) { @toggle_lvls = @_; } else { ($start_lvls, $stop_lvls) = parse_def_start_stop($lsb_header); @toggle_lvls = @$start_lvls; if ($#toggle_lvls < 0) { error("$scriptname Default-Start contains no runlevels, aborting."); } } my %openrc_act = ( "disable" => "del", "enable" => "add" ); system("rc-update", $openrc_act{$action}, $scriptname, openrc_rlconv(@toggle_lvls)) }; my @sequence; if ($insserv_installed) { push @sequence, $sysv_insserv; } else { push @sequence, $sysv_plain; } # OpenRC has to be after sysv_{insserv,plain} because it depends on them to synchronize # states. if ($openrc_installed) { push @sequence, $openrc; } push @sequence, $systemd; return @sequence; } ## Dependency based sub main { my @args = @_; my $scriptname; my $action; my $force = 0; while($#args >= 0 && ($_ = $args[0]) =~ /^-/) { shift @args; if (/^-f$/) { $force = 1; next } if (/^-h|--help$/) { usage(); } usage("unknown option"); } usage("not enough arguments") if ($#args < 1); my @sequence = create_sequence($force); $scriptname = shift @args; $action = shift @args; if ("remove" eq $action) { foreach my $init (@sequence) { $init->{remove}->($scriptname); } } elsif ("defaults" eq $action || "start" eq $action || "stop" eq $action) { # All start/stop/defaults arguments are discarded so emit a # message if arguments have been given and are in conflict # with Default-Start/Default-Stop values of LSB comment. if ("start" eq $action || "stop" eq $action) { cmp_args_with_defaults($scriptname, $action, @args); } foreach my $init (@sequence) { $init->{defaults}->($scriptname); } } elsif ("defaults-disabled" eq $action) { foreach my $init (@sequence) { $init->{defaults_disabled}->($scriptname); } } elsif ("disable" eq $action || "enable" eq $action) { foreach my $init (@sequence) { $init->{toggle}->($action, $scriptname, @args); } } else { usage(); } } sub parse_def_start_stop { my $script = shift; my (%lsb, @def_start_lvls, @def_stop_lvls); open my $fh, '<', $script or error("unable to read $script"); while (<$fh>) { chomp; if (m/^### BEGIN INIT INFO\s*$/) { $lsb{'begin'}++; } elsif (m/^### END INIT INFO\s*$/) { $lsb{'end'}++; last; } elsif ($lsb{'begin'} and not $lsb{'end'}) { if (m/^# Default-Start:\s*(\S?.*)$/) { @def_start_lvls = split(' ', $1); } if (m/^# Default-Stop:\s*(\S?.*)$/) { @def_stop_lvls = split(' ', $1); } } } close($fh); return (\@def_start_lvls, \@def_stop_lvls); } sub lsb_header_for_script { my $name = shift; foreach my $file ("/etc/insserv/overrides/$name", "/etc/init.d/$name", "/usr/share/insserv/overrides/$name") { return $file if -s $file; } error("cannot find a LSB script for $name"); } sub cmp_args_with_defaults { my ($name, $act) = (shift, shift); my ($lsb_start_ref, $lsb_stop_ref, $arg_str, $lsb_str); my (@arg_start_lvls, @arg_stop_lvls, @lsb_start_lvls, @lsb_stop_lvls); ($lsb_start_ref, $lsb_stop_ref) = parse_def_start_stop("/etc/init.d/$name"); @lsb_start_lvls = @$lsb_start_ref; @lsb_stop_lvls = @$lsb_stop_ref; return if (!@lsb_start_lvls and !@lsb_stop_lvls); warning "start and stop actions are no longer supported; falling back to defaults"; my $start = $act eq 'start' ? 1 : 0; my $stop = $act eq 'stop' ? 1 : 0; # The legacy part of this program passes arguments starting with # "start|stop NN x y z ." but the insserv part gives argument list # starting with sequence number (ie. strips off leading "start|stop") # Start processing arguments immediately after the first seq number. my $argi = $_[0] eq $act ? 2 : 1; while (defined $_[$argi]) { my $arg = $_[$argi]; # Runlevels 0 and 6 are always stop runlevels if ($arg eq 0 or $arg eq 6) { $start = 0; $stop = 1; } elsif ($arg eq 'start') { $start = 1; $stop = 0; $argi++; next; } elsif ($arg eq 'stop') { $start = 0; $stop = 1; $argi++; next; } elsif ($arg eq '.') { next; } push(@arg_start_lvls, $arg) if $start; push(@arg_stop_lvls, $arg) if $stop; } continue { $argi++; } if ($#arg_start_lvls != $#lsb_start_lvls or join("\0", sort @arg_start_lvls) ne join("\0", sort @lsb_start_lvls)) { $arg_str = @arg_start_lvls ? "@arg_start_lvls" : "none"; $lsb_str = @lsb_start_lvls ? "@lsb_start_lvls" : "none"; warning "start runlevel arguments ($arg_str) do not match", "$name Default-Start values ($lsb_str)"; } if ($#arg_stop_lvls != $#lsb_stop_lvls or join("\0", sort @arg_stop_lvls) ne join("\0", sort @lsb_stop_lvls)) { $arg_str = @arg_stop_lvls ? "@arg_stop_lvls" : "none"; $lsb_str = @lsb_stop_lvls ? "@lsb_stop_lvls" : "none"; warning "stop runlevel arguments ($arg_str) do not match", "$name Default-Stop values ($lsb_str)"; } } sub sysv_toggle { my ($act, $name) = (shift, shift); my (@toggle_lvls, $start_lvls, $stop_lvls, @symlinks); my $lsb_header = lsb_header_for_script($name); # Extra arguments to disable|enable action are runlevels. If none # given parse LSB info for Default-Start value. if ($#_ >= 0) { @toggle_lvls = @_; } else { ($start_lvls, $stop_lvls) = parse_def_start_stop($lsb_header); @toggle_lvls = @$start_lvls; if ($#toggle_lvls < 0) { error("$name Default-Start contains no runlevels, aborting."); } } # Find symlinks in rc.d directories. Refuse to modify links in runlevels # not used for normal system start sequence. for my $lvl (@toggle_lvls) { if ($lvl !~ /^[S2345]$/) { warning("$act action will have no effect on runlevel $lvl"); next; } push(@symlinks, $_) for glob("/etc/rc$lvl.d/[SK][0-9][0-9]$name"); } if (!@symlinks) { error("no runlevel symlinks to modify, aborting!"); } # Toggle S/K bit of script symlink. for my $cur_lnk (@symlinks) { my $sk; my @new_lnk = split(//, $cur_lnk); if ("disable" eq $act) { $sk = rindex($cur_lnk, '/S') + 1; next if $sk < 1; $new_lnk[$sk] = 'K'; } else { $sk = rindex($cur_lnk, '/K') + 1; next if $sk < 1; $new_lnk[$sk] = 'S'; } rename($cur_lnk, join('', @new_lnk)) or error($!); } } # Try to determine if initscripts is installed sub is_initscripts_installed { # Check if mountkernfs is available. We cannot make inferences # using the running init system because we may be running in a # chroot return glob('/etc/rcS.d/S??mountkernfs.sh'); }