QFI phWdirty bitcorrupt bitexternal data filecompression typeextended L2 entrieslazy refcountsbitmapsraw external data  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~          oUEFI PART\io"oE jA14t(s*K>;\6]WVN bEEFI=rGy=iG}+R臝O]po/RrTs@*`@5{S`@ @$@!t5`@@@o4q-T)@SA{è_s@s3!`@t{SR[sR `@L5*4FR' RSA[B{è_s@{S[b4|F@4 R`9 RSA[B{è_ց@b`4 R @b 4` R 9{ d@@@$QB _AT@#@B R_T--` R @{¨_D@B@cR{GS!G[ ` @@9!?q!T@9qTqTR61 s@3t @t@9qT@9qT@9qAT@:Rr"kBzT!:R!rkTG0 * @`G4 % @@9 q!T@yPqTG! 5`s@sASA[B{èG`@@G"@94! @?qT@ @:P9${S[c@!@#? qA T@ @!@9?qT?q`T?q!T@#@SA[BcC{Ũ_@R_r`@@@C*(5a @ @9qaT @9qT@#@@$Qc T!@ @!Ts@@@Bs@{S@SA{Ũ_@9q T`@9Qq T@Rr@9!?qT@9!Q!?qhT5`(lZ(`@Os @@$Qs" T@!&@A+#@ @DA&#@4( 5{S[SA[B{è_!A5t@є~tTu&@u5s*Ң 5 խRA_CT_C@8 {S[ ` @SA[B{Ĩ_@ @Bu5t@uє}TSA@@[B{Ĩ@s"^@5 ղ$B շ{[SBc`@ ;LS R% ! B|@B!|@eBRBB$e@bRBBB$b@B%a@?!!!4b@cCSA[B{Ĩ9T { ;?_T u ;?_@9?qT@9?qT$@yq@TcRC CCRyR_֍7{S[Rcks@A4cTR6@ @TRE EBhu@B`!3@@?qaT @s<@|@lq(TdTL`TTE@T TPE$RETEBh$ER*SA[BcCkDsE{ɨ_TT  T@TxT !h(E" R,E0E($k;@{@52@`C2 @`O{5RE4Ek|@ T"hCR8ESA[BcCkDsE$E@R{ɨ!h>7@@RR?s"@"@ѽB@~4>@b@@W[ 9+0:p@`@_ @T!@!$Q {SHC@SA{¨_a@ 4s>@{S[R@t@y|@y|`  @z@ykT@SA[B{Ĩ_`@4v@ys@_kaT@_@{ @Re@C @C{¨C@R @R{¨_%{S[* HD@@SA[B{Ĩ_`RR"rw vu@95!A ?R"LDA xabx!R! ը@{S @a@ `CTD@@_SA{¨_ h@{S @a@ `AD@@_SA{¨_ Ո@@_@{S[c @@?DE@!Ta>@A ?@"aTt@`6@O`@MK RSA[BcC{Ĩ_"!<@@@T@;9@0R_ \R{CcS@Bk2DB#KB[LBsbTRPBTBR8*5#@yqT2]R\BTB@R+{ASB[CcDkEsF_@9qT@9qT @90qAT@9qT@9qT@qTRXB@w@y{@y)T2^R`BTBRҹ `2#KBdB`RLB hB#@RlBTB@R@4"= @^`@pBz>e@=RxBTB@R5 tB@ @!|B1`5B_ @;{@ykc TcC*`5I@??tt`#`6` tB@5@R{@y?kTT@R{@yk"(T@$qDz%Tw@y@!B 4@!B`4>e@>RB@TB@RhAT@94tB@5a@h`|A@@@6@@Z!?tZ!Z!:{#w@yBv:R@{@ykCT?tuK@?tu@6@@@?!tZZZќ@qT qT|`@`{cw@y{@?.@RBˀ?@R?@qTw@y![@R(@Aw@y|!|@Z@!! @?@k`T@9 q TrT?@~S@q6@ @y T4a5RR#rq` T8RBTB@R!"@95@ ?R!B@! "x`c2RBTB@R4@@GG@`4B@@@@@4S 9{`@X@4Ru`4tB@`@I@4"Rf@5B5@`B5@`"`@@y-@76c@a@.@?k`Tc@`@ ORBTB@RH`5@{@ykTcD`E?! !TfF!?!tTT TZBe@CYRTBR& 5KRfFB#KBLB<`F22e@cRB#KBLB12e@"cRB#KBLB(4)4"`@w@y@?k`T@@@6@D7c҂d6B@c@ @4CҢ  %@Zlu4BPi$5{ E @A ?B@a> @{¨_{!RS  @@ ~@SA{è_85Tp?l73`@`{[CS 4cnRŲCCCBCRH SA[B{è_C @`5cpRCCBC@R'  HO%g{C P$C@P${CDR{_ ՌRDD D իWRRB_B$@x4e qT d( R |S#|S@cl28#DL!c`2`2!`2888R8qhT8qHTe|Sd2cc`2%$89a ?qiTa ?qTR8a| S !h28a,Fc!`2c`288*{"S[5@yRQE*`@yPqTSA[B{èEyajt8 EukhTsR {B(EB@B0@C@c`?@{¨_{S[*c' E#@0@*[@?֡T'@`[@#*?@ [BSAcC{Ũ_'@CӀ{*ccEd @0@@?@{¨_BEC@c0@d@{S*F RSA{è_@Ҁ?րq/@k Tb@@?R p$!0F!@!0@!|@ BR!@F!@ p${RdF@,@4@R? { RF@!0@$l@Ҁ?{F@,@@?`CR{FFFR R{_{S*#['@@(G@SA[B{Ũ_*!,G!@!,@%,@?'@J#R0G4GB8GRm R ը`R{S[cc#_+{/@`G@#@SA[BcC{ƨ_C!G!@8,@'@?aT+@/@/@s'@C?/@+@ ը{S/5@@*SA{Ĩ_/@@^*@ ըғ{[S@@ R @<@(@ysR@ykT?L?@5@yk@!T!@d@C@,RSA[B{Ĩ_֥s<"@c@f@9߸qThc-Rrk T!@d@C@-R@!d@C@.R{S[cSA[BcC{Ĩ_֡Q!xS!t!!B@%A@9!?qTC@9E@yq DzT qT2RAABtA`Ri  qT`"R@9qTR9@95?9@9?qDzT9@y qT7RAABtA`R>  QB|@@AB@SQ 4@y4*AbӁW:@y qiTB BQB<_pq!DCzT#8@9_pqDCz!T"8BR!A! p$@y? qT@9B_qT@9_qT@!#@y q T"@9B_qT"@9_qAT_!@#{S@y TcCRBBBB`R SA{è_@9B_qT@9_q`T{@G 5_`@9a@9q'THTq T qTq@TR{G*SH*[IS@Fq`0TqaT?q@T?qaTE}`@y qT`@9qT`@9qTsB6v@yq(TS@{GSH[I_FFc? q`TT?qT?q@TF?qT?qATa@Fb@9a@9FKa@9 Fa@b@FAF?qT?qT8Fa@) F$F,A85a@(F&b@9 5a @(FYVS @9@5a@0F,F E,F=:7!4Fv QLqTB@y3`:@y+`6@y#`2@y`.@y`*@y `&@yg"@yf@ye@yd@yc@yb@ya @ydF~bAd@a"@9hFwdJ@9a@cF@9bB@9lFoc@yb@ya @ypFa @ytFxF$|F? qTT?qT?q@TF?qT?qATaFX`@9+`@9#`~@9`z@9`v@9 `r@9b@gn@9fj@9ef@9db@9a@F6a@b@FFQzS|@~@@FFaS A69F F?qTb@ya @ycFF{S[ S u 0=Vbn*I^nx"2C$@T{S[TR`@9@9!kT KSA[B{è_a@9@9?kTk`T`K* 5c@y q T`@9qT`@9q TsB5c@y qT@yqT@y qT q qZ R_{cRSR[vG@4@?@3hT 8@` @5@8@`@SA[BcC{Ĩ_s!G"@bcRGGBHGR3 R_ X!G"@_`TRGGBGRR?_|G@@@0@d@ c@d@@c@c0@ch@ !0@"@A @!@!0@!p@ {p@ zt@@dx@C|@R @{¨_@d@C|@R${@!@   qaT %@@0@@Ҁ?{ {S A@@ @$A@#@@SA{èր@`R @9@SA{è_{~{ A @_~ B6nB6q_{S[c'TCbBbBCR BB$B@R9SA[BcC{Ȩ_**(B#*@0@*@?`#R,BB$B`R'@@@'*#*?@@?ֵR,B@'@0@ @@R`?@7@!0B"@L '@4B  a o CR"RCR*{SSBb@B0@B@@?@B`@SA{è_@T@@?TBa@$0@@A$@SA{èa {[68CS @4A@T R @t@s@au2@@SA[B{ƨ_֯ RBCU3Sc!*}f@q T TQqT!47`.*}f*fh""qT`.}47`.*}f@"qT`.}4"qT`>}4{ScR[ks3@9753@1Tj 8SA[BcCkDsE{Ǩ__q`T3@ITj!8!3v@9?qT:R7@9!Q?$qT?q9BR*7@@9?qaT7@9!Q?$qhTBR*7@@8ߐqT54Q7RR@qT7߰qT7@9߰qT7@9ߔqT3@ITj 83 @97@ TqT@x|ߌqT`qT3@ߌq T qT3@Tj 8Q!! @!TqTq!T@9qAT@RRR3@iTRj 8 @yRRR33@iTRj 8 @yRRR33@iTRj 8!@9RRRC3%@9RRRC3@iTRj 8)@9RRRC3-@9RRRC1@9RRRCҽ5@9RRRCҴ9@9RRRC=@9RRRC3@iTRj 8iTRj!8R3***ITj 8*q Tq)TRk)Tk(TRARTd$*j 8!QR3!643RRRRRRRRRTb$BB`2j 8!Q"RPCiThb85E":53@RTC433@R_Tc4B3%43@RaT5BITj 8#R#iTha8h!8!#RITj 8!Rj38yM{S[c$@" AC"M|@iT@CŅRr"C"C@ ?֟`T[B*SAcC{ר_(* @('{CC#KCOCDG{ɨ_{CC#K!4DGO!@ ?CCD{ɨ_%{S7O 47@@@D;)FGnSA{ʨ_ T{S!d@`ACcaC*C@*SA{֨_R{C#KCOCD?{Ȩ_{S[$@" AC3`5`C T|@=C~SA[B{֨_{CC#KCOCDG{ɨ_$@aTíREEBE@RB "R{S*5@"R*`5@AA_ T}ehahakT㯀REEBE@R*,({@*SA _  bq{FF@F-{CC#K!PFGO!@ ?CCD %{S[)TRDGHGBLG@RSA[B{è_րANRRR@T@84j_qATcBQa*_qT?|qiT@T _qaT?<q87*4T?kTAda?qT r@Ta"Ra ?qTa BRa?qTabR5?k T"| SBQB$B*bDx"$B *yRRс$x {@TG_!G#@CGaTd@diTc@_ҡ_TG_TG:{_ H{[UASck@b"TTE9|_9ETV9"R򘧥@%qTqT@5szT@TDs"s?st T@!R@?4@b R@?@R R@@? T@#C@TˁA"@_TA'@"TcT?aT @9?T@?AT SA[BcCkD{Ũ__T"T&! ҇F{#@b"@"h&?aT"@BB!h&#!T!@@`RER$A A(A`Rv H 1[R`{S|| E SA{¨_GRhAlAB8pA`RNRT[`&{SR>SA{¨_` {cCA@b@_T{¨_a@҄?iT"@_T @D@DT@D@D"@@?!T??$@@B "@_T4B"@?T?T_T_ 1ѢR{CScfB!CsC`CkC[k T`@cT4kC@ukCC`CB"R`~{!? T!у(#EB "{!@5`C @R$CC @@`CTCC`Cs~s{R` @` EӢa@b{!@` `a6{ASB[CcDkEsF_RDC@CR`CrACaT`CC`CR^@`!"E!{>Ac!@{ASB[CcDkEsF"@k#@_T6 !@H[+^u`{S@SA{Ĩ_@~Eӡ@?"T`@B{Q$Q?qAz_{@BT @_#TcRDR|DxDD`R{_@ Չ%{@@S@RSA{è_AR:@as9'{S[ @tT*5c@`@`t R@ESABd[B E{Ĩ$E`Ry(E@@*SA[B{Ĩ_ Չ{SA!T!с@94"94hE@SA{è_ր@R ը{S*]5R@SA{Ĩ_*U 5"94E@MrPSA@{Ĩ~{S4[*zGQc,FQ`@4k`TsB`"@9kT`@4`@q9`@[BcCSA{Ũ_ָ4fqT'qiT~qT`"@95 %{S[cks3?`SAG[BcCkDsE@{Ȩ_ 6Rx@95?@`T?3@!R`??@?@*#Rf` 5B 5@@5G?@@To*~***J4G@5*@95qT*`4*A94A49"_qT q@T*o4o@44"9|@Ҁ@kTvw`@ !`4t@5@X6 ը{S@SAG@{Ĩ_RrG@ {S[cks@7`@9 47@94!x!Q!?dq TRw?ITcR@@@@RSA[BcCkDsE{Ȩ_@@aT@@sC`?a@?@"@4@ @LqT@ @D5 @hz84@7@3a@9?qTs?_ պ7PX{[S@;@ ;@SA[B{Ũ_c@@`?`4A;@@5s@X\A{S[c#@@@pTt#h58R"Aac@CcCC`@@|a@!@v8s@[#@SA[BcC{Ǩ_֚@#@cD@iT{CS@bR @&@!A@@!TAAA3{ARSB_ R_ պ{SD@"@kTR@*SA{è_*4Ҫ{S[Cc# *`4`@?@`?@4 R#@*SA[BcC{ɨ_/@?@@`vB@ @ qHT@B`?֡ @!Q 4B@ 5@BCR!BRBBX\P{S*@s5'@6PtC@5J*SA{è_?qAT@R?8@@eR`9@@5@@@`@94xC@@@'@B !Q`?|CRC@p@C5 ը: #({?q[SRDD@ RD/(q`T4qT D@$D ?RSA[B{Ĩ_Q?xqTq,T38s9"D9@ ? qTqmTB;sQ D38@ ? >Ad('O{S6pD`7tDGzDR@`@94~D? Qs{S*RZ3# R9&qT! @ ?RKQR5SA{Ĩ_b@@?֟*qTR{S[R@95SA[B{Ĩ_E?q30@a*@!@ h{ 8Ea@aR ?` @@?s@R @{¨_a@ ?@5s@h{SlEa@aR ?s@R*SA{¨_a@ ?֔*s@ hlqRrAzT{@{_ R_E@`_4@ ?@@@{¨_4@a{ h{4{_ E@֘!E _֘{(@ @!@ !1 @{¨_{S(@@@~$F*SA@{¨_֨{* R[c*GSG@GG>q^zT[BSAcC{Ũ_77@@@@qMz TRG@t4@RGGR d@G#*?4vG@77 ]24Rs@ JG "@@cRGGRB"@>"@>"@TG@@5@RGGRja@a'@ ?@42@c@'@`? 5a@!a@as@Rs*'@ ?4'@ ?d@G#*?֠5G@j`Ts@@c@"@'@`?֠5a@a@'@ ?'@ ? 48'-V{RS*@* @!P$@(@",@@sR b@bs@*@?`4@SA{è_ o<@!@@_P|S<rT"Q*B<_xq$IzT?4qTB$b7! 2_qT4qT?4qTR\qT!@ `"Q QB<<_|qBziT?4qaT*R$R_րRSA[B{è_{S@[*`@5@@?@`@b@a @ u5R!,A!@4R_R{è_{Rs@5'@6 A(62A 62A6262 tA@xA5@_q`T_|A@ @?qT?qT5@!A!@9@!@!A '1'0'A@A5@_q`T_A@ @ @'A@5A@qATA@ @$@ @y! @y@*_RR '{  B@5`@`BR$B(B!0@@` @R{¨_'{ 3PBa@?qTRR` @R{¨_֐'!B!@5{S3Ba@?1T!5RSA{¨_ R5RBBBBRa @?1`Tua@?1`TD R`RR_ '${5@B"|S!<@@ @@{¨{¨_{!,C!@ 3 @`4  @S@y @ <3{è_`&@d@?{S 5R@D@ @`X@kiTReshMRCy"RkTF_|qTZ"xq TM Tb@@?SA{ƨ_aRkTTA2RkT(T2Rk`T!2Rk@T*a2RkT!Rk!TRᢄRk T(TᡄRkTaRkTRaRkTRBRBRRBRRRRkThqT@!Xd!Y"x*bb @@? {S5XD@ @b@`&@@@?a@ ?b@~@SA{¨SA{¨_{!D 3@5@@#R/5/@47@`6@`TS6s2r@Ts2r@Ts2* @{Ĩ_D@@@@?֠3@*R{SE3 E@a$E*E@a,ESA{¨a@`Ea ?ր4af@`*Ea ?ր4SA{¨_ h'{TE XE` @{¨\E'@('{ E`@ @{¨_a@b@sb0(grub_efidisk_closegrub_efidisk_writegrub_efidisk_readgrub_efidisk_openget_drive_numbergrub_efidisk_iterate+ةIprobe_cachesgrub_arch_dl_check_headergrub_arch_dl_relocate_symbolsgrub_arm64_set_xxxx26_offsetgrub_buffer_ensure_spacegrub_buffer_advance_read_posgrub_cmd_lockdowngrub_core_cmd_insmodgrub_core_cmd_lsgrub_core_cmd_setgrub_core_cmd_unsetgrub_device_opengrub_disk_read_small_realgrub_disk_closegrub_disk_opengrub_disk_adjust_rangegrub_disk_readgrub_dl_addgrub_dl_load_core_noinitgrub_dl_check_headergrub_dl_resolve_namegrub_dl_check_licensegrub_dl_resolve_symbolsgrub_dl_relocate_symbolsgrub_dl_set_mem_attrsgrub_dl_flush_cachegrub_dl_load #l'2Gs{grub_efi_set_virtual_address_mapgrub_efi_set_variable_with_attributesgrub_efi_section_addrgrub_efi_get_filenamegrub_efi_duplicate_device_pathgrub_efi_register_loadergrub_efi_unregister_loadergrub_efi_get_firmware_fdtgrub_efi_allocate_pages_realgrub_efi_finish_boot_servicesgrub_efi_find_mmap_sizegrub_efi_mm_add_regionsadd_memory_regionsgrub_get_mem_attrsgrub_update_mem_attrsshim_lock_verifier_writeshim_lock_verifier_initgrub_efi_get_securebootgrub_file_get_device_namegrub_file_readgrub_file_seekgrub_fs_blocklist_opengrub_fs_probegrub_strtoullparse_printf_arg_fmtgrub_printf_fmt_checkgrub_utf8_to_utf16_allocgrub_memaligngrub_callocgrub_mm_init_regiongrub_buffer_peek_data_atgrub_buffer_append_datagrub_partition_probegrub_partition_check_containmentpart_iterategrub_verifiers_opengrub_verify_stringHPMKGORSIQ;<=>?@ABCDWXgrub_prepare_for_text_outputclosing %s efidiskdisk/efi/efidisk.cwriting 0x%lx sectors at the sector 0x%llx to %s no media in `%s'/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/disk/efi/efidisk.cfailure writing sector 0x%llx to `%s'reading 0x%lx sectors at the sector 0x%llx from %s failure reading sector 0x%llx from `%s'opening %s not a efidiskno such devicem = %p, last block = %llx, block size = %x, io align = %x invalid buffer alignment %dinvalid sector size %dopening %s succeeded hd%diterating %s fd%dcd%dd%d%s,%sRSDTXSDTFACPD$ line size: %lld cachekern/arm64/cache.cI$ line size: %lld Unknown cache line size!invalid arch-dependent ELF magic/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/arm64/dl.creloc offset is out of the segment reloc_abs64 %p => 0x%016llx dlkern/arm64/dl.ctrampoline out of rangerelocation out of range reloc_prel32 %p => 0x%016llx reloc_got %p => 0x%016llx (0x%016llx) HI21 out of rangeADR_GOT_PAGE without matching LD64_GOT_LO12_NCLD64_GOT_LO12_NC without matching ADR_GOT_PAGE%lxrelocation 0x%s is not implemented yet reloc_xxxx64 %p %c= 0x%lx dlkern/arm64/dl_helper.crequested buffer size is too large/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/buffer.coverflow is detectednew read is position beyond the end of the written data%s: the command is not allowed when lockdown is enforced/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/command.cone argument expected/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/corecmd.c/%s%s (%s) unknown invalid argument(%s): Filesystem is %s. %s='%s' not an assignmentSet an environment variable.[ENVVAR=VALUE]setRemove an environment variable.ENVVARunsetList devices or files.[ARG]lsInsert a module.MODULEinsmod%s,%srootvariable `%s' isn't set/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/device.c%s read failed diskkern/disk.cClosing `%s'. Opening `%s'... disk `%s' not found/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/disk.csector sizes of %d bytes aren't supported yetno such partitionOpening `%s' failed. attempt to read or write outside of partition/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/disk_common.cattempt to read or write outside of disk `%s'Read out of range: sector 0x%llx (%s). grub_disk_read(): Maximum recursion depth exceeded`%s' is already loaded/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/dl.cModule reference count overflowModule reference count underflowmodule at %p, size 0x%lx moduleskern/dl.cELF header smaller than expectedinvalid arch-independent ELF magicthis ELF file is not of the right typeELF sections outside corerelocating to %p .modnameno module name found.module_licenseno license section in module %.63sLICENSE=GPLv3.moddepsLICENSE=GPLv3+LICENSE=GPLv2+incompatible license in module %.63s: %.63ssymbol `%s' not foundgrub_mod_initgrub_mod_finiunknown symbol type `%d'relocation without symbol tableBUG: trying to protect pages outside of module allocation ("%s"): module base %p, size 0x%lx; tramp/GOT base 0x%lx, size 0x%lxflushing 0x%lx bytes at %p module name: %s init function: %p prefixvariable `%s' isn't set%s/arm64-efi/%s.modmismatched names.textdynamic_load_symbols %p Print infomation useful for GDB debugginggdbinfo/%sVendor(%pG)[%x: ]%02x set_virtual_address_map failed/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/efi/efi.ccould not set EFI variable `%s'section %d is last section; invalid. sectionskern/efi/efi.csection %d has bad magic %08x, should be %08x returning section info for section %d: "%s" malformed EFI Device Path node has length=%dmalformed EFI Device Path node has length=%lu/EndEntire /EndThis /EndUnknown(%x) /PCI(%x,%x)/PCCARD(%x)/MMap(%x,%llx,%llx)Hardware/Ctrl(%x)/UnknownHW(%x)/ACPI(%x,%x)/ACPI(%x,%s,%x)%s)/UnknownACPI(%x)/ATAPI(%x,%x,%x)/SCSI(%x,%x)/FibreChannel(%llx,%llx)/1394(%llx)/USB(%x,%x)/USBClass(%x,%x,%x,%x,%x)/I2O(%x)/MacAddr(%02x:%02x:%02x:%02x:%02x:%02x,%x)/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)/InfiniBand(%x,%llx,%llx,%llx)/UART(%llu,%u,%x,%x)/Sata(%x,%x,%x)/Vlan(%u)Messaging/UnknownMessaging(%x)/HD(%u,%llx,%llx,%02x%02x%02x%02x%02x%02x%02x%02x,%x,%x)/CD(%u,%llx,%llx)Media/File((null))/File(%s)/Protocol(%pG)/UnknownMedia(%x)/BIOS(%x,%x,%s)/UnknownBIOS(%x)/UnknownType(%x,%x) trying to register different loadertrying to unregister different loaderfound registered FDT @ %p linuxkern/efi/fdt.cnot found registered FDT mods%lxinvalid memory address (0x%s > 0x%s)/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/efi/mm.cout of memoryCould not malloc memory to remember EFI allocation. Exiting GRUB won't free all memory. grub_efi_drop_alloc() called with wrong page countcouldn't retrieve memory mapmemory map buffer is too smallcouldn't terminate EFI servicesTrying to terminate EFI services again cannot get EFI memory map sizecannot allocate memory for memory mapcannot allocate memory for new memory maperror fetching memory map from EFIMemory starting at %p (%u pages) marked as free, but EFI would not allocatecould not allocate all requested memory: %lu pages still required after iterating EFI memory map%s%s() called with invalid argumentsget 0x%lx-0x%lx:%c%c%c nxkern/efi/mm.crwxset +%s%s%s -%s%s%s on 0x%lx-0x%lx bad shim loader signature/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/efi/sb.cbad shim lock signatureshim protocols not foundprohibited by secure boot policyDisabledUNKNOWNEnabledSecureBootSetupModeMokSBStateUEFI Secure Boot state: %s efikern/efi/sb.cyshim_lockshim_lock_verifier0falsedisableno%s:%s:%d:error: %s. assert: error stack overflow detected! missing `%c' symbol/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/file.cattempt to read past the end of fileattempt to seek outside of the fileinvalid file name `%s'/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/fs.cbeyond the total sectorsDetecting %s... fskern/fs.c/error: %s. %s detection failed. unknown filesystemblocklistylockdownlockdown_verifier%sroot(%s)%scmdpatharm64-efiprefixnormal%s%sdebugalloverflow is detected/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/misc.cunrecognized numberpositional arguments are not supportedunexpected formattoo many arguments(null)%s:%s:%d:%s: invalid formatarguments types do not match Aborted. Press any key to exit.string too longunaligned pointer %pout of range pointer %pdouble free at %palloc magic is broken at %p: %lxnull in the ringfree magic is broken at %p: 0x%xout of memory/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/mm.coverflow is detectedUsing memory for heap: start=%p, end=%p regionskern/mm.cCan we extend into region above? %p + %lx + %lx ?=? %p Yes: extending a region: (%p -> %p) -> (%p -> %p) Can we extend into region below? %p + %x + %lx + %lx ?=? %p No: considering a new region at %p of size %lx overflow is detected/home/buildozer/aports/main/grub/src/grub-2.14/include/grub/buffer.hpeek out of rangeinvalid partition number/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/partition.c%dsub-partition %s%d of (%s,%s) ends after parent. partitionkern/partition.cmaximum recursion depth exceededUnknown command `%s'. helpTry `help' for usage > grub rescue> Rescue mode has been disabled... Entering rescue mode... file: %s type: %d verifykern/verifiers.cverification requested but nobody cares: %s/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/verifiers.cbig file signature isn't implemented yetpremature end of file %sstring: %s, type: %d verified_readcannot set text mode/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/term/efi/console.cconsolegrub_abortgrub_acpi_find_fadtgrub_acpi_find_tablegrub_arch_sync_cachesgrub_byte_checksumgrub_callocgrub_cli_set_auth_neededgrub_command_listgrub_current_contextgrub_debug_enabledgrub_device_closegrub_device_iterategrub_device_opengrub_disk_cache_tablegrub_disk_closegrub_disk_dev_listgrub_disk_dev_registergrub_disk_dev_unregistergrub_disk_firmware_finigrub_disk_firmware_is_taintedgrub_disk_native_sectorsgrub_disk_opengrub_disk_readgrub_disk_write_weakgrub_divmod64grub_dl_headgrub_dl_loadgrub_dl_load_core_noinitgrub_dl_refgrub_dl_ref_countgrub_dl_unloadgrub_dl_unrefgrub_efi_allocate_any_pagesgrub_efi_allocate_fixedgrub_efi_allocate_pages_realgrub_efi_close_protocolgrub_efi_compare_device_pathsgrub_efi_duplicate_device_pathgrub_efi_find_configuration_tablegrub_efi_find_last_device_pathgrub_efi_find_mmap_sizegrub_efi_finish_boot_servicesgrub_efi_free_pagesgrub_efi_get_device_pathgrub_efi_get_filenamegrub_efi_get_firmware_fdtgrub_efi_get_last_verified_image_handlegrub_efi_get_loaded_imagegrub_efi_get_memory_mapgrub_efi_get_ram_basegrub_efi_get_securebootgrub_efi_get_variablegrub_efi_get_variable_with_attributesgrub_efi_image_handlegrub_efi_is_finishedgrub_efi_load_imagegrub_efi_locate_handlegrub_efi_locate_protocolgrub_efi_net_configgrub_efi_open_protocolgrub_efi_print_device_pathgrub_efi_register_loadergrub_efi_set_text_modegrub_efi_set_variablegrub_efi_set_variable_to_stringgrub_efi_set_variable_with_attributesgrub_efi_set_virtual_address_mapgrub_efi_stallgrub_efi_start_imagegrub_efi_system_tablegrub_efi_unload_imagegrub_efi_unregister_loadergrub_efidisk_get_device_handlegrub_efidisk_get_device_namegrub_env_exportgrub_env_getgrub_env_get_boolgrub_env_setgrub_env_unsetgrub_env_update_get_sortedgrub_err_printed_errorsgrub_errmsggrub_errnogrub_errorgrub_error_popgrub_error_pushgrub_exitgrub_fatalgrub_file_closegrub_file_filtersgrub_file_get_device_namegrub_file_opengrub_file_progress_hookgrub_file_readgrub_file_seekgrub_file_verifiersgrub_freegrub_fs_autoload_hookgrub_fs_listgrub_fs_probegrub_get_mem_attrsgrub_get_time_msgrub_getkeygrub_getkey_noblockgrub_getkeystatusgrub_gettextgrub_is_cli_disabledgrub_is_cli_need_authgrub_is_lockdowngrub_is_using_legacy_shim_lock_protocolgrub_isspacegrub_key_is_interruptgrub_list_pushgrub_list_removegrub_lockdowngrub_machine_acpi_get_rsdpv1grub_machine_acpi_get_rsdpv2grub_machine_finigrub_mallocgrub_memaligngrub_memcmpgrub_memcpygrub_memmovegrub_memsetgrub_millisleepgrub_mm_add_region_fngrub_mm_basegrub_modbasegrub_named_list_findgrub_net_opengrub_net_poll_cards_idlegrub_parser_cmdline_stategrub_parser_split_cmdlinegrub_partition_get_namegrub_partition_iterategrub_partition_map_listgrub_partition_probegrub_print_errorgrub_printfgrub_printf_grub_printf_fmt_checkgrub_puts_grub_real_dprintfgrub_reallocgrub_rebootgrub_refreshgrub_register_command_lockdowngrub_register_command_priogrub_register_variable_hookgrub_snprintfgrub_strchrgrub_strcmpgrub_strcpygrub_strdupgrub_strlengrub_strncmpgrub_strndupgrub_strrchrgrub_strtokgrub_strtok_rgrub_strtoulgrub_strtoullgrub_strwordgrub_term_highlight_colorgrub_term_inputsgrub_term_inputs_disabledgrub_term_normal_colorgrub_term_outputsgrub_term_outputs_disabledgrub_term_poll_usbgrub_unregister_commandgrub_update_mem_attrsgrub_utf8_to_utf16_allocgrub_verify_stringgrub_vprintfgrub_vsnprintfgrub_xasprintfgrub_xputsgrub_xvasprintfgrub_zallocmemcmpmemcpymemmovememsetLICENSE=GPLv3+T![NYd9ir;0--'?Mqh":(P>?p>X@:p8:Fp?8B0:pVJH'pI9|IHIVptrtr[Xmpddnd=xUvstcahp@h\Xu*}@8X0`n^oXZZ@[.0eInb[yx^_]]@\o00pFXoa L'2=@L\\f8qP`H4 &3ؕA~Tepqx%pș+̘:KLYWvW,\X P H# 0 E :S xl  `  x X   !!&!RrTs@*`@5{S`@ @$@!t5`@@@o4q-T)@SA{è_s@s3!`@t{SR[sR `@L5*4FR' RSA[B{è_s@{S[b4|F@4 R`9 RSA[B{è_ց@b`4 R @b 4` R 9{ d@@@$QB _AT@#@B R_T--` R @{¨_D@B@cR{GS!G[ ` @@9!?q!T@9qTqTR61 s@3t @t@9qT@9qT@9qAT@:Rr"kBzT!:R!rkTG0 * @`G4 % @@9 q!T@yPqTG! 5`s@sASA[B{èG`@@G"@94! @?qT@ @:P9${S[c@!@#? qA T@ @!@9?qT?q`T?q!T@#@SA[BcC{Ũ_@R_r`@@@C*(5a @ @9qaT @9qT@#@@$Qc T!@ @!Ts@@@Bs@{S@SA{Ũ_@9q T`@9Qq T@Rr@9!?qT@9!Q!?qhT5`(lZ(`@Os @@$Qs" T@!&@A+#@ @DA&#@4( 5{S[SA[B{è_!A5t@є~tTu&@u5s*Ң 5 խRA_CT_C@8 {S[ ` @SA[B{Ĩ_@ @Bu5t@uє}TSA@@[B{Ĩ@s"^@5 ղ$B շ{[SBc`@ ;LS R% ! B|@B!|@eBRBB$e@bRBBB$b@B%a@?!!!4b@cCSA[B{Ĩ9T { ;?_T u ;?_@9?qT@9?qT$@yq@TcRC CCRyR_֍7{S[Rcks@A4cTR6@ @TRE EBhu@B`!3@@?qaT @s<@|@lq(TdTL`TTE@T TPE$RETEBh$ER*SA[BcCkDsE{ɨ_TT  T@TxT !h(E" R,E0E($k;@{@52@`C2 @`O{5RE4Ek|@ T"hCR8ESA[BcCkDsE$E@R{ɨ!h>7@@RR?s"@"@ѽB@~4>@b@@W[ 9+0:p@`@_ @T!@!$Q {SHC@SA{¨_a@ 4s>@{S[R@t@y|@y|`  @z@ykT@SA[B{Ĩ_`@4v@ys@_kaT@_@{ @Re@C @C{¨C@R @R{¨_%{S[* HD@@SA[B{Ĩ_`RR"rw vu@95!A ?R"LDA xabx!R! ը@{S @a@ `CTD@@_SA{¨_ h@{S @a@ `AD@@_SA{¨_ Ո@@_@{S[c @@?DE@!Ta>@A ?@"aTt@`6@O`@MK RSA[BcC{Ĩ_"!<@@@T@;9@0R_ \R{CcS@Bk2DB#KB[LBsbTRPBTBR8*5#@yqT2]R\BTB@R+{ASB[CcDkEsF_@9qT@9qT @90qAT@9qT@9qT@qTRXB@w@y{@y)T2^R`BTBRҹ `2#KBdB`RLB hB#@RlBTB@R@4"= @^`@pBz>e@=RxBTB@R5 tB@ @!|B1`5B_ @;{@ykc TcC*`5I@??tt`#`6` tB@5@R{@y?kTT@R{@yk"(T@$qDz%Tw@y@!B 4@!B`4>e@>RB@TB@RhAT@94tB@5a@h`|A@@@6@@Z!?tZ!Z!:{#w@yBv:R@{@ykCT?tuK@?tu@6@@@?!tZZZќ@qT qT|`@`{cw@y{@?.@RBˀ?@R?@qTw@y![@R(@Aw@y|!|@Z@!! @?@k`T@9 q TrT?@~S@q6@ @y T4a5RR#rq` T8RBTB@R!"@95@ ?R!B@! "x`c2RBTB@R4@@GG@`4B@@@@@4S 9{`@X@4Ru`4tB@`@I@4"Rf@5B5@`B5@`"`@@y-@76c@a@.@?k`Tc@`@ ORBTB@RH`5@{@ykTcD`E?! !TfF!?!tTT TZBe@CYRTBR& 5KRfFB#KBLB<`F22e@cRB#KBLB12e@"cRB#KBLB(4)4"`@w@y@?k`T@@@6@D7c҂d6B@c@ @4CҢ  %@Zlu4BPi$5{ E @A ?B@a> @{¨_{!RS  @@ ~@SA{è_85Tp?l73`@`{[CS 4cnRŲCCCBCRH SA[B{è_C @`5cpRCCBC@R'  HO%g{C P$C@P${CDR{_ ՌRDD D իWRRB_B$@x4e qT d( R |S#|S@cl28#DL!c`2`2!`2888R8qhT8qHTe|Sd2cc`2%$89a ?qiTa ?qTR8a| S !h28a,Fc!`2c`288*{"S[5@yRQE*`@yPqTSA[B{èEyajt8 EukhTsR {B(EB@B0@C@c`?@{¨_{S[*c' E#@0@*[@?֡T'@`[@#*?@ [BSAcC{Ũ_'@CӀ{*ccEd @0@@?@{¨_BEC@c0@d@{S*F RSA{è_@Ҁ?րq/@k Tb@@?R p$!0F!@!0@!|@ BR!@F!@ p${RdF@,@4@R? { RF@!0@$l@Ҁ?{F@,@@?`CR{FFFR R{_{S*#['@@(G@SA[B{Ũ_*!,G!@!,@%,@?'@J#R0G4GB8GRm R ը`R{S[cc#_+{/@`G@#@SA[BcC{ƨ_C!G!@8,@'@?aT+@/@/@s'@C?/@+@ ը{S/5@@*SA{Ĩ_/@@^*@ ըғ{[S@@ R @<@(@ysR@ykT?L?@5@yk@!T!@d@C@,RSA[B{Ĩ_֥s<"@c@f@9߸qThc-Rrk T!@d@C@-R@!d@C@.R{S[cSA[BcC{Ĩ_֡Q!xS!t!!B@%A@9!?qTC@9E@yq DzT qT2RAABtA`Ri  qT`"R@9qTR9@95?9@9?qDzT9@y qT7RAABtA`R>  QB|@@AB@SQ 4@y4*AbӁW:@y qiTB BQB<_pq!DCzT#8@9_pqDCz!T"8BR!A! p$@y? qT@9B_qT@9_qT@!#@y q T"@9B_qT"@9_qAT_!@#{S@y TcCRBBBB`R SA{è_@9B_qT@9_q`T{@G 5_`@9a@9q'THTq T qTq@TR{G*SH*[IS@Fq`0TqaT?q@T?qaTE}`@y qT`@9qT`@9qTsB6v@yq(TS@{GSH[I_FFc? q`TT?qT?q@TF?qT?qATa@Fb@9a@9FKa@9 Fa@b@FAF?qT?qT8Fa@) F$F,A85a@(F&b@9 5a @(FYVS @9@5a@0F,F E,F=:7!4Fv QLqTB@y3`:@y+`6@y#`2@y`.@y`*@y `&@yg"@yf@ye@yd@yc@yb@ya @ydF~bAd@a"@9hFwdJ@9a@cF@9bB@9lFoc@yb@ya @ypFa @ytFxF$|F? qTT?qT?q@TF?qT?qATaFX`@9+`@9#`~@9`z@9`v@9 `r@9b@gn@9fj@9ef@9db@9a@F6a@b@FFQzS|@~@@FFaS A69F F?qTb@ya @ycFF{S[ S u 0=Vbn*I^nx"2C$@T{S[TR`@9@9!kT KSA[B{è_a@9@9?kTk`T`K* 5c@y q T`@9qT`@9q TsB5c@y qT@yqT@y qT q qZ R_{cRSR[vG@4@?@3hT 8@` @5@8@`@SA[BcC{Ĩ_s!G"@bcRGGBHGR3 R_ X!G"@_`TRGGBGRR?_|G@@@0@d@ c@d@@c@c0@ch@ !0@"@A @!@!0@!p@ {p@ zt@@dx@C|@R @{¨_@d@C|@R${@!@   qaT %@@0@@Ҁ?{ {S A@@ @$A@#@@SA{èր@`R @9@SA{è_{~{ A @_~ B6nB6q_{S[c'TCbBbBCR BB$B@R9SA[BcC{Ȩ_**(B#*@0@*@?`#R,BB$B`R'@@@'*#*?@@?ֵR,B@'@0@ @@R`?@7@!0B"@L '@4B  a o CR"RCR*{SSBb@B0@B@@?@B`@SA{è_@T@@?TBa@$0@@A$@SA{èa {[68CS @4A@T R @t@s@au2@@SA[B{ƨ_֯ RBCU3Sc!*}f@q T TQqT!47`.*}f*fh""qT`.}47`.*}f@"qT`.}4"qT`>}4{ScR[ks3@9753@1Tj 8SA[BcCkDsE{Ǩ__q`T3@ITj!8!3v@9?qT:R7@9!Q?$qT?q9BR*7@@9?qaT7@9!Q?$qhTBR*7@@8ߐqT54Q7RR@qT7߰qT7@9߰qT7@9ߔqT3@ITj 83 @97@ TqT@x|ߌqT`qT3@ߌq T qT3@Tj 8Q!! @!TqTq!T@9qAT@RRR3@iTRj 8 @yRRR33@iTRj 8 @yRRR33@iTRj 8!@9RRRC3%@9RRRC3@iTRj 8)@9RRRC3-@9RRRC1@9RRRCҽ5@9RRRCҴ9@9RRRC=@9RRRC3@iTRj 8iTRj!8R3***ITj 8*q Tq)TRk)Tk(TRARTd$*j 8!QR3!643RRRRRRRRRTb$BB`2j 8!Q"RPCiThb85E":53@RTC433@R_Tc4B3%43@RaT5BITj 8#R#iTha8h!8!#RITj 8!Rj38yM{S[c$@" AC"M|@iT@CŅRr"C"C@ ?֟`T[B*SAcC{ר_(* @('{CC#KCOCDG{ɨ_{CC#K!4DGO!@ ?CCD{ɨ_%{S7O 47@@@D;)FGnSA{ʨ_ T{S!d@`ACcaC*C@*SA{֨_R{C#KCOCD?{Ȩ_{S[$@" AC3`5`C T|@=C~SA[B{֨_{CC#KCOCDG{ɨ_$@aTíREEBE@RB "R{S*5@"R*`5@AA_ T}ehahakT㯀REEBE@R*,({@*SA _  bq{FF@F-{CC#K!PFGO!@ ?CCD %{S[)TRDGHGBLG@RSA[B{è_րANRRR@T@84j_qATcBQa*_qT?|qiT@T _qaT?<q87*4T?kTAda?qT r@Ta"Ra ?qTa BRa?qTabR5?k T"| SBQB$B*bDx"$B *yRRс$x {@TG_!G#@CGaTd@diTc@_ҡ_TG_TG:{_ H{[UASck@b"TTE9|_9ETV9"R򘧥@%qTqT@5szT@TDs"s?st T@!R@?4@b R@?@R R@@? T@#C@TˁA"@_TA'@"TcT?aT @9?T@?AT SA[BcCkD{Ũ__T"T&! ҇F{#@b"@"h&?aT"@BB!h&#!T!@@`RER$A A(A`Rv H 1[R`{S|| E SA{¨_GRhAlAB8pA`RNRT[`&{SR>SA{¨_` {cCA@b@_T{¨_a@҄?iT"@_T @D@DT@D@D"@@?!T??$@@B "@_T4B"@?T?T_T_ 1ѢR{CScfB!CsC`CkC[k T`@cT4kC@ukCC`CB"R`~{!? T!у(#EB "{!@5`C @R$CC @@`CTCC`Cs~s{R` @` EӢa@b{!@` `a6{ASB[CcDkEsF_RDC@CR`CrACaT`CC`CR^@`!"E!{>Ac!@{ASB[CcDkEsF"@k#@_T6 !@H[+^u`{S@SA{Ĩ_@~Eӡ@?"T`@B{Q$Q?qAz_{@BT @_#TcRDR|DxDD`R{_@ Չ%{@@S@RSA{è_AR:@as9'{S[ @tT*5c@`@`t R@ESABd[B E{Ĩ$E`Ry(E@@*SA[B{Ĩ_ Չ{SA!T!с@94"94hE@SA{è_ր@R ը{S*]5R@SA{Ĩ_*U 5"94E@MrPSA@{Ĩ~{S4[*zGQc,FQ`@4k`TsB`"@9kT`@4`@q9`@[BcCSA{Ũ_ָ4fqT'qiT~qT`"@95 %{S[cks3?`SAG[BcCkDsE@{Ȩ_ 6Rx@95?@`T?3@!R`??@?@*#Rf` 5B 5@@5G?@@To*~***J4G@5*@95qT*`4*A94A49"_qT q@T*o4o@44"9|@Ҁ@kTvw`@ !`4t@5@X6 ը{S@SAG@{Ĩ_RrG@ {S[cks@7`@9 47@94!x!Q!?dq TRw?ITcR@@@@RSA[BcCkDsE{Ȩ_@@aT@@sC`?a@?@"@4@ @LqT@ @D5 @hz84@7@3a@9?qTs?_ պ7PX{[S@;@ ;@SA[B{Ũ_c@@`?`4A;@@5s@X\A{S[c#@@@pTt#h58R"Aac@CcCC`@@|a@!@v8s@[#@SA[BcC{Ǩ_֚@#@cD@iT{CS@bR @&@!A@@!TAAA3{ARSB_ R_ պ{SD@"@kTR@*SA{è_*4Ҫ{S[Cc# *`4`@?@`?@4 R#@*SA[BcC{ɨ_/@?@@`vB@ @ qHT@B`?֡ @!Q 4B@ 5@BCR!BRBBX\P{S*@s5'@6PtC@5J*SA{è_?qAT@R?8@@eR`9@@5@@@`@94xC@@@'@B !Q`?|CRC@p@C5 ը: #({?q[SRDD@ RD/(q`T4qT D@$D ?RSA[B{Ĩ_Q?xqTq,T38s9"D9@ ? qTqmTB;sQ D38@ ? >Ad('O{S6pD`7tDGzDR@`@94~D? Qs{S*RZ3# R9&qT! @ ?RKQR5SA{Ĩ_b@@?֟*qTR{S[R@95SA[B{Ĩ_E?q30@a*@!@ h{ 8Ea@aR ?` @@?s@R @{¨_a@ ?@5s@h{SlEa@aR ?s@R*SA{¨_a@ ?֔*s@ hlqRrAzT{@{_ R_E@`_4@ ?@@@{¨_4@a{ h{4{_ E@֘!E _֘{(@ @!@ !1 @{¨_{S(@@@~$F*SA@{¨_֨{* R[c*GSG@GG>q^zT[BSAcC{Ũ_77@@@@qMz TRG@t4@RGGR d@G#*?4vG@77 ]24Rs@ JG "@@cRGGRB"@>"@>"@TG@@5@RGGRja@a'@ ?@42@c@'@`? 5a@!a@as@Rs*'@ ?4'@ ?d@G#*?֠5G@j`Ts@@c@"@'@`?֠5a@a@'@ ?'@ ? 48'-V{RS*@* @!P$@(@",@@sR b@bs@*@?`4@SA{è_ o<@!@@_P|S<rT"Q*B<_xq$IzT?4qTB$b7! 2_qT4qT?4qTR\qT!@ `"Q QB<<_|qBziT?4qaT*R$R_րRSA[B{è_{S@[*`@5@@?@`@b@a @ u5R!,A!@4R_R{è_{Rs@5'@6 A(62A 62A6262 tA@xA5@_q`T_|A@ @?qT?qT5@!A!@9@!@!A '1'0'A@A5@_q`T_A@ @ @'A@5A@qATA@ @$@ @y! @y@*_RR '{  B@5`@`BR$B(B!0@@` @R{¨_'{ 3PBa@?qTRR` @R{¨_֐'!B!@5{S3Ba@?1T!5RSA{¨_ R5RBBBBRa @?1`Tua@?1`TD R`RR_ '${5@B"|S!<@@ @@{¨{¨_{!,C!@ 3 @`4  @S@y @ <3{è_`&@d@?{S 5R@D@ @`X@kiTReshMRCy"RkTF_|qTZ"xq TM Tb@@?SA{ƨ_aRkTTA2RkT(T2Rk`T!2Rk@T*a2RkT!Rk!TRᢄRk T(TᡄRkTaRkTRaRkTRBRBRRBRRRRkThqT@!Xd!Y"x*bb @@? {S5XD@ @b@`&@@@?a@ ?b@~@SA{¨SA{¨_{!D 3@5@@#R/5/@47@`6@`TS6s2r@Ts2r@Ts2* @{Ĩ_D@@@@?֠3@*R{SE3 E@a$E*E@a,ESA{¨a@`Ea ?ր4af@`*Ea ?ր4SA{¨_ h'{TE XE` @{¨\E'@('{ E`@ @{¨_a@b@sb0(grub_efidisk_closegrub_efidisk_writegrub_efidisk_readgrub_efidisk_openget_drive_numbergrub_efidisk_iterate+ةIprobe_cachesgrub_arch_dl_check_headergrub_arch_dl_relocate_symbolsgrub_arm64_set_xxxx26_offsetgrub_buffer_ensure_spacegrub_buffer_advance_read_posgrub_cmd_lockdowngrub_core_cmd_insmodgrub_core_cmd_lsgrub_core_cmd_setgrub_core_cmd_unsetgrub_device_opengrub_disk_read_small_realgrub_disk_closegrub_disk_opengrub_disk_adjust_rangegrub_disk_readgrub_dl_addgrub_dl_load_core_noinitgrub_dl_check_headergrub_dl_resolve_namegrub_dl_check_licensegrub_dl_resolve_symbolsgrub_dl_relocate_symbolsgrub_dl_set_mem_attrsgrub_dl_flush_cachegrub_dl_load #l'2Gs{grub_efi_set_virtual_address_mapgrub_efi_set_variable_with_attributesgrub_efi_section_addrgrub_efi_get_filenamegrub_efi_duplicate_device_pathgrub_efi_register_loadergrub_efi_unregister_loadergrub_efi_get_firmware_fdtgrub_efi_allocate_pages_realgrub_efi_finish_boot_servicesgrub_efi_find_mmap_sizegrub_efi_mm_add_regionsadd_memory_regionsgrub_get_mem_attrsgrub_update_mem_attrsshim_lock_verifier_writeshim_lock_verifier_initgrub_efi_get_securebootgrub_file_get_device_namegrub_file_readgrub_file_seekgrub_fs_blocklist_opengrub_fs_probegrub_strtoullparse_printf_arg_fmtgrub_printf_fmt_checkgrub_utf8_to_utf16_allocgrub_memaligngrub_callocgrub_mm_init_regiongrub_buffer_peek_data_atgrub_buffer_append_datagrub_partition_probegrub_partition_check_containmentpart_iterategrub_verifiers_opengrub_verify_stringHPMKGORSIQ;<=>?@ABCDWXgrub_prepare_for_text_outputclosing %s efidiskdisk/efi/efidisk.cwriting 0x%lx sectors at the sector 0x%llx to %s no media in `%s'/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/disk/efi/efidisk.cfailure writing sector 0x%llx to `%s'reading 0x%lx sectors at the sector 0x%llx from %s failure reading sector 0x%llx from `%s'opening %s not a efidiskno such devicem = %p, last block = %llx, block size = %x, io align = %x invalid buffer alignment %dinvalid sector size %dopening %s succeeded hd%diterating %s fd%dcd%dd%d%s,%sRSDTXSDTFACPD$ line size: %lld cachekern/arm64/cache.cI$ line size: %lld Unknown cache line size!invalid arch-dependent ELF magic/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/arm64/dl.creloc offset is out of the segment reloc_abs64 %p => 0x%016llx dlkern/arm64/dl.ctrampoline out of rangerelocation out of range reloc_prel32 %p => 0x%016llx reloc_got %p => 0x%016llx (0x%016llx) HI21 out of rangeADR_GOT_PAGE without matching LD64_GOT_LO12_NCLD64_GOT_LO12_NC without matching ADR_GOT_PAGE%lxrelocation 0x%s is not implemented yet reloc_xxxx64 %p %c= 0x%lx dlkern/arm64/dl_helper.crequested buffer size is too large/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/buffer.coverflow is detectednew read is position beyond the end of the written data%s: the command is not allowed when lockdown is enforced/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/command.cone argument expected/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/corecmd.c/%s%s (%s) unknown invalid argument(%s): Filesystem is %s. %s='%s' not an assignmentSet an environment variable.[ENVVAR=VALUE]setRemove an environment variable.ENVVARunsetList devices or files.[ARG]lsInsert a module.MODULEinsmod%s,%srootvariable `%s' isn't set/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/device.c%s read failed diskkern/disk.cClosing `%s'. Opening `%s'... disk `%s' not found/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/disk.csector sizes of %d bytes aren't supported yetno such partitionOpening `%s' failed. attempt to read or write outside of partition/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/disk_common.cattempt to read or write outside of disk `%s'Read out of range: sector 0x%llx (%s). grub_disk_read(): Maximum recursion depth exceeded`%s' is already loaded/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/dl.cModule reference count overflowModule reference count underflowmodule at %p, size 0x%lx moduleskern/dl.cELF header smaller than expectedinvalid arch-independent ELF magicthis ELF file is not of the right typeELF sections outside corerelocating to %p .modnameno module name found.module_licenseno license section in module %.63sLICENSE=GPLv3.moddepsLICENSE=GPLv3+LICENSE=GPLv2+incompatible license in module %.63s: %.63ssymbol `%s' not foundgrub_mod_initgrub_mod_finiunknown symbol type `%d'relocation without symbol tableBUG: trying to protect pages outside of module allocation ("%s"): module base %p, size 0x%lx; tramp/GOT base 0x%lx, size 0x%lxflushing 0x%lx bytes at %p module name: %s init function: %p prefixvariable `%s' isn't set%s/arm64-efi/%s.modmismatched names.textdynamic_load_symbols %p Print infomation useful for GDB debugginggdbinfo/%sVendor(%pG)[%x: ]%02x set_virtual_address_map failed/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/efi/efi.ccould not set EFI variable `%s'section %d is last section; invalid. sectionskern/efi/efi.csection %d has bad magic %08x, should be %08x returning section info for section %d: "%s" malformed EFI Device Path node has length=%dmalformed EFI Device Path node has length=%lu/EndEntire /EndThis /EndUnknown(%x) /PCI(%x,%x)/PCCARD(%x)/MMap(%x,%llx,%llx)Hardware/Ctrl(%x)/UnknownHW(%x)/ACPI(%x,%x)/ACPI(%x,%s,%x)%s)/UnknownACPI(%x)/ATAPI(%x,%x,%x)/SCSI(%x,%x)/FibreChannel(%llx,%llx)/1394(%llx)/USB(%x,%x)/USBClass(%x,%x,%x,%x,%x)/I2O(%x)/MacAddr(%02x:%02x:%02x:%02x:%02x:%02x,%x)/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)/InfiniBand(%x,%llx,%llx,%llx)/UART(%llu,%u,%x,%x)/Sata(%x,%x,%x)/Vlan(%u)Messaging/UnknownMessaging(%x)/HD(%u,%llx,%llx,%02x%02x%02x%02x%02x%02x%02x%02x,%x,%x)/CD(%u,%llx,%llx)Media/File((null))/File(%s)/Protocol(%pG)/UnknownMedia(%x)/BIOS(%x,%x,%s)/UnknownBIOS(%x)/UnknownType(%x,%x) trying to register different loadertrying to unregister different loaderfound registered FDT @ %p linuxkern/efi/fdt.cnot found registered FDT mods%lxinvalid memory address (0x%s > 0x%s)/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/efi/mm.cout of memoryCould not malloc memory to remember EFI allocation. Exiting GRUB won't free all memory. grub_efi_drop_alloc() called with wrong page countcouldn't retrieve memory mapmemory map buffer is too smallcouldn't terminate EFI servicesTrying to terminate EFI services again cannot get EFI memory map sizecannot allocate memory for memory mapcannot allocate memory for new memory maperror fetching memory map from EFIMemory starting at %p (%u pages) marked as free, but EFI would not allocatecould not allocate all requested memory: %lu pages still required after iterating EFI memory map%s%s() called with invalid argumentsget 0x%lx-0x%lx:%c%c%c nxkern/efi/mm.crwxset +%s%s%s -%s%s%s on 0x%lx-0x%lx bad shim loader signature/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/efi/sb.cbad shim lock signatureshim protocols not foundprohibited by secure boot policyDisabledUNKNOWNEnabledSecureBootSetupModeMokSBStateUEFI Secure Boot state: %s efikern/efi/sb.cyshim_lockshim_lock_verifier0falsedisableno%s:%s:%d:error: %s. assert: error stack overflow detected! missing `%c' symbol/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/file.cattempt to read past the end of fileattempt to seek outside of the fileinvalid file name `%s'/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/fs.cbeyond the total sectorsDetecting %s... fskern/fs.c/error: %s. %s detection failed. unknown filesystemblocklistylockdownlockdown_verifier%sroot(%s)%scmdpatharm64-efiprefixnormal%s%sdebugalloverflow is detected/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/misc.cunrecognized numberpositional arguments are not supportedunexpected formattoo many arguments(null)%s:%s:%d:%s: invalid formatarguments types do not match Aborted. Press any key to exit.string too longunaligned pointer %pout of range pointer %pdouble free at %palloc magic is broken at %p: %lxnull in the ringfree magic is broken at %p: 0x%xout of memory/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/mm.coverflow is detectedUsing memory for heap: start=%p, end=%p regionskern/mm.cCan we extend into region above? %p + %lx + %lx ?=? %p Yes: extending a region: (%p -> %p) -> (%p -> %p) Can we extend into region below? %p + %x + %lx + %lx ?=? %p No: considering a new region at %p of size %lx overflow is detected/home/buildozer/aports/main/grub/src/grub-2.14/include/grub/buffer.hpeek out of rangeinvalid partition number/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/partition.c%dsub-partition %s%d of (%s,%s) ends after parent. partitionkern/partition.cmaximum recursion depth exceededUnknown command `%s'. helpTry `help' for usage > grub rescue> Rescue mode has been disabled... Entering rescue mode... file: %s type: %d verifykern/verifiers.cverification requested but nobody cares: %s/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/kern/verifiers.cbig file signature isn't implemented yetpremature end of file %sstring: %s, type: %d verified_readcannot set text mode/home/buildozer/aports/main/grub/src/grub-2.14/grub-core/term/efi/console.cconsolegrub_abortgrub_acpi_find_fadtgrub_acpi_find_tablegrub_arch_sync_cachesgrub_byte_checksumgrub_callocgrub_cli_set_auth_neededgrub_command_listgrub_current_contextgrub_debug_enabledgrub_device_closegrub_device_iterategrub_device_opengrub_disk_cache_tablegrub_disk_closegrub_disk_dev_listgrub_disk_dev_registergrub_disk_dev_unregistergrub_disk_firmware_finigrub_disk_firmware_is_taintedgrub_disk_native_sectorsgrub_disk_opengrub_disk_readgrub_disk_write_weakgrub_divmod64grub_dl_headgrub_dl_loadgrub_dl_load_core_noinitgrub_dl_refgrub_dl_ref_countgrub_dl_unloadgrub_dl_unrefgrub_efi_allocate_any_pagesgrub_efi_allocate_fixedgrub_efi_allocate_pages_realgrub_efi_close_protocolgrub_efi_compare_device_pathsgrub_efi_duplicate_device_pathgrub_efi_find_configuration_tablegrub_efi_find_last_device_pathgrub_efi_find_mmap_sizegrub_efi_finish_boot_servicesgrub_efi_free_pagesgrub_efi_get_device_pathgrub_efi_get_filenamegrub_efi_get_firmware_fdtgrub_efi_get_last_verified_image_handlegrub_efi_get_loaded_imagegrub_efi_get_memory_mapgrub_efi_get_ram_basegrub_efi_get_securebootgrub_efi_get_variablegrub_efi_get_variable_with_attributesgrub_efi_image_handlegrub_efi_is_finishedgrub_efi_load_imagegrub_efi_locate_handlegrub_efi_locate_protocolgrub_efi_net_configgrub_efi_open_protocolgrub_efi_print_device_pathgrub_efi_register_loadergrub_efi_set_text_modegrub_efi_set_variablegrub_efi_set_variable_to_stringgrub_efi_set_variable_with_attributesgrub_efi_set_virtual_address_mapgrub_efi_stallgrub_efi_start_imagegrub_efi_system_tablegrub_efi_unload_imagegrub_efi_unregister_loadergrub_efidisk_get_device_handlegrub_efidisk_get_device_namegrub_env_exportgrub_env_getgrub_env_get_boolgrub_env_setgrub_env_unsetgrub_env_update_get_sortedgrub_err_printed_errorsgrub_errmsggrub_errnogrub_errorgrub_error_popgrub_error_pushgrub_exitgrub_fatalgrub_file_closegrub_file_filtersgrub_file_get_device_namegrub_file_opengrub_file_progress_hookgrub_file_readgrub_file_seekgrub_file_verifiersgrub_freegrub_fs_autoload_hookgrub_fs_listgrub_fs_probegrub_get_mem_attrsgrub_get_time_msgrub_getkeygrub_getkey_noblockgrub_getkeystatusgrub_gettextgrub_is_cli_disabledgrub_is_cli_need_authgrub_is_lockdowngrub_is_using_legacy_shim_lock_protocolgrub_isspacegrub_key_is_interruptgrub_list_pushgrub_list_removegrub_lockdowngrub_machine_acpi_get_rsdpv1grub_machine_acpi_get_rsdpv2grub_machine_finigrub_mallocgrub_memaligngrub_memcmpgrub_memcpygrub_memmovegrub_memsetgrub_millisleepgrub_mm_add_region_fngrub_mm_basegrub_modbasegrub_named_list_findgrub_net_opengrub_net_poll_cards_idlegrub_parser_cmdline_stategrub_parser_split_cmdlinegrub_partition_get_namegrub_partition_iterategrub_partition_map_listgrub_partition_probegrub_print_errorgrub_printfgrub_printf_grub_printf_fmt_checkgrub_puts_grub_real_dprintfgrub_reallocgrub_rebootgrub_refreshgrub_register_command_lockdowngrub_register_command_priogrub_register_variable_hookgrub_snprintfgrub_strchrgrub_strcmpgrub_strcpygrub_strdupgrub_strlengrub_strncmpgrub_strndupgrub_strrchrgrub_strtokgrub_strtok_rgrub_strtoulgrub_strtoullgrub_strwordgrub_term_highlight_colorgrub_term_inputsgrub_term_inputs_disabledgrub_term_normal_colorgrub_term_outputsgrub_term_outputs_disabledgrub_term_poll_usbgrub_unregister_commandgrub_update_mem_attrsgrub_utf8_to_utf16_allocgrub_verify_stringgrub_vprintfgrub_vsnprintfgrub_xasprintfgrub_xputsgrub_xvasprintfgrub_zallocmemcmpmemcpymemmovememsetLICENSE=GPLv3+T![NYd9ir;0--'?Mqh":(P>?p>X@:p8:Fp?8B0:pVJH'pI9|IHIVptrtr[Xmpddnd=xUvstcahp@h\Xu*}@8X0`n^oXZZ@[.0eInb[yx^_]]@\o00pFXoa L'2=@L\\f8qP`H4 &3ؕA~Tepqx%pș+̘:KLYWvW,\X P H# 0 E :S xl  `  x X   !!&! >`>>> ? ?`??? @ @`@@@ A A`AAA B B`BBB C C`CCC D D`DDD E E`EEE F F`FFF G G`GGG H H`HHH I I`III J J`JJJ K K`KKK L L`LLL M M`MMM N N`NNN O O`OOO P P`PPP Q Q`QQQ R R`RRR S S`SSS T T`TTT U U`UUU V V`VVV W W`WWW X X`XXX Y Y`YYY Z Z`ZZZ [ [`[[[ \ \`\\\ ] ]`]]] ^ ^`^^^ _ _`___ ` ````` a a`aaa b b`bbb c c`ccc d d`ddd e e`eee f f`fff g g`ggg h h`hhh i i`iii j j`jjj k k`kkk l l`lll m m`mmm n n`nnn o o`ooo p p`ppp q q`qqq r r`rrr s s`sss t t`ttt u u`uuu v v`vvv w w`www x x`xxx y y`yyy z z`zzz { {`{{{ | |`||| } }`}}} ~ ~`~~~  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `   `à  `Ġ  `Š  `Ơ  `Ǡ  `Ƞ  `ɠ  `ʠ  `ˠ  `̠  `͠  `Π  `Ϡ  `Р  `Ѡ  `Ҡ  `Ӡ  `Ԡ  `ՠ  `֠  `נ  `ؠ  `٠  `ڠ  `۠  `ܠ  `ݠ  `ޠ  `ߠ  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  ` !a!!a!!a!?-1j-1j-1jA>1j01j01j v $7 7 <-1jl Ȑ0-1j-1j-1j  FC-1j@-1j-1j-1j  @ <-1jRA0`1j-1j-1j   s2m-1jA^1j\1j\1j MEmt^ Ik-1jeA`1j-1j-1j jM j_KgKgrfT-1jKgA `1j`1j`1j W{. Vp89p89@-1j2mA`1jO1jO1j |V rQ@Q@mD-1j#om-1j-1j-1j  $lG >&n>&ny-1j5mAC1j11j11j Ցw Qoeeȇ-1jkWo-1j-1j-j $bW pz-1j}o -1j-1j-j $2( Kp7 -1jpA`1j01j01j   ]T |j-1jwA`1j-1j-1j rC `mfxfxj-1jfxk-1jO1jO1j ] $L?쐒C U2626fx-1jfx_1j_1j_1j 68BT 7L7LbJ_1jbJ 01j01j01j/bin/busybox$` Xݶ)01jݶ i01ji $F ;,^01j\Oi01ji $3C vi^01j\_1j_1j_1j 7850 U3R3R3R_1j3Ri01ji $ij Ti^01j\01j01j01j../proc/mountsUp ,5^\\01j\i01ji $LR( ^01j\_1j`1j`1j`1j* Q ?p89p89LMu_1j$i_1j_1j_1j/etc/init.d/devfs vvv_1jvH i01ji $\ 3^01j\ 2i01ji  $ x> ^01ju] Ůi21jŮi %& B )x21jr&i01ji +$תxf Nc^_01jѲ]5i01ji ,$d/; d^_01jѲ]A`1j41j41j D5j ff2m01j]0h 01j01jgi 0 ѭ}o01joh>1j01j01jld-musl-aarch64.so.1A7 }okWoByg01jkWoA `1j91j91jo V=σ 'h=l01jQ7|01j01jtrbi 2DC K`01jQ7|A`1j01j01j YMN 4``C01jtrbi01jtrbi -$6;M=( `01jA`1j21j21j J(t ,:,:τB01jtrbi01jtrbi 1$? N`01jA`1j_1j_1j 1j01j01j + ]<01jA`1jO1jO1j  ) U8U8V01jkA`1jO1jO1j  `ټ 6 6V01jkA`1j01j01j iܮ(^t ``V01jktrbi01jtrbi 5$  J`01jkA`1j01j01j ZI%_ I<<i01j<A`1j01j01j L l01jyA`1jO1jO1j   -_R C8C8F`01jÔ 01j01j01j/bin/busybox = @@@01j@ 01j01j01j/bin/busybox `' 01j 01j01j01j/bin/busybox7`V| 01j 01j01j01j/bin/busyboxcm.)4 q01j 01j01j01j/bin/busybox.⿝]C 01j 01j01j01j/bin/busybox DR01j 01j01j01j/bin/busybox\j-  |D01j 01j01j01j/bin/busyboxR `d01j 01j01j01j/bin/busybox 01j 01j01j01j/bin/busyboxciWѧ v01j 01j01j01j/bin/busybox.gSK }01j @1j01j01j/bin/busyboxd{hn O01j 01j01j01j/bin/busybox~aL j01j ]1j01j01j/bin/busyboxK GO01j 01j01j01j/bin/busyboxpΕn^ y01j 01j01j01j/bin/busybox:s[m, v01j 01j01j01j/bin/busyboxISj 101j 01j01j01j/bin/busyboxqO _01j 01j01j01j/bin/busyboxˊK( 01j 01j01j01j/bin/busybox a( T01j 01j01j01j/bin/busyboxaA ď01j 01j01j01j/bin/busybox== 01j 01j01j01j/bin/busybox$ t01j 01j01j01j/bin/busybox(5,bN 01j 01j01j01j/bin/busyboxv- 01j >1j01j01j/bin/busybox~ݘ P[01j81j81j81jlibsmartcols.so.1.1.0U% r3r3r81j3r 01j01j01j/bin/busybox8g ޒ&4&4&401j&4 01j01j01j/bin/busyboxl/u~ -&4&4&401j&4 01j01j01j/bin/busyboxh" d&4&4#01j&4 _1j01j01j/bin/busyboxKW*t X&4&4U01j&4 01j01j01j/bin/busyboxyPi8 i&4&4&401j&4 01j01j01j/bin/busybox4v [&4&4&401j&4 01j01j01j/bin/busyboxK &4&4&401j&4 01j01j01j/bin/busyboxK% &4&4&401j&4 01j01j01j/bin/busybox[A &4&4&401j&4 01j01j01j/bin/busyboxY/y w88801j8 A1j01j01j/bin/busybox #P X88*501j8 >1j01j01j/bin/busyboxV> 88q/01j8 01j01j01j/bin/busyboxFS = n88801j8 91j91j91j/bin/bbsuid P 91j 01j01j01j/bin/busybox<le S88801j8 ^1j01j01j/bin/busyboxd 88VF01j8 01j01j01j/bin/busyboxATw 88801j8 01j01j01j/bin/busybox/#-fJ  88801j8 01j01j01j/bin/busyboxU? #88801j8 01j01j01j/bin/busybox7f^UcK D88801j8 01j01j01j/bin/busybox  88801j8 01j01j01j/bin/busybox;tP 88801j8&>1j31j*c  tn}b+ h ;31jM 01j01j01j/bin/busyboxޅi AAA01jA 01j01j01j/bin/busyboxLQ qAAA01jA ^1j01j01j/bin/busybox%SgL AArw01jA 01j01j01j/bin/busyboxDYlw :AAA01jA 01j01j01j/bin/busyboxG4 2AAA01jA 01j01j01j/bin/busyboxkTmN AAA01jA 01j01j01j/bin/busyboxx @AAA01jA 01j01j01j/bin/busybox9 AAA01jA _1j01j01j/bin/busyboxCka' *AAZU01jA 01j01j01j/bin/busybox{ ;AAA01jA 01j01j01j/bin/busybox$ FAAA01jA 01j01j01j/bin/busybox7 FuAAA01jA 01j01j01j/bin/busyboxtx 6J(J(J(01jJ( 01j01j01j/bin/busybox]πE J(J(J(01jJ( 01j01j01j/bin/busybox }tVP )LJ(J(J(01jJ( 01j01j01j/bin/busyboxs "J(J(J(01jJ( 01j01j01j/bin/busyboxe)Wn dJ(J(J(01jJ( 01j01j01j/bin/busybox3‚ ZJ(J(J(01jJ( 01j01j01j/bin/busybox LJ(J(J(01jJ( 01j01j01j/bin/busybox`* J(J(J(01jJ( 01j01j01j/bin/busyboxm`$ z]J(J(J(01jJ( 01j01j01j/bin/busybox)Sk gJ(J(J(01jJ( 01j01j01j/bin/busybox}+ zJ(J(J(01jJ( 01j01j01j/bin/busybox &J(J(J(01jJ( >1j01j01j/bin/busyboxp҉ SeSe6401jSe 01j01j01j/bin/busyboxD SeSeSe01jSe 01j01j01j/bin/busyboxՙ\ 5SeSeSe01jSe 01j01j01j/bin/busybox`~ dSeSeSe01jSe 01j01j01j/bin/busybox|j"' SeSeSe01jSe 01j01j01j/bin/busybox!~y &TSeSeSe01jSe 01j01j01j/bin/busyboxT<hB eKSeSeSe01jSe 01j01j01j/bin/busybox :[ 2SeSeSe01jSe 01j01j01j/bin/busybox@@[ LSeSeSe01jSe >1j01j01j/bin/busybox~)jU SeSe=01jSe 01j01j01j/bin/busybox_1T7 nSeSeSe01jSe 31j01j01j/bin/busybox",k }SeSebJ01jSe 01j01j01j/bin/busybox`(8 Veߗeߗeߗ01jeߗ 01j01j01j/bin/busyboxѳ*N eߗeߗeߗ01jeߗ C1j01j01j/bin/busyboxbN- eߗeߗ@01jeߗ 01j01j01j/bin/busybox\j eߗeߗeߗ01jeߗ 01j01j01j/bin/busybox@ Geߗeߗeߗ01jeߗ 01j01j01j/bin/busyboxVbs+ eߗeߗeߗ01jeߗ 01j01j01j/bin/busyboxfm eߗeߗeߗ01jeߗ 01j01j01j/bin/busyboxYA >eߗeߗeߗ01jeߗ 01j01j01j/bin/busybox:C eߗeߗeߗ01jeߗ 01j01j01j/bin/busyboxfk 4?eߗeߗeߗ01jeߗ ]1j01j01j/bin/busybox.IjY leߗeߗ(01jeߗ 01j01j01j/bin/busyboxS1 eߗeߗeߗ01jeߗA`1j81j81j  u }ڬ}ڬ J01j 01j01j01j/bin/busyboxY jnnn01jn#.j01j.j X$j2S #L01jw 01j01j01j/bin/busyboxxlxA0 !nnn01jn 01j01j01j/bin/busybox* ,ynnn01jnH(@1j31jj Kf Mio31j @1j01j01j/bin/busybox$ R cnnl?01jn 01j01j01j/bin/busybox}\4 /nnn01jn 01j01j01j/bin/busybox{N nnn01jn 01j01j01j/bin/busyboxkfz Qwnnn01jn 01j01j01j/bin/busyboxo ;nnn01jn 01j01j01j/bin/busyboxlD"P a}nnn01jn 01j01j01j/bin/busyboxzG% nnn01jn 01j01j01j/bin/busybox71/0 ?nnn01jn 01j01j01j/bin/busyboxPbu 01j 01j01j01j/bin/busyboxTk1R2 01j 01j01j01j/bin/busybox{_/ 01j 01j01j01j/bin/busybox5 iր <01j 01j01j01j/bin/busyboxF s 01j 01j01j01j/bin/busyboxSj 01j 01j01j01j/bin/busyboxֹ 01j 01j01j01j/bin/busybox{LF /01j 01j01j01j/bin/busybox;'[~36 V701j 01j01j01j/bin/busyboxM 501j 01j01j01j/bin/busyboxw֘ dj01j 01j01j01j/bin/busyboxazq ӘӘӘ01jӘ 01j01j01j/bin/busybox `7 5ӘӘӘ01jӘ 01j01j01j/bin/busybox2M6 ӘӘӘ01jӘ 01j01j01j/bin/busyboxzj _7 rӘӘӘ01jӘ >1j01j01j/bin/busyboxbO̰ ӘӘ')01jӘ 01j01j01j/bin/busybox;Y*?? ӘӘӘ01jӘ 01j01j01j/bin/busybox?}go ӘӘӘ01jӘ _1j01j01j/bin/busyboxM ӘӘ01jӘ 01j01j01j/bin/busybox=erH ӘӘӘ01jӘ 01j01j01j/bin/busybox > TӘӘӘ01jӘ 01j01j01j/bin/busyboxY ӗ01j 01j01j01j/bin/busyboxs 01jGj81jGj _,҅ r81j3r@1j31j31jlibjson-c.so.5.4.0 G ? k@ 31j 01j01j01j/bin/busybox`kW' ~01j 01j01j01j/bin/busyboxʙzW 01j 01j01j01j/bin/busyboxŬ (01j 01j01j01j/bin/busybox nG] ~01j 01j01j01j/bin/busyboxVM rI01j 01j01j01j/bin/busyboxm ]01j 01j01j01j/bin/busyboxj%r nIMMM01jM 01j01j01j/bin/busyboxGb .MMM01jM 01j01j01j/bin/busybox˝k MMM01jM 01j01j01j/bin/busyboxo 5 2MMM01jM 01j01j01j/bin/busybox;1 MMM01jM >1j01j01j/bin/busybox ' MM k01jMppri21jpri C] : 21j5 01j01j01j/bin/busybox9 MMM01jM?1j21j21jlibeconf.so.0.8.3K 5fv21j5 01j01j01j/bin/busybox@?`&# [MMM01jM 01j01j01j/bin/busybox!QmA bMMM01jM 01j01j01j/bin/busybox'fY ZMMM01jM >1j01j01j/bin/busybox2; MM`01jMx@1j31jvph CrL 7 & k( 31jA`1j31j31j Yخ]?. i&&sa31j& 01j01j01j/bin/busyboxd ;ǙǙǙ01jǙ71j71j71jlibnvme-mi.so.1.16.1ٸ |Css71js 01j01j01j/bin/busybox"]e YǙǙǙ01jǙ 01j01j01j/bin/busybox5E¸ ǙǙǙ01jǙ 01j01j01j/bin/busyboxdhG 01j 01j01j01j/bin/busybox?l e01j 01j01j01j/bin/busybox۽m(%M 01j 01j01j01j/bin/busyboxDC¹ v01j 01j01j01j/bin/busybox<|lw l01j 01j01j01j/bin/busybox=G 01j 01j01j01j/bin/busyboxer 01j 01j01j01j/bin/busybox㤕 \~~~01j~ 01j01j01j/bin/busybox`4 ~~~01j~ 01j01j01j/bin/busyboxz v~~~01j~ 01j01j01j/bin/busyboxUd W~~~01j~ 01j01j01j/bin/busyboxfCu ''~~~01j~ 01j01j01j/bin/busybox F~~~01j~ 01j01j01j/bin/busyboxe ;E` \~~~01j~ 01j01j01j/bin/busyboxǾUU w~~~01j~ 01j01j01j/bin/busyboxFWw@ ~~~01j~ 01j01j01j/bin/busyboxZ 5~~~01j~ 01j01j01j/bin/busyboxFeRy ~~~01j~ 01j01j01j/bin/busyboxA! Tѻѻѻ01jѻ _1j91j91j/bin/bbsuidI]?B wP[91j 01j01j01j/bin/busyboxmԆvm ѻѻѻ01jѻ 01j01j01j/bin/busyboxn|) rrr01jr 01j01j01j/bin/busybox/2 rrrr01jr 01j01j01j/bin/busyboxe rrr01jr 01j01j01j/bin/busyboxy:/ 25rrr01jr 01j01j01j/bin/busyboxwT*W9 rrr01jr 01j01j01j/bin/busyboxx. wrrr01jr 01j01j01j/bin/busybox+# ?rrr01jr 01j01j01j/bin/busyboxe n/rrr01jr 01j01j01j/bin/busyboxu / orrr01jr 01j01j01j/bin/busybox$q \s01j 01j01j01j/bin/busybox5XQ I01j 01j01j01j/bin/busybox3E ^01j 01j01j01j/bin/busyboxI23x 01j 01j01j01j/bin/busybox싀 ***01j* 01j01j01j/bin/busyboxaDR 0***01j* 01j01j01j/bin/busybox\ "_***01j* 01j01j01j/bin/busyboxB (***01j* 01j01j01j/bin/busyboxxG 8***01j* 01j01j01j/bin/busyboxg ***01j* 01j01j01j/bin/busybox`D |***01j* 01j01j01j/bin/busybox! W **`01j* 01j01j01j/bin/busyboxr ***01j* 01j01j01j/bin/busyboxj7 ***01j* 01j01j01j/bin/busyboxFN r***01j* 01j01j01j/bin/busybox ggg01jg 01j01j01j/bin/busybox4ڤ ? Aggg01jg 01j01j01j/bin/busyboxVV Ȋggg01jg 01j01j01j/bin/busyboxc1 ggg01jg 01j01j01j/bin/busybox Oggg01jg 01j01j01j/bin/busyboxȅ/ Iggg01jg >1j01j01j/bin/busybox섔M I(gg01jg 01j01j01j/bin/busyboxֵ 8ggg01jg?1j31j31jlibcryptsetup.so.12.11.0"HJ E2X,'e31j' 01j01j01j/bin/busybox}` –ggg01jg 01j01j01j/bin/busyboxb 3ggg01jg >1j01j01j/bin/busyboxU gg,01jg 01j01j01j/bin/busyboxI S"""01j" 01j01j01j/bin/busyboxv ,"""01j" 01j01j01j/bin/busybox D """01j" 01j01j01j/bin/busyboxf` """01j" 01j01j01j/bin/busybox!]" """01j" 01j01j01j/bin/busybox b"""01j" 01j01j01j/bin/busyboxPz `~+++01j+ 01j01j01j/bin/busybox5 5+++01j+ 01j01j01j/bin/busybox)ci0 -+++01j+A`1j01j01j m[ jl01j 01j01j01j/bin/busyboxIJ G+++01j+ 01j01j01j/bin/busybox_!z' +++01j+ 01j01j01j/bin/busybox +A} +++01j+ 01j01j01j/bin/busybox*M6g ^+++01j+ 01j01j01j/bin/busyboxdͲ̸ +++01j+ 01j01j01j/bin/busyboxDqph +++01j+ 01j01j01j/bin/busybox3 +++01j+ 01j01j01j/bin/busyboxII= 4[4[4[01j4[ 01j01j01j/bin/busyboxursK 4[4[4[01j4[ >1j01j01j/bin/busyboxB )4[4[-01j4[ 01j01j01j/bin/busybox!E W4[4[4[01j4[ 01j01j01j/bin/busyboxEg_5 td4[4[4[01j4[ >1j01j01j/bin/busyboxB. +4[4[=H01j4[ 01j01j01j/bin/busyboxTڜ+7 4[4[4[01j4[ 91j91j91j/bin/bbsuid: -91j 01j01j01j/bin/busybox 'b w4[4[4[01j4[ 01j01j01j/bin/busybox $ d4[4[4[01j4[ 01j01j01j/bin/busyboxyp /D4[4[4[01j4[ 01j01j01j/bin/busyboxhd̫ O4[4[4[01j4[ J1j01j01j/bin/busybox2>6m c4[4[01j4[ 01j01j01j/bin/busybox8.D F՝F՝F՝01jF՝ 01j01j01j/bin/busybox*qp wF՝F՝F՝01jF՝ 01j01j01j/bin/busyboxU[. fF՝F՝F՝01jF՝ _1j01j01j/bin/busyboxu F՝F՝701jF՝ 01j01j01j/bin/busyboxD{y F՝F՝F՝01jF՝ 01j01j01j/bin/busyboxH=h 6F՝F՝F՝01jF՝ 01j01j01j/bin/busyboxG)V?& [F՝F՝F՝01jF՝ 01j01j01j/bin/busybox2* ׮OOO01jO 01j01j01j/bin/busybox)82 .POOO01jO 01j01j01j/bin/busybox6Ch^ 7OOO01jO 01j01j01j/bin/busybox7U\r ?OOO01jO >1j01j01j/bin/busyboxY&: zTOOݫI01jO 91j91j91j/bin/bbsuid> U91j 91j91j91j/bin/bbsuid+X3 OOO91jO 01j01j01j/bin/busybox| OOO01jO 01j01j01j/bin/busyboxQ/ OOO01jO 01j01j01j/bin/busybox:E OOO01jO 01j01j01j/bin/busybox@ GXOXOXO01jXO 01j01j01j/bin/busyboxn XOXOXO01jXO 01j01j01j/bin/busyboxR )XOXOXO01jXO 01j01j01j/bin/busyboxaY _XOXOXO01jXO 01j01j01j/bin/busyboxR) XOXOXO01jXO 91j91j91j/bin/bbsuidnyf^ ,]91j ^1j01j01j/bin/busybox 84 њXOXOj01jXO 01j01j01j/bin/busybox͈" DXOXOXO01jXO 01j01j01j/bin/busybox27 XOXOXO01jXO 01j01j01j/bin/busyboxp aaa01ja 01j01j01j/bin/busyboxY waaa01ja 01j01j01j/bin/busyboxx(gi *aaa01ja 01j01j01j/bin/busyboxe\  aaa01ja 01j01j01j/bin/busyboxtJF 4]aaa01ja 01j01j01j/bin/busyboxٍ3H ˪aaa01ja 01j01j01j/bin/busyboxN[ U^aaa01ja 01j01j01j/bin/busyboxK aaa01ja 01j01j01j/bin/busybox Baaa01ja 01j01j01j/bin/busybox* $aaa01ja 01j01j01j/bin/busyboxZ/ Qaaa01ja 01j01j01j/bin/busyboxgHo sss01js 01j01j01j/bin/busybox2l=@ sss01js 91j91j91j/bin/bbsuid>)Tb +OOO91jO 01j01j01j/bin/busyboxmGx sss01js 01j01j01j/bin/busyboxE issss01js 01j01j01j/bin/busybox:|" `sss01js 01j01j01j/bin/busyboxw>y sss01js 01j01j01j/bin/busybox3#"$ Tsss01js >1j01j01j/bin/busyboxTdT r|C|CH>01j|C 01j01j01j/bin/busyboxS  La|C|C|C01j|C 01j01j01j/bin/busyboxͩ4 f|C|C|C01j|C 01j01j01j/bin/busyboxd;7 |C|C|C01j|C >1j01j01j/bin/busyboxw |C|Cfd+01j|C 01j01j01j/bin/busybox |C|C|C01j|C 01j01j01j/bin/busyboxըt d|C|C|C01j|C 01j01j01j/bin/busyboxZ M|C|C|C01j|C 01j01j01j/bin/busyboxC r|C|C|C01j|C 01j01j01j/bin/busyboxӢM2 01j{`1j_1j_1j .8P@) tvy~v_1jgv#_1j_1j_1j /8L p "8 Ozzy_1jyE`1j_1j_1j $ɧ1f= 8Pn5m2m_1j5mA`1j21j21j J + ,:,:WK21jyu9A`1j01j01j f2v =l01jA`1j01j01j k|4 C%K01ji01ji 9$Re3 {01jA>1j01j01j yHK 601j ?1j01ji :$4"' d01j?1j01ji <$:O Q =l01jz?1j01ji ?$տ7 I's01jԀA`1j01j01j rj IvԀԀ_UF01jԀ|i_1j_1j 08?dl@ 3Fzz01jݽA`1j01j01j zam ݽݽ;aE01jݽA`1j01j01j ? EOݽݽ B01jݽA`1j01j01j  T ~sݽݽ B01jݽA`1j01j01j jAa ݽݽτB01jݽA`1j01j01j p ݽݽ B01jݽA`1j01j01j ;W ԔݽݽGB01jݽA`1j01j01j $w ݽݽGB01jݽA`1j01j01j |{ >;aE01jtai01ji A$@ni/ 01jti01ji B$ 01jti01ji C$k : }01jtA`1j11j11j DR_ I^8^8qF01jtA`1j_1j_1j l 5m5m2m01j A`1j01j01j 5AB Sm #01j A`1j01j01j ᦼ `01j A`1j01j01j DM ,,`01j,A`1j01j01j z>iu P%%i01j,A`1j01j01j 9 ,,j01j,A`1j01j01j >_nG E,,Uj01j,A`1j01j01j E\a #%,j01j,A`1j01j01j Kk %%l01j%A`1j01j01j H.B^ .%%{T01j%A`1j01j01j <]N] ..rfT01j.A`1j01j01j 3N '[..Uj01j.A`1j01j01j '| ..j01j.A`1j01j01j i ^..=l01j.A`1j01j01j yُ c 7 .l01j.C`1j\1j\1j X 2m01j7 A `1jO1jO1j  Un; MEMEsa01j7 A`1j01j01j s1u 37 7 c01j7 A`1j01j01j U( Hoh01j7 i01ji D$HP b 01jIA>1j01j01j G| ,RR<01jIA`1j01j01j i_ <RI{T01jIA`1j01j01j 17K RR{T01jRA`1j01j01j  # RR{T01jRA`1j01j01j ɪ96 $RR4R`01jRA`1j11j11j  Vj01jRA`1j01j01j -gC "[[ k01j[mA`1j01j01j f " [[ۆk01j[A`1j_1j_1j {ݢd ۆk01j[A`1j01j01j AmO vvk01jvA`1j01j01j Oy nGvvj01jv 01j01j01j../run/lock0w K Mvv01jvA`1j01j01j zb w vvj01jvA`1j01j01j ^a |vv k01jv21j01j01j../run&\nj h]v0)01jvA`1j01j01j DL k01jvA`1j01j01j ҫl &bIk01jv01j01j01j../../../etc/crontabs Ab &vv01jv01j01j01j../mailڤ_W |u01jC`1j01j01j  Z ۆk01j01j01j01j../if-pre-up.d/bridgef ϲ=""01j" xg01jxg F$֊ (=01j4d01j01j01jifupdownn'( foo01jo01j01j01jifupdownmZ^ 'xx01jx01j01j01jifupdown& Y jxx01jx01j01j01jifupdown&. }V[xx01jx01j01j01jifupdownrz 5[xx01jxHj01jHj  F6RCW >.[01jxA`1j01j01j  +t@^ ZS U01jA`1j01j01j  %.DT6 uۘۘU01jHj01jHj I$4a [01jHj01jHj J$PTC( "ۘ01jHj01jHj K$I< ۘ01jHj01jHj N$йr,> wۘ01jHj01jHj O$} Pۘ01jHj01jHj P$7Z ۘ01jg6Hj01jHj Q$g ۘ01jgHj01jHj R$gnN( ]ۘ01jg6Hj01jHj V$.Y %ۘ01jgA`1j11j11j  Sp89p89U01j A`1j11j11j  ]C ::U01j .j11j.j B#% 01j 11j11j11jlibcap.so.2.78G_?S oo11johqi11jqi Ba#\Ur 7 11j11j11j11jlibpsx.so.2.78H و 11jqi11jqi B# ǖ%u 11j'X.j11j.j B6.;J< r\611jA `1j81j81jP Q[ sQ66A11j.j11j.j Z$z \611j'.j11j.j [$G0$T \611j\.j11j.j \$Z@WR \611ju.j11j.j ]$VX j\611j[:.j11j.j ^$=u 611j).j11j.j c$ 8 611j{.j11j.j d$>K 611j.j11j.j e$yQK 611j.j11j.j f$cC 611j@.j11j.j g$%~( 611jy.j11j.j i$]=\ 0611j.j11j.j j$(I7݌ 611j.j11j.j k$ݢS p611jOY.j11j.j l$d׀ 711j/.j11j.j m$hE I711j.j11j.j  n$D 711j.j11j.j t$<Ӷkf< 711j.j11j.j x$E j2711jC.j11j.j z$} XQ1711jC.j11j.j ~$wlC 1711jC.j11j.j $at 71711jc .j11j.j $ 1711j11j11j11j/usr/libexec/rc/sh/functions.shb_ 21711j .j11j.j $5 l1711j .j11j.j $XZZx 1711jD.j11j.j $ 4= H1711j!8J.j11j.j $b<d^ M1711j!8 .j11j.j $WD :711j!8.j11j.j $ l :711j!8.j11j.j $e (:711j3k.j11j.j $; ;0:711j3.j11j.j $] =:711j<.j11j.j $`g( !:711j<).j11j.j $uKp 4:711j<.j11j.j $Ke, :711jE,4 .j11j.j $ g:711jE, .j11j.j $.R- :711jE,6.j11j.j $nycOZ LD811jW.j11j.j $ =LD811jW.j11j.j $Xu5y iLD811jW.j11j.j $Nr;6 5LD811jW.j11j.j $t(n LD811jW^.j11j.j $! <LD811j`.j11j.j $dK PLD811jr]l.j11j.j $N[B HLD811jr].j11j.j $ R rM5h_ |U811j.j11j.j $δ U811j.j11j.j $o} NU811jA`1j11j11j 0E!*' no^8^8C11j.j11j.j $DY r^811j+.j11j.j $$%0 ^811jE4.j11j.j $(CW >\611jEA_1j11j11j \2 >811jÂA`1j`1j`1j =N ??%K11jÂA`1j`1j`1j G?r <!8!8%K11jA_1j11j11j OD fP11jA_1j_1j_1j 811j.j11j.j $&+ e^811j.j11j.j B 77 % %^811j9p.j11j.j BO7r7mV :^811jp.j11j.j B7'Z ^811j kX.j11j.j B&J1) p8911j'.j11j.j  $&pR 8p8911j&"X_1j11j.j BC&Bpz>J p8911j8 11j11j11jrc-serviceIqpW Xp898811j8`.j11j.j B&*d p8911jA@.j11j.j C& Fp8911jwG_1j11j.j B 'Α cp89D11jH_1j11j.j BL'ؙk Ip89D11j;X.j11j.j B'ky Xyu911jx.j11j.j B71i yu911j.j11j.j B8` yu911j.j11j.j BW8 v Iyyu911jl .j11j.j B8=b4 yu911jl .j11j.j B8s yu911j .j11j.j B9$S;?8 yu911j`!.j11j.j B_9l Q|911j!.j11j.j B9p 1911jU".j11j.j B9{&Q< 911j".j11j.j B%:syn T@911j".j11j.j Bg:,c 911j+ #.j11j.j B: u 0911j4I#.j11j.j B:93 911j=#.j11j.j B-;c# jP911jO$X.j11j.j Bo;ME6,F (911jX=$.j11j.j B;f'a>? #911jaz$.j11j.j B;1Me #,:11js$.j11j.j B5< ?+ ,:11js$.j11j.j Bw<7#| G,:11j|1%X.j11j.j B<E|y +k,:11jn%.j11j.j $bb Z,:11j%&X.j11j.j B<O ^,:11j%&.j11j.j B==hT *,:11jb&H.j11j.j B=5; ,:11j&.j11j.j B=#097 4i:11j'H.j11j.j B>"n 9i:11j'H.j11j.j BE>q i:11jJ(.j11j.j B>b i:11j(H.j11j.j B>ʨKD i:11j )P.j11j.j B ?< k: i:11jBp*H.j11j.j BM?[wQW/ @i:11jT*H.j11j.j B?lݚ Zi:11j]'+H.j11j.j B'b Gi:11j]'+H.j11j.j B(R^h {i:11jx+.j11j.j BU(fBC? i:11jx+.j11j.j B(P~ !:11j,.j11j.j B(B暙K e :11j,.j11j.j B)k :11j-.j11j.j B])STD? Q:11jL-.j11j.j B)L :11j-.j11j.j B)w G %:11j-.j11j.j B#*R# @:11j@.A`1j11j11j& #K\ 0j ; ;ZU11j.H.j11j.j Be*v5Cq~ E:11j.H.j11j.j B* a:11j4/P.j11j.j B*D?C *$:11j4/H.j11j.j B++ ;:11j/H.j11j.j Bm+[z Z| i ;11j/H.j11j.j B+z|(A J ;11j#f0H.j11j.j B+# or ;11j,0H.j11j.j B3,\ [ ;11j50P.j11j.j Bu,7 8 ;11jGZ1.j11j.j B,w7  ;11jP1X.j11j.j B,d  ;11jY1X.j11j.j B;-(o j pQ ;11jkN2A `1j11j11j2 $9frp Pn;;ZU11j3 .j11j.j $Y ;11j3.j11j.j $R3 Sp ;11j3 .j11j.j $Xͦ > ;11jB3 .j11j.j $V__ p ʚ;11jB3.j11j.j ${# 'ʚ;11jB3 .j11j.j $F>`7 ʚ;11jB3T%.j11j.j  $f +^ʚ;11j3.j11j.j $0>q^: lʚ;11j3.j11j.j $} -ʚ;11j3 .j11j.j %E" nʚ;11j3.j11j.j %/CP̂ /ʚ;11j3.j11j.j %: ʚ;11js4@.j11j.j  %q ʚ;11j*5.j11j.j  %M7˂ ʚ;11j*5.j11j.j %Bu ʚ;11j*5| .j11j.j %ֲgn m;11j*5.j11j.j % B [?p8911j5<$j11j<$j  %8B\ JG11jqFA>1j11j11j '=b GGg511jIGd?1j11j<$j %zBx } G11jIG9?1j11j<$j   %3 qU PtG11jGl>1j11j<$j %%ړ G911jG?1j11j<$j &%}o G 11jGtrbi11jtrbi '%K0 M11jm|MA`1j11j11j (cz6 {/hY/hYnI11ji)T@'j11j@'j (%m L)/hY11jrfT@'j11j@'j B}-U@ }/hY11jrfT@'j11j@'j )%}gv! Mp8Y11jT@'j11j@'j -%/BFX @8Y11jT'@'j11j@'j 4%* a >8Y11jTd@'j11j@'j 5%d 38Y11jUC@'j11j@'j" #|n 68Y11jU11j11j11jlbuS = 8JZUU11jU11j11j11jlbug& P{JZUU11jU11j11j11jlbu JZZUZU11jZU11j11j11jlbuc\] yJZZUZU11jZU@'j11j@'j 8%˯] *JZ11jZU!@'j11j@'j  ;%Дb JZ11jV@'j11j@'j D% /r S\Z11jNVE@'j11j@'j H%ª! S\Z11jNV,@'j11j@'j  O%<s >S\Z11jNV@'j11j@'j [%MKs & S\Z11jV @'j11j@'j _%&q/ W=S\Z11jV@'j11j@'jd 2-T =S\Z11jV@'j11j@'j c%&/N |~S\Z11jW@'j11j@'j e%-k^<)Z S\Z11jW3C@'j11j@'j" ?Y aS\Z11jW@'j11j@'j g%G $ S\Z11jW@'j11j@'j  k%3%0 +S\Z11jW8@'j11j@'j p%8 $eZ11jW@'j11j@'j r%Ò eZ11jW2@'j11j@'j t%NyȰ IeZ11jW@'j11j@'j v%͜s eZ11jW @'j11j@'j z%Tbu, =eZ11jW@'j11j@'j }%9` eZ11j tXp@'j11j@'j %H3": eZ11j tX@'j11j@'j %I6W YeZ11j tX+@'j11j@'j %uZJ KVeZ11j tX&@'j11j@'j %^O# DeZ11jX&@'j11j@'j  %pYa& Gn[11jXt-j11jt-j %W  <,m11jl3t-j11jt-j %,6"P :},m11jlA`1j11j11j .:d Z=`=`W11j=`A `1j11j11j B /1#Zl eeBW11j=`A`1j11j11j 0q= ee7X11j=`611j11j11j../alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pubEH weF`F`11jF`611j11j11j../alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub|], !eF`F`11jF`=h11j=h %P* e11jF`=h11j=h %E7 TWe11jXFa=h11j=h %kҳ e11jXFa=h11j=h % 6e11jXFa=h11j=h %- æSe11jXFa=h11j=h %~׀ [Se11jaa=h11j=h % Se11jaa=h11j=h %zT Se11jaa=h11j=h %53& Se11jaa =h11j=h %Zq~ &Se11jja =h11j=h %g Se11jja =h11j=h %\ ISe11jja =h11j=h %/ot wSe11jja =h11j=h %/q^ OSe11jja =h11j=h %,%X Se11j|:b =h11j=h %0GH ue11j|:b =h11j=h %x٠ oe11j|:b =h11j=h %J,m\11j#omA`1j11j11j = 9N9NxC11jʣxA`1j11j11j >fe S9N9NxC11jʣx)j11j)j %#`Y \}ڬ11jx)j11j)j %J{ 3}ڬ11jx{0)j11j)j  %1RIt }ڬ11jx{0)j11j)j  %f| j}ڬ11jZyA`1j11j11j ?q zyxC11jyA`1j11j11j @牶`7 ذ}ڬ}ڬ|:b11jz`)j11j)j C-6#5$ %}ڬ11jz`)j11j)j B4.`'~ G}ڬ11j Ozp )j11j)j Cv.e&? }ڬ11j${`)j11j)j B.Ye= Hm}ڬ11j${+E91j11j)j"% K@KPKPɮ 3}ڬ&"11jH{A`1j11j11j AZpi %}ڬ}ڬoh11jY)j11j)j LQ T$ $}ڬ11jb#? ?1j11j)j PQ#P dDG11j?Ƹtrbi11jtrbi B.OΛ 7 11ji 91j11j11jlibz.so.1.3.2*l N3&"11j391j11j4Ti UP30 sN&"11j3x ?1j11ji CU5j F=11jwb11j11j11jcerts/ca-certificates.crtoqz \l9N11jzm-j11jzm-j` Vf {9N11jA`1j11j11j Bd m9N9N_UF11j11j11j11j/etc/ssl/cert.pem BB G9N''11j'11j11j11j/etc/ssl/certsMw 9N9N9N11j9NAK1j11j11j C(fSK b,b,11jb,A`1j11j11j D? }} 11jb,A`1jO1jO1j E[ 2626 11jkiA`1j11j11j F& Y}} 11j}P?1j11ji  W 311j}A`1j11j11j G$a 611jA`1j21j21j H ^~V~V D21j~VA`1j21j21j I>A- )D21j~Vtrbi21jtrbi %}zDG 21j~V6trbi21jtrbi %fxZz 221jtrbi21jtrbi %>pK% m221j otrbi21jtrbi %<[ Uf221j jtrbi21jtrbi %siY 221j 0trbi21jtrbi %CZ w221jJtrbi21jtrbi %Od" /9o21jJ(trbi21jtrbi %U=P o{o21j trbi21jtrbi %H IKo21jtrbi21jtrbi %l6 no21jtrbi21jtrbi %!iR XCo21j>%trbi21jtrbi %J $o21j>1trbi21jtrbi %_W '5o21jظtrbi21jtrbi %g q3 o21jظ$trbi21jtrbi %(*A 8l'21jظ;trbi21jtrbi %ޑ[ d21jظI@91j21jtrbi B=/~DT ht[21j@B`>1j21ji BX rMʣx21j5w$XŮi21jŮi %UW1 ʣx21jrwm Ůi21jŮi  %}W P^ʣx21jrwA`1j21j21j Pg Zaww=`21jrwA`1j21j21j Q\,o 4_ZyZy=`21jw$ Ůi21jŮi %q _ʣx21jw$uŮi21jŮi %9 Zy21jw$.Ůi21jŮi %2{1 rZy21jw$Ůi21jŮi %ԣ cZy21jwA`1j21j21j R^)2 @)x)xl21j)x7Ůi21jŮi %$s:M fS921j9g21jg %d!b $I21j#A`1j_1j_1j SNe* 3R3RqF21j%g21jg B/= ڭ I21j.ڈ21j21j21jfsck.fat? QN{N{21jN{21j21j21jfatlabel6 jݒN{N{21jN{@`qe21j`qe B\npJ xݒ21jN{H`qe21j`qe B0]Y #"ݒ21jW21j21j21jfsck.fatuڌi cݒroro21jro21j21j21jfsck.fatӼ4 ݒroro21jro21j21j21jmkfs.fatՐ Iݒroro21jro@ `qe21j`qe Cr]0- ݒ21jro21j21j21jmkfs.fatm Vݒ{{21j{21j21j21jmkfs.fat1 Cݒ{{21j{?1j21jpri B]/:S ^21j5?1j21j21jlibblkid.so.1.1.09^v fv 21j h ?1j21jGj :^9F|3 *fv21j021j21j21jlibcom_err.so.2.1 Wtb#b#21jb#(i21j(i B=_c^\. t21jb# 21j21j21jlibe2p.so.2.3R̈ hyu4ʬʬ21jʬ(i21j(i D_&P b/u421jʬ21j21j21jlibext2fs.so.2.493 iu421jx(i21j(i a0 0u421j 21j21j21jlibss.so.2.0^ bu4Z}Z}21jZ}(i21j(i Bb" Vu421jZ}?1j21j21jlibuuid.so.1.3.0*q/ KhV*Q21jV*?1j21jGj B cB$% ؉hw21jV*(i21j(i %ׅ- Ji;21j-(i21j(i &|dx {21jO(i21j(i TKc^ {21j21j21j21je2fsck4N7 {< < 21j< 21j21j21je2fsckj " {EGEG21jEG21j21j21je2fsckԸkD x{EGEG21jEG(i21j(i dG {21jEG21j21j21jmke2fsS5" 0{WW21jW21j21j21jmke2fs҄ {``21j`21j21j21jmke2fsMok {``21j`91j21j21jliblzma.so.5.8.3eg` "G21j91j21jJi "eJӓ 21j 91j21j21jlibzstd.so.1.5.7Iaq p#9N k21j9NX 91j21jgh p,> q# k21j9NX91j31j_i $fc`y` 1 Q%31j-1 91j31j31j../bin/kmod- a; .c?[31j? 31j31j31j../bin/kmodn-[. cHH31jH 31j31j31j../bin/kmody=3l cHH31jH B1j31j31j../bin/kmod\6& cH_g31jH >1j31j31j../bin/kmodL0l cH331jH 31j31j31j../bin/kmodFwm cHH31jH8?1j31j1i  gXO X,B31j'?1j31j31jlibkmod.so.2.5.1X_T 43%31j3?1j31j_i r褖sYN 4pJ31j64A`1jP1jP1j ZP ''ݫI31j];A`1jP1jP1j [y O$O$%J31j;'j31j'j  ti\/ *C31j;'j31j'j  tf^ <C31j;@1j31j'j  tnqSC kCrfT31j<c31j31j'j tۗ *C.K31j<\@1j31j'j t8 0DS\Z31j<'j31j'j tX<O 0D31j< 'j31j'j t1d=h! '0D31j<b'j31j'j t/|V 6+0D31j<%@1j31j'j t_ U 0D.c31j<'j31j'j t$a{e u0D31j<'j31j'j tNv J0D31j<'j31j'j ti mD31j<i'j31j'j t#3 z"mD31j< 'j31j'j t~2 mD31j<!'j31j'j tH L mD31j = 'j31j'j t-4" ,mD31j =#S1j31j'j ts} ٬mDLD831j =O'j31j'j t,N:8 ImD31j =@'j31j'j tB g D31j =@@1j31j'j tHDX} D#om31j =Z'j31j'j t n h D31j= 'j31j'j  tx.R  D31j='j31j'j !t D31j='j31j'j "tf ;H D31j-:>'j31j'j #tPw D31j-:>>1j31j'j $t''v5- 2$EC831j-:>@1j31j'j %t8#m :02$EUu31j-:>'j31j'j &td]^ 2$E31j6w> 'j31j'j 't[z 2$E31j6w>'j31j'j (tňB `2$E31j6w>'j31j'j )t#k2 r;aE31j?>E'j31j'j *tȖ\! t;aE31j?>,@1j31j'j +t 1 9;aE 31j?>'j31j'j ,tr ;aE31jc?'j31j'j -tjN ;aE31jc?j'j31j'j .ty|Ƥ );aE31jc?'j31j'j /tr0+ 1;aE31ju"@3'j31j'j 0ttE m?;aE31ju"@:@1j31j'j 1tG 7p;aE%31ju"@'j31j'j 2tf (ADE31ju"@@1j31j'j 3t/ DEέ31ju"@'j31j'j 4tȉp *DE31j@>1j31j'j 5t,׫Se =DE931j@@1j31j'j 6tsBq DE31j@'j31j'j 7tʑ? լDE31j@4@1j31j'j 8t^X pME`31j@'j31j'j 9tD3Yt rME31j@'j31j'j :tu VME31j@@1j31j'j ;tw4 MEѻ31jA@1j31j'j t ME31jA$'j31j'j ?t/z nME31jA'j31j'j @t-op F_UF31jA?'j31j'j AtYyم 1E_UF31jA'j31j'j Bte:* n._UF31jA'j31j'j Ct}e mT_UF31jAU'j31j'j DtpW| =9_UF31jAA`1j_1j_1j L-h #)D)D@KL\1jO'j31j'j  FtHEN _UF31jA*!>1j31j'j  Ktע% o_UF31jτB ?1j31j'j CHsa̲ _UFz31jτBA`1j31j31j bgW V hFhF4R`31jB}@1j31j'j TtzN,} hF)D31jB@1j31j'j Uta=dW QhFzH31jBUu@1j31j'j< _u hFGB31jB@1j31j'j Vt*`O phF.K31jBs@1j31j'j XtmX thFz G31jB)9g(j71jg(j ExEl}u 9^31jWu_1j71jg(j< vHE Lj!_731jprA`1j31j31j  cwTP ?{?{N31j'sA`1j71j71j d85&I !_!_rfT31j'sg(j71jg(j Yt4İx ß!_31j's`g(j71jg(j ]t !_31jesA`1j71j71j eT !_!_WS31jes+g(j71jg(j  dtkqY !_31jes+g(j71jg(j  ot۴\ !_31jsA`1j71j71j fB4 ˰!_!_WS31js!?g(j71jg(j  ztl Q!_31j(YtfUg(j71jg(j, /tFۣ $!_31j(YtA `1j71j71j5 gecn! }s__i)T31j(Ytg(j71jg(j t !_31j1t g(j71jg(j t' l!_31j1t g(j71jg(j  tRp] ;-!_31jLMuUg(j71jg(j  t3 k^_31jLMurg(j71jg(j  tit 5^_31jUug(j71jg(j  tsxZ: {^_31jUuc5g(j71jg(j t7n1 C^_31jUuog(j71jg(j8 _% ^_31jpAvog(j71jg(j8 va`~"D c^_31jpAvppg(j71jg(j: seR v^_31jv pg(j71jg(j: vQ9W ^_31jv jg(j71jg(j6 v= ^_31jvig(j71jg(j6 s\ʪ_ _31jwFg(j71jg(j t{?@ _31j)xg(j71jg(j t=_ :_31j)x!g(j71jg(j  t . \_31jfx(,g(j71jg(j  ty6; ,_31jfxA`1j71j71j jF" t__`S31jʣxg(j71jg(j t-`S rr_31jʣxs g(j71jg(j t< _31jʣxA`1j71j71j k tX +`+``S31jy g(j71jg(jV +s2^) _31jyRhg(j71jg(j6 vanO 7_31jy:g(j71jg(j t)' _31jzg(j71jg(jP (w' _31jz&g(j71jg(j t}lV &+`31j Oz?g(j71jg(j  t65 f+`31j Ozg(j71jg(jD "6w1& n+`31j${A`1j71j71jD  l !<-<J &.IkIk'O31j?{&g(j71jg(j JXwm[GR /k+`31j?{Y#g(j71jg(j Iwdv/ +`31jQ7|U#g(j71jg(j Ii+F sg+`31j~g(j71jg(jl 6@j (n +`31j~g(j71jg(jb 1vjb& +`31jfg(j71jg(j4 jZJW Ke+`31jύ$g(j71jg(j Jj8 4R`31jύ)g(j71jg(j A k#O E@4R`31jrg(j71jg(j: Lk=t 4R`31j ?g(j71jg(j   uj 4R`31jR@g(j71jg(j" sW 4R`31j9=g(j71jg(j  u T ,4R`31j9<<g(j71jg(j  ,uM A4R`31j9<g(j71jg(j  g(j71jg(jl 6) aa31j`@g(j71jg(jh 4&cǔx. zsa31ji2g(j71jg(jh 4ZSdx ְsa31ji2 g(j71jg(jh 4V $8sa31jg(j71jg(jn 7’' (sa31j&g(j71jg(jp 81 sa31jcZg(j71jg(jb 11 {f6 |:b31jg(j71jg(jb 1b*0k q|:b31jKzg(j71jg(jj 5u e|:b31jK+g(j71jg(jl 6ȓ9( Y|:b31jg(j71jg(jj 5,qXW G|:b31j@bg(j71jg(jb 13AD |:b31j@g(j71jg(jH $oC&}| |:b31jg(j71jg(jb 1d=G, |:b31j&4g(j71jg(j^ /t} |:b31j/q g(j71jg(jd 2ĔZI3W |:b31jAg(j71jg(jl 6g wb31jJ(g(j71jg(jZ -,|) wb31jJ(g(j71jg(jb 1Ye wb31jeߗg(j71jg(jb 1"/a4 Twb31jng(j71jg(jT *2K wb31jn?g(j71jg(jV +@J wb31jcg(j71jg(jV +4: .wb31jAg(j71jg(jV +; wb31jAکg(j71jg(jV +fFFF wb31jg(j71jg(jX ,e7r 'wb31j8g(j71jg(jH $&d'. bdwb31j58g(j71jg(jH $P Lb31jUg(j71jg(jJ %\ 7b31jC_g(j71jg(j0 o͔u C:b31jG_g(j71jg(j0 9t b31j*g^g(j71jg(j0 *eBu b31j*%xg(j71jg(j> BTN b31j"_cg(j71jg(j2 aE16 b31j"Sg(j71jg(j* zߵ b31j"qyg(j71jg(j> Ǟa b31j+hg(j71jg(j6 ڹew }b31j+\fg(j71jg(j4 ɗ|l b31jF՝shg(j71jg(j6 M98 >.c31jF՝3hg(j71jg(j6 %VW 3.c31jO;hg(j71jg(j6 d9 0.c31jOg(j71jg(jr 94ɥP .c31jOg(j71jg(j Gm) = .c31jg(j71jg(j GJQ .c31jtg(j71jg(j H8| .c31j{g(j71jg(j HCDC .c31jhg(j71jg(j Huel ).c31j֥(g(j71jg(j KәP%9:q .c31j%g(j71jg(j JX&" .c31jD*g(j71jg(j Khx4 kc31jע:g(j71jg(jp 83:D (kc31jK%g(j71jg(jz =^{# ]Bkc31jKg(j71jg(jn 7(DnqG $akc31jTg(j71jg(jp 8_Tg2 ukc31joLg(j71jg(jr 9 R kc31jog(j71jg(jx <ЛN Rkc31j-Ig(j71jg(jx < * :kc31jg(j71jg(j AH[lV kc31j!g(j71jg(j Bu*i d31j g(j71jg(j HB d31j g(j71jg(j *NB d31jzPg(j71jg(j Upca d31j~g(j71jg(j `ڣ]& Hd31j~g(j71jg(j `:Y'Efu d31j/g(j71jg(j a)c .d31jCg(j71jg(j aJP2e רd31jIg(j71jg(j b\ d31j7[g(j71jg(j bKC +e31j.g(j71jg(j b Y7VF :6e31j@]g(j71jg(j aC42 g e31jdQ2g(j71jg(j aB e31jdQg(j71jg(j `D;> e31jvg(j71jg(j `\ 6fe31jE-g(j71jg(j aa{+ Qe31jjg(j71jg(j a°<8f e31jjg(j71jg(j a#{8 Se31j!g(j71jg(j a \& Se31j^g(j71jg(j a[K0 Se31j!Sg(j71jg(j aF Se31j3ug(j71jg(j ar, Se31jEG.g(j71jg(j a(y hoSe31jWNg(j71jg(j ai@VwC 7Se31jg(j71jg(j aʳc Se31jg(j71jg(j a+  DSe31jÝg(j71jg(j a~Rl Se31jÝg(j71jg(j ab e31j%g(j71jg(j aNBe$ 4e31jIg(j71jg(j aV3T ɖe31jAg(j71jg(j ao e31jAg(j71jg(j aqkl 1e31j\;g(j71jg(j aҶ/Q$ ne31jn%Ág(j71jg(j a3f e31jg(j71jg(j a*%́Y =e31jWg(j71jg(j aw ie31j7g(j71jg(j aVm'v x`e31jg(j71jg(j aQe|  f31jʁg(j71jg(j ap q: f31j7g(j71jg(j ay;  f31jpg(j71jg(j aڹx4T f31jׂg(j71jg(j a; ?| C f31j4dg(j71jg(j a;a f31jFg(j71jg(j a2w5 f31jRg(j71jg(j `^YQ1 \ f31jug(j71jg(j ae f31j}Qg(j71jg(j azV; f31jЃg(j71jg(j axy  f31jqǃg(j71jg(j a'UJIz [f31j֮Cg(j71jg(j aBgE df31je:g(j71jg(j a3F dTf31j3g(j71jg(j DV maf31jB-g(j71jg(j !L 3#f31jf-g(j71jg(j $L7 Ihf31jo.g(j71jg(j P} Sf31jN(g(j71jg(j 0nPD f31j[,g(j71jg(j >Of 'f31jOy&g(j71jg(j Ge 'f31j:-g(j71jg(j ѩ6 W'f31jDg'g(j71jg(j ]aqOj .'f31j5+g(j71jg(j cۇ ^'f31j}+g(j71jg(j r 'f31j]&&g(j71jg(j iZ 'f31j%g(j71jg(j 1+ s'f31jBg(j71jg(j V^ 6'f31jE g(j71jg(j  , D'f31j.Ag(j71jg(j Q{zH n'f41jzGg(j71jg(j RՇK: 0f41jz}Lg(j71jg(j( hl9c R0f41j6nKg(j71jg(j& OId 0f41jQ%!]g(j71jg(j0 tɰ 0f41jcw\g(j71jg(j0 ,Ja@4 Byg41jJsg(j71jg(j: ^r >Byg41jVrg(j71jg(j: a!C 5VByg41jc<g(j71jg(j  ٥8@ ~Byg41j;g(j71jg(j ; Byg41j'wQg(j71jg(j* Fu PByg41jMPg(j71jg(j*  6 :Byg41jq Jg(j71jg(jd 2)߾> >Byg41j} Vg(j71jg(jX ,[ } B\Byg41j} g(j71jg(jT *` Byg41j g(j71jg(jf 38Z{~ Byg41j g(j71jg(jf 3/emߖp DByg41jq g(j71jg(jf 3b`Bj 7Kg41j g(j71jg(jf 3i }Dv .XKg41jY ڭg(j71jg(jX ,G1Z ]LKg41jY g(j71jg(jP (s 8 Kg41j ?g(j71jg(jh 4ў OKg41jg(j71jg(jb 1H`i Kg41jNg(j71jg(j^ /WXa Kg41j.Sg(j71jg(j* /[CG }Kg41j7Qg(j71jg(j* '$b Kg41jRg(j71jg(j eY !:U Tg41jd6g(j71jg(j e:4 zTg41jvg(j71jg(j hfb/d Tg41jg(j71jg(j l7L Tg41j>g(j71jg(j k:Gf Tg41j4g(j71jg(j k6" 4Tg41jٝg(j71jg(j h ^Tg41jg(j71jg(j kxdY :Tg41jg(j71jg(j ky_ Tg41j`g(j71jg(j kN)+ Tg41j`8g(j71jg(j hs ¼Tg41jPg(j71jg(j h!3PQ )fmh41jПg(j71jg(j h-eܳ fmh41j}g(j71jg(j joJ fmh41jg(j71jg(j e[qg &fmh41j̿߃g(j71jg(jB !V O6fmh41j9ug(j71jg(jl 6P fmh41j&"I+g(j71jg(j  [u  fmh41j&"g(j71jg(j~ ?a6 1fmh41j/_zg(j71jg(jt :˭T xfmh41j8Lg(j71jg(jB !ȯ|5 fmh41jJBwg(j71jg(j< 0?}w doh41jJ~g(j71jg(j@  oa- Phoh41jSSXg(j71jg(jr 9ND Y oh41j\g(j71jg(j\ .HeC[@| Σoh41jn Lg(j71jg(j Ttj2 oh41jn &Lg(j71jg(j T {v! Qoh41je#g(j71jg(j I]I| 2oh41jg(j71jg(j \Zc xh41jѩ (ug(j71jg(j ^" xh41j`!qg(j71jg(j ]u q xh41j!kg(j71jg(j [*, xh41jU"g(j71jg(j `? My xh41j"g(j71jg(j `Zn s xh41j4I#Ag(j71jg(j uWE ZZxh41j4I#g(j71jg(j {t'9R~ 0 xh41jn%6g(j71jg(j nO.S vxh41j%2g(j71jg(j n]t ai41jb&g(j71jg(j |w ai41j&g(j71jg(j {Gg tai41jV'Bg(j71jg(j z - T6ai41j'Bg(j71jg(j z<sIBK ai41j|)Lg(j71jg(j v v ai41j0)UNg(j71jg(j T, ai41jK*4g(j71jg(j N{< #{ai41jT*4g(j71jg(j NF!P}: $ai41jfd+Lg(j71jg(j T/% ci41jx+Pg(j71jg(j Upoʼn9 i41jX,"g(j71jg(j v= tPi41jX,g(j71jg(j lw q i41j}.g(j71jg(j c q Mi41j.ug(j71jg(j qF i41j/g(j71jg(j qZ 5ci41j/g(j71jg(j {(Hzm i41j50g(j71jg(j wG +i41j50g(j71jg(j z gj41jGZ1hg(j71jg(j ngܯ"J `^j41jY1g(j71jg(j rәNr j41j3wg(j71jg(jP tl" fLj41j3g(j71jg(jN 4O} j41j4g(j71jg(j x- j41j5g(j71jg(j  nJ ҄j41j\6Cg(j71jg(j Q7 ^U kUj41jC8<;g(j71jg(j OXgMK GUj41jU8g(j71jg(j *F ʋUj41jg8=g(j71jg(j #^0XY Uj41j9&&g(j71jg(j +fVv LUj41j::#g(j71jg(j ]2 ¡Uj41j<X"g(j71jg(j &P-^x EUj41j F=D%g(j71jg(j 9ގ Uj41j-:>ig(j71jg(j~ g2$ Uj41jH>g(j71jg(j~ xZg Uj41jAng(j71jg(j 7:P SUj41jAg(j71jg(j +rl j41jB1g(j71jg(j {C9L b2j41jC0g(j71jg(j `(چ j41jDE-g(j71jg(j cߊ j41j_UF0,g(j71jg(j /7_ (5j41jIG,g(j71jg(j Cji ej41jG+g(j71jg(j = ~ j41j%Jg(j71jg(j &Z \j41j J3g(j71jg(j X|_ j41jWK&g(j71jg(j +Wz1- j41j@KL%g(j71jg(j q#q j41jpNt&g(j71jg(j YzkWH  k41jdO%g(j71jg(j  k41jXP(g(j71jg(j ] 3V !/ k41jP&'g(j71jg(j (!OEb _ k41j1j>1jU Q֩UI LOO5m41jfA91j71j71j  e8 rfTrfTwG41jf>1j71jg(j fu/n bIk41jxA91j41j41j Ȧm !xx4I#41jxA91j41j41j Xk ]**4I#41jxA91j71j71j# .ƫ6 ll4I#41j6$-91j71jg(j  gu^ Gl lSA41j6(91j71jg(j suĜ% ll?41j6 91j71jg(j  zuU l6w>41j6'91j71jg(j  uܫd }lτB41js$91j71jg(j  up! l2$E41js,$91j71jg(j  u~9 l F=41j91j71jg(j  ucm nl0D41jG91j71jg(j  u l<41j*A91j71j71j &Ƶ b8=l=l4I#41j*:1j71jg(j  u.Tĵ g=l41jgA91j71j71j  Ns [e5m5mwG41jgV :1j71jg(j  u%Z]S L`=l;41jN3:1j71jg(j  u wY=l41j:1j71jg(j u 59 :=l41jB:1j71jg(j" ҏT x=l2641j$:1j71jg(j  uDH ;=l41jf$:1j71jg(j  uj< V4=lh41j:1j71jg(j u E =lO41j$:1j71jg(j  uіF+ w]l[41jD:1j71jg(j "O (lM41jDA91j71j71j  G4 xM>&n>&n;41jD:1j71jg(j  "WBV >&nv41jD":1j71jg(j  "Gj|; B>&n41j,:1j71jg(j  "v\x X>&n41j,:1j71jg(j  ":6UQ &>&nI41j,:1j71jg(j #"I;| o>&n41j, :1j71jg(j  *"U 3l~q41j}$!:1j71jg(j  3"(Bb $l41j :1j71jg(j <"V7 4l41j 1!:1j71jg(j  D"Ȣw Yl(b41j]:1j71jg(j  M" l 41j]3:1j71jg(j  R"uh" l241j]Y,:1j71jg(j  _"D8 olݶ41j]?:1j71jg(j k"ͽP'Y l41j:1j71jg(j r"iM 8l&41j':1j71jg(j  z" ;t*F lGl41j=:1j71jg(j  "8>x( wl-L41j0:1j71jg(j "w?Y Nlb#41j:1j71jg(j  "|u ?l\41j>:1j71jg(j  "LNq 9All41jQ~.:1j71jg(j  "A4G\ 6lH41jn#:1j71jg(j  "8gr ~Sla41j9V%:1j71jg(j  ",Ov 2m41j9:1j71jg(j  "2G2 #2m<41j KF:1j71jg(j$ "~ o2m741j :1j71jg(j  "5y 2m%41j :!:1j71jg(j  "R^/4z 2m+41j :1j71jg(j  "2ߦo& 2mt41j :1j71jg(j  "Hm 02m,41j:1j71jg(j "?/I 2m41j.:1j71jg(j ",ˆH )>2m 41j.:1j71jg(j "nRO 62mا41j.:1j71jg(j "Q6< ,m51j =:1j71jg(j " J ,mY51j =L:1j71jg(j  "[ ,m051jZb\:1j71jg(j  #?gP P,mQ@51jZb:1j71jg(j #J" ,m,51jZb:1j71jg(j   #4Ozc g!,m^51jc:1j71jg(j #M .C,mέ51jc:1j71jg(j  #a ,mB51jc:1j71jg(j # &,mK51jc&:1j71jg(j  %#$Ԧ ,my51jlG:1j71jg(j  /#"ؠ h,m]951jl7:1j71jg(j  5#ȓ+' /5m>51jl/:1j71jg(j  :#6 5mU51jl:1j71jg(j  F#4=? E5m:ܱ51j~V09:1j71jg(j L#& a5mx51j~Vo:1j71jg(j  [#z{ vg5m 51j~V:1j71jg(j  a#?X$ Q]5mۏ51j~V:1j71jg(j f#%, 5m7 51j:1j71jg(j  m# 5 5m51j>A91j51j51j,,   (51jظA91j71j71j fk: |>&n>&nK*51jظ):1j71jg(j  r#74 h>&n(51jظ*:1j71jg(j  }#$6i >&nZ51jظ1:1j71jg(j  #wMSc >&n051j2T:1j71jg(j  #G ~ >&n 51j2A91j71j71j o #GcnGcnL-51joM<1j71jg(jN 'xC |>&nUu51joK<1j71jg(j& ^.s fGcny51jok<1j71jg(j6 WҖ` Gcnʣx51jo<1j71jg(jT *vk Gcnrw51j;XN<1j71jg(jh !rLDn tGcnp51jMA91j51j51j 2Dl; J o+51j@ A91j71j71j  .GcnGcno+51j H\;1j71jg(j0 ~ $NGcn.51j A91j71j71j B!WkG GcnGcn93*51j A91j71j71j h! GGcnGcn93*51j Z;1j71jg(j $9I UGcn351j X;1j71jg(j. d]N GGcnq/51j.ƈ;1j71jg(jF #n+: TGcn,051j7 (;1j71jg(j K/+n M/Gcnyu951j7<;1j71jg(j  #t GcnkN251j*A91j71j71j b GcnGcn93*51j*R;1j71jg(j* >n2 cGcnQ<51j*A91j71j71j Vc SYnYn')51j;1j71jg(jJ %S(LX9F Yn51jA91j51j51j # Gcbou]51j3Q<1j71jg(j  &Ђ6K5 boXFa51jA91j71j71j F_q C8bobo')51jL<1j71jg(j( 03r h=boja51jA91j51j51j <"[ h-51jA91j71j71j Ws RkWokWo-51j:1j71jg(j &iT4 rbo*51jI:1j71jg(j& 3ض} bbo651j :1j71jg(j &W% bo51jA91j71j71j $ kWokWo-51jJ:1j71jg(j& Z ~kWoo51j$:1j71jg(j  #&  kWoT51jA91j71j71j <'g ҢkWokWo]'+51j1<1j71jg(j  -&! xkWo[51jQ(<1j71jg(j  :&0g0 tkWo\51jEA91j71j71j  ]kWokWo]'+51j<1j71jg(j  #t@H kWowP[51jY%<1j71jg(j  E&E kWo\51jA91j71j71j  ekWokWo|)51j= :1j71jg(j  O&W`B skWowb51j kb%:1j71jg(j  X&*/ kWo51j kA91j51j51j tO ~.51j kA91j71j71j  %Hx N}o}o@.51j kA91j71j71j :o S/}o}o@.51j4Q;1j71jg(j* $C }o>51j;1j71jg(j^ /(~+ 4kWo 51j#%;1j71jg(j  b&k$8 kWo*u51j"3;1j71jg(j k~7Z ekWo51j";1j71jg(j  l&e=Y0 $;kWo51jU"y;1j71jg(j> !ɪE }oE,51jF#`;1j71jg(j2 !v@* }o{51jX=$A91j71j71j ׾ V}o}o@.51jX=$o;1j71jg(j8 0)] }oX,51jaz$A91j71j71j GW T O}o}o@.51jaz$;1j71jg(jv ;L); Eb}o'51jaz$A91j71j71j a 7}o}o@.51jb&WW;1j71jg(j, 7 }o51j&e;1j71jg(j4 )RO1h }o'51j&A91j71j71j X\gο pp@.51j'td;1j71jg(j4 )ip& kpD51j'Y;1j71jg(j. )#&S ph 51j'A91j71j71j c'O "pp@.51jV'j;1j71jg(jj 5$gEG$H cpe51jV'A91j71j71j SH MVpp@.51j );1j71jg(j @A%nq*P xp?)51j?)A91j71j71j ~) /pp@.51j?)C;1j71jg(j )y/ ^p51j|)A91j71j71j Z8T pp4/51j-0<1j71jg(j r&@< Cvpe51j-)<1j71jg(j  y&9Hj pf51j-ٌ<1j71jg(j d%q1b pb51j@.n5<1j71jg(j &<$:H pe51j@.A91j71j71j 4D pp4/51j)0j<1j71jg(j6 %'%w + p91A91j71j71j (xE 3qq]'+51j>1n/<1j71jg(j  &ȳU p51j>18M<1j71jg(j( *? 99qvŠ51jGZ1A91j71j71j #}͂ <qq?)51j3A91j71j71j X7 tqq|)51jB3p"<1j71jg(j  &pJD Rqi 51jB3, <1j71jg(j  &Vx .q<51jB3A91j71j71j n qq?)51jB3b"<1j71jg(j  &?^D q51j3<1j71jg(j &DS عq51j3<1j71jg(jn 7*& $qA51j31<1j71jg(j  & ёT q 51j3!<1j71jg(j  &xs Lq""51j3!<1j71jg(j  &< xq 51j3A91j71j71j k ?q?q|)51j6<1j71jg(j &lP@ q̿51j\6,<1j71jg(j  &.#f qv51j\6<1j71jg(j  '4s ?q k51j\6A91j71j71j =  -?q?qfd+51j 67<1j71jg(j '<0 A?q( 51j 6A91j71j71j  *?q?qo+51j 6/<1j71jg(j  ' Έȹ a?q4 51j7A91j71j71j Q0 X8?q?qo+51j7<1j71jg(j ,'K 6?qq 51j7A91j71j71j g7K ܹ?q?q93*51j(P7z4;1j71jg(j 3'h$ <?q51j(P7A91j71j71j r>3+ Y?q?q]'+51j(P7<1j71jg(j  A'e O?qai51j17!<1j71jg(j G' O?qj51j17~<1j71jg(j  O' h4?qUj51j17A91j71j71jh gd@% arr.51j17A91j71j71j ȡ2@ rr.51jC8W<1j71jg(j, +κ r}.51jC8+<1j71jg(j  U' ?qi:51j;b<1j71jg(j2 ++ [?q:751jQ<%A<1j71jg(j" !| l, ;H?q{T51jQ<<1j71jg(jT *+Y'y ?qcE<1j71jg(j$ +Z~ #|qU51j6w>.<1j71jg(j  j'b`@{y |q=51jH><1j71jg(jd 2,Ap Iv|qBW51jH><1j71jg(j v'J)@ |qA51jH>t><1j71jg(j  ~'1D| =||qH51jQ.?2<1j71jg(j  '7@/ |qËV51jQ.?I/<1j71jg(j  '+n7j U|qIG51jAE<1j71jg(j$ A,bN G|q_UF51jAg<1j71jg(j ZS,@8 a|q351jSAc<1j71jg(j2 , f@|q?>51jSA<1j71jg(j ' K2q@51jCx<1j71jg(j> ,cWS q%J51jC/<1j71jg(j  'eW VqG51jC<1j71jg(j 'ˣ Oqu"@51jC<1j71jg(j '^ @ _qSA51jC~<1j71jg(j@  -vJ~ WqB51jC"<1j71jg(j  'NC j[qτB51jmD<1j71jg(jZ -!-SЇ- qK51jmDA<1j71jg(j 'Jx gq1751jVFA91j71j71j S= rr.51jVF$<1j71jg(j  N-6+ rM51jhF`e<1j71jg(j4 ,Z b_q[M51jbJZ<1j71jg(j. X.k DprX51jbJ<1j71jg(j  '^Gp :prnI51jbJ`H<1j71jg(j& o.p r-51jJA91j71j71j (BJ `Urr.51jJĶ<1j71jg(j\ ..Loӫ r D51jJ1<1j71jg(j  'EV ^Zrb&51jRL<1j71jg(jB !.Pr rrV'51jRL<1j71jg(jR ). Gmr )51jRL-<1j71jg(j n.+ <r93*51j[MA91j51j51j J PPx+51jXPA91j71j71j 8( dQ rrx+51jXP;1j71jg(j  'GY*m r?>51jP;1j71jg(j  'hIԱcz %rH>51jP7;1j71jg(j  'qZ r=51jPA91j71j71j  U eses.51jPA91j71j71j >[z eses.51jQU<1j71jg(j, h/+ ED esD51jQ-i<1j71jg(j6 ~/]2 es 51jLQe=<1j71jg(j  8^ x9 $#es951jLQ<1j71jg(j 8hQ" es51jLQ4&<1j71jg(j  8-\'. es51jQ <1j71jg(j "87t OLes51jQ <1j71jg(j  )8>"5 +es_^51jQA91j71j71j  Seses.51j!AR <1j71jg(j  28N 0esq؃51j3R<1j71jg(j\ ./a7, 2 6Ces51j3R,<1j71jg(j  ;8{<[ ves:51j3R"<1j71jg(j  G8b p<es51j"f7 Y1tq51j)x?V;1j71jg(j, M>j0 K1tp51j)x;1j71jg(j  8O) T_1t@t51jfxA91j71j71j i&r Ch:t:tX,51jfx;1j71jg(j 8k h q1t51jfxT2;1j71jg(j  840i A1t51jʣx;1j71jg(j 8KZ W1t51jʣxw;1j71jg(j< c>1 w1tÝ51j${$;1j71jg(j 8+H-H S1t851j-C{+;1j71jg(j  8e n1tJ151j-C{;1j71jg(j 8 \8 r1te51j-C{ 0;1j71jg(j  8?[= :t51j6{A91j71j71j G8 d:t:t,51j6{;1j71jg(j 9f5H :tJ51j?{<;1j71jg(j  9\@Wl Ø:tV51j?{ ws[51j?{A91j71j71j cBw i:t:tX,51j?{t;1j71jg(j< >jD 0:t51jQ7|;1j71jg(j 9m :t51j~9;1j71jg(j 94y\f {:t51j~3+;1j71jg(j  &9f ):t51j\~o;1j71jg(j 19Xvn :t51j\~;1j71jg(j 89L 0K:tӼ51j\~;1j71jg(jP (>NP {s2651j\~U;1j71jg(j, >bZ sݽ51j~R;1j71jg(jx <R9 s@]51j~A91j71j71j {{ :t:tX,51j;1j71jg(jh 4%Sq n:t51jvM;1j71jg(j( >."|'F ߚsl51jvA91j71j71j à CuCux+51j $;1j71jg(j JYS+ aCu51j A91j71j71j  /yCuCu,51jh;1j71jg(jr 9SwU Cu151jhA91j71j71j fH2 CuCu93*51jq؃q;1j71jg(j ?9vO CuA51jq؃;1j71jg(j F99Ldu -JCuc?51jzA91j51j51j Ӑp 1X .51jzA91j71j71j CZ% 6CuCu.51jzTu;1j71jg(j ^Sh u*Cuc51j\V;1j71jg(j, ? $v ^Cuai51j;1j71jg(jR ):T T]4 5CuByg51j A91j71j71j jes UuUu.51j N;1j71jg(j( ? n& jCu#om51j vk;1j71jg(j6 .?. "UuYn51j`D;1j71jg(j RcT )Uuj51j`A91j71j71j Mu;d t@UuUuBp*51jdH<1j71jg(j  N9WF zUu#om51jvŠA91j71j71j kG $UuUu/51jvŠA91j71j71j P0_ vUuUu/51jvŠ:1j71jg(j T9y\ 3Uu{51jvŠ#j:1j71jg(j6 Tsm UuJ51jA91j71j71j dѺd 4UuUu/51j$:1j71jg(j  X9) |Uu51j4:1j71jg(j  b9%.\ ~Uup51j<Z:1j71jg(j  g9PL҉8 }Uu351j<A91j71j71j A%f UuUu.51j</<1j71jg(j  m9Q&D ڬUul51j<A91j51j51j AJR Ox+51jA91j71j71j ˆ&@ UuUux+51jJ:1j71jg(j  y9basc Uuۘ51jA91j71j71j A KUuUu]'+51j1<1j71jg(j  9TJ* Uu[ 51jA91j71j71j  wx@A AS^u^u(51ja<1j71jg(j2 I? n^u4I#51j<1j71jg(j  9( ^uj$51j$<1j71jg(j  9uz :B^un%51jA91j51j51j $G?p) UUx+51jUA91j71j71j $U ^u^ux+51jU:1j71jg(j 9G ^u51jUA91j71j71j "4B/ ]^u^u4/51jU&<1j71jg(j  9W `^uݒ51j<1j71jg(j  9A*!% q^uѓ51j1<1j71jg(j  9<6k} [^u51j A91j71j71j# "w 4gvgv-51j |<1j71jg(j 9"%{g R'^u 51j x<1j71jg(j 9WA Z^uN51j ]<1j71jg(j 9phq ^u.51j**<1j71jg(j  9`~ {j^uR51j*{<1j71jg(j  9rs +gvms51j*<1j71jg(j  9RJH 0gv*51j*N<1j71jg(j  9 'MR wogv51j3ď?<1j71jg(j 9 1gv51j3ď<1j71jg(j  9YBF gv51ji25<1j71jg(j  V|ǙR 0gvC51j{<1j71jg(j VB*b[ vgv51j{A 91j71j71j5 "$ҡ{C" Nvvfd+51j{A91j71j71j "7^r vvfd+51j{ ;1j71jg(j Ti^oc vV51j&b;1j71jg(j2 Ux#: 4gv^51jKe;1j71jg(j4 U= EgvrfT51jK5;1j71jg(j^ /Ua&6 zgvQ51j爔j;1j71jg(j6 XX *pAvNrS51j爔A91j71j71j "`L }vvfd+51j/q!;1j71jg(j IX'5re v3N51j/qA91j71j71j #qP vvfd+51j/q;1j71jg(j |eXg& fpveZ51j8u';1j71jg(j  V_!w `pAvz G51j;1j71jg(j  V) xBpAv_UF51jr;1j71jg(j vXP pAvA51jr];1j71jg(jR )WY<|! {pAvH51j=;1j71jg(j AY  ppAvJ51jF՝Da;1j71jg(j2 YtLI>\ pAvRL51jF՝U;1j71jg(j, b?B$ EpAvH51j!?;1j71jg(j  V3uI IpAvP51j;1j71jg(jL &YC@>8 SpAv+`51j7x;1j71jg(j> Ztа MpAvwb51j7sS;1j71jg(j* ZŽlc vaa51j79F;1j71jg(j$ x?Ko vѲ]51jA91j71j71j $5~ vvo+51j\<1j71jg(jz 4Z*` vz51j\A91j71j71j $3{ Uvv/51jfv<1j71jg(j  .VL(V v%&51jxA91j51j51j #ڥD i<<(51jxA91j71j71j #_ #+vv(51jx*;1j71jg(j  4VS`` v51jxA91j71j71j #3[ 2vv(51j-;1j71jg(jf Zj3 MC 1v51j-A91j71j71j #m8.C_ _yvv(51jۏ,;1j71jg(j~ ?[ \`v451jۏl9;1j71jg(j ?V(qh v 51j YI;1j71jg(j& [A| ٱv'51j {;1j71jg(jR )[:m6 -vK51j 91;1j71jg(j  NV g:y /Evx51j>/5<;1j71jg(j  [Vy6 Mv51j>/;1j71jg(jJ %\G]E 3v51j>/Dg;1j71jg(j4 D\N// fv51jGllQ;1j71jg(j* \qk Xv}51jA91j71j71j #-4F vv(51jb<1j71jg(j2 \l v 51j<A91j71j71j #)bp $rwrw(51j<c<1j71jg(j2  ]B rw{51j鶯Q<1j71jg(jl 6%]G0 (prw51j鶯A91j71j71j #7)P~ rwrwBp*51j(bA91j71j71j # G rwrwBp*51j14D<1j71jg(j$ []ᡨl rwbo51j1?I<1j71jg(j& m]4-g 'rw>&n51j1A91j71j71j  #+rG rwrwBp*51jCo2<1j71jg(j  kV/ rw}o51jCA91j71j71j  #'+ ͗rwrw93*51jC}<1j71jg(j@  ?%~a rw`51jLVm<1j71jg(j  xV_IL. rw51jLVY<1j71jg(j. ] 6$pb &rw51jLV"<1j71jg(jJ %]wE_ inrw51jUB wY51j$B':1j71jg(j  V!7s! Sw51j$E):1j71jg(j  VA0 wGu51j6A91j71j71j'- #[SXQ  ww;51j6A91j71j71j #3zn DwwU"51j6:1j71jg(jV +1^ZO8 MwC51j6A91j71j71j #%DW !ww!51jAq:1j71jg(j: \^e |wC51jX091j71jg(j  VLl Zw<51jA91j71j71j #sL ww+ #51jy :1j71jg(j H`Da\ 1w.c51jA91j71j71j #D- wwU"51j[:1j71jg(j| >y^~U KDwWK51jmA91j71j71j #R77 ֯wwU"51jm:1j71jg(jb 1Ic^[ dgw51jvA91j71j71j #A2 Hgww`!51j*Qi91j71jg(j6 ^L wݒ51j*A91j71j71j #0Kb1 ww`!51j< d91j71jg(j Vo"u w<51j< A91j71j71j ##ūn xww`!51j< ]91j71jg(j0 ^E wŔ51jEGA91j71j71j #(u R6fxfx!51j91j71jg(jr 9j_ W/ wfx51jlA91j71j71j #`m @fxfxU"51jl9:1j71jg(j VCNn hfxSe51jlA91j71j71j #6'0 fxfx+ #51j:1j71jg(j Gzd<ۯ)z fxӘ51jA91j71j71j #}A |Kfxfx#!51j91j71jg(jn 7d0} fx$51jA91j71j71j #J fxfx"51j 91j71jg(jv dQ fx=51jA91j71j71j #Cg kfxfxx51j"Hb:1j71jg(j2 p#F5 _fxD51j+'A91j71j71j (T} fxfxl 51jP91j71jg(jh 4_~P ZfxLV51jP3+91j71jg(j  V7# fxc51jt591j71jg(j Wza fx251jtA91j71j71j #l9ߝ ʣxʣxU"51j.0:1j71jg(j  WU2 \ʣx k51j:1j71jg(j sf$3u ʣx!851jQV:1j71jg(j, _ ZOʣx/_61jظA91j71j71j ?8e7V ʣxʣx`!61joFv:1j71jg(j qH 7ʣxv61jA91j71j71j #, ʣxʣxx61j n91j71jg(j8 &g{l ʣx~q61j A91j71j71j #+6R iʣxʣx"61jq M(91j71jg(j Kxr*` +ʣxk`61jq A91j71j71j /6V ʣxʣx`!61j :1j71jg(j }Bg>+y X3ʣx+ #61j A91j71j71j //>>< rʣxʣxU"61j91j71jg(jv ;r,^ U }ʣx61j"91j71jg(j  !Wi 5wro61jNA91j71j71j ?u}0( T1ʣxʣx!61jNS91j71jg(j rˌD ʣx61jNA91j71j71j ?_ ʣxʣx61jA91j71j71j ?zZ Uxx61j0}91j71jg(j@  ?ӯfk Dx61jA91j71j71j ?e SD9 Qxx61j[*Z91j71jg(j. gUބt NxA61j[A91j71j71j ?y xxl 61j[91j71jg(jP (gz5T txȇ61j[;a91j71jg(j }sw,  ʣxB61jg91j71jg(j4 Vtzh *ʣx[61jE,Uj91j71jg(j [pt@@ /ʣx61jE,A91j71j71j ?Ep> 6xx`!61j kW91j71jg(j  *W~/~L wNxhF61jA91j71j71j #n4 (nxxx61j$p91j71jg(j ]u `Lxp61j&"A91j71j71j #? bxx!61j`!c":1j71jg(j (we, xqF61j!A91j71j71j  #m 1zz 61jF#91j71jg(j  0WX],}3 x61jF#91j71jg(j  5WCY /x961jX=$91j71jg(j  :WT1T x2-61jX=$91j71jg(j  ?W?>( D 1xz61jX=$91j71jg(j  DW|y xF61jaz$91j71jg(j  IW8Ȗ= \xw61jaz$91j71jg(j  NW   yk61jaz$91j71jg(j  SW}, vy%61js$91j71jg(j  XWx y61js$91j71jg(j  ]W?\` #y[ 61js$91j71jg(j  bW[ y61j|1%91j71jg(j  gW:M\7 :,yj61j|1%B91j71jg(j  lWo {yfmh61j|1%91j71jg(j  qWh[t \5yai61j|1%91j71jg(j  vWa yLMu61jn%91j71jg(j  {W>!0$Q y7L61jn%91j71jg(j  Wٜq ӂyd?M61j%91j71jg(j  W|-I_ JypN61j%K91j71jg(j  W\>mR yO61j%91j71jg(j  W6U- ҔyP61j%91j71jg(j  WUdK y!AR61j&.91j71jg(j  WA9N yE5S61j&91j71jg(j  W 'yrfT61j&91j71jg(j  W zyU61j&l91j71jg(j  WiA ryV61j'91j71jg(j  WW! yW61j'=91j71jg(j  W)a &y/hY61j'91j71jg(j  WLI͂ #y\Z61jV'91j71jg(j  ẆE y[61jV'91j71jg(j  WHtų y\61jV'91j71jg(j  W yi^61jV'91j71jg(jR )w˂#k y_61j'_91j71jg(j Xg}c% yb61j':91j71jg(j OVhHWs Ay_d61jfd+91j71jg(j Ah4 /yf61jfd+91j71jg(j WsO)) zXFa61j-&91j71jg(j  W+[ Αzzl61j-91j71jg(j  Wx @zv61j.91j71jg(j  W|Ґ4 4zʣx61j.91j71jg(j  WuLF zy61j.91j71jg(j  W٣$ /z#om61j@.91j71jg(j  WBk bzGcn61j@.91j71jg(j  Wʀv az}o61j@.T91j71jg(j  W$A zp61j.91j71jg(j  W T !z3r61j.x91j71jg(j  jOm zs61j.C91j71jg(j  j9ڌ YzpAv61j.91j71jg(j   jG< zz61j.91j71jg(j j/t& hzu+}61j4/"91j71jg(j  j z2z?{61j4/ 91j71jg(j j՚+ ]za61j4/91j71jg(j jnd z\~61j/A91j71j71j ?| zz"61j/Xv:1j71jg(j< h]H> zN61j,0A91j71j71j ?*ks Uzzx61j3A91j71j71j ?3I Fzz61js4:1j71jg(j| >iC z]61js4A91j71j71j ? jzz61jŰ49:1j71jg(j qlHJc ]z4R`61jŰ4A91j71j71j ?$=4 A Bzz61j7?:1j71jg(j  !jZOd m)z\61j(P7>+:1j71jg(j  rlz+ `zvM61j(P79&:1j71jg(j  1j!U_DO zwP[61jH>6/:1j71jg(j  ;j\"z &z\61jQ.?,:1j71jg(j  GjY{ zAY61jQ.?A91j71j71j ?: zzx61jQ.?x:1j71jg(j _}noӺ ӡ GzSS61jc?A91j71j71j ?{%| ~ jzz61jSAF91j71jg(j$ imZQ NzU61jSAA91j71j71j ?%s8* zz#!61jA*91j71jg(j  Sjv 4zJ61jA91j71jg(j  ^j!n9G ZzH61j B91j71jg(j djѧ :znI61j BA91j71j71j ? Qzz`!61j B]+:1j71jg(j  lj" 4zO61jGBA91j61j61j ?: %K%K!61jGBA91j71j71j ?ao[ Z zz!61jGB- 91j71jg(j dwn +zt61jGBA91j71j71j ?O0 Gzz!61jK91j71jg(j  wjo vzb,61jKA91j71j71j ?> M${${!61j%Kw:1j71jg(j< >z` SWB 8${h 61j%KA91j71j71j ?{\" ${${x61jN91j71jg(jP (is8' ${061j'OA91j71j71j ?.d v${${"61j'O&:1j71jg(j Jn1p ${ѩ 61jdOA91j71j71j ?) L${${"61jdO:1j71jg(jz  a2 v${֓'61jOA91j71j71j ?Z ؉${${/61jwbA91j71j71j ?a @${${/61jwb:1j71jg(j |j8}ʏ ${61jwb:1j71jg(j j:g ${61jb:1j71jg(j j ${61jbA91j71j71j ?~Ǔ ҈6{6{/61jb :1j71jg(j jG[ ${*61jbP:1j71jg(j jNw@2 l${< 61jbp:1j71jg(j jz 0W${N61jbM:1j71jg(j( &o>xN ]6{rx61jkc):1j71jg(j  j5UŨ 6{61jkc:1j71jg(j j | V6{l61jkc/&:1j71jg(j  jSʘ/ -6{#61jkcF":1j71jg(j  j% ${\61jcA91j71j71j ?+7 M6{6{/61jc3:1j71jg(j  j@ 6{Ý61jc&:1j71jg(j  jԣ :: =6{61j"dA91j71j71j ? 4 |6{6{/61j f :1j71jg(j jF( |6{61j fA91j71j71j ?5vR J6{6{)061jHfP:1j71jg(j U:o>eqÒ 86{ 61jHfA91j71j71j ?`a. 6{6{/61jHf!:1j71jg(j  j,h_ +K6{61j'f:1j71jg(j  j6bb p${861j'fo:1j71jg(j  jX* S${Sn61j'fU:1j71jg(j  jE]F ${/z61j9 [?{?{s$61jIkG=1j71jg(j$ o=_^ ]?{I61jۆk|c=1j71jg(j2 zFBBo QT?{61jۆkA 91j71j71j> /7( 7Zt|Zt|s$61jp=1j71jg(j 4kq z [?{~61jqH=1j71jg(j ;kHY)! j?{~61jq=1j71jg(j Ck  0(?{61j?q/=1j71jg(j Jk'T< ?{D61j?q=1j71jg(j QkTB A?{h61j?q=1j71jg(j Xko|n g?{ύ61j?q=1j71jg(j _k Χ H{61j|qq=1j71jg(j fkX H{D61j|qm=1j71jg(j mkq b PH{̄61j|q;=1j71jg(j  uk iH{M61j|q#=1j71jg(j  {k*WJ; ؕH{61jq_=1j71jg(j k4T cH{ 61jq=1j71jg(j  k({ xH{961jq=1j71jg(j kEv iH{q؃61jpr=1j71jg(j kqϸL< H{z61jr=1j71jg(j k/+ {5H{ 61jr=1j71jg(j kR ~H{2-61jLMuv%=1j71jg(j  kl H{~h}61jLMu$=1j71jg(j  k$w Zt|#|61jUu =1j71jg(j  k$5O U Zt|l|61jUuA91j71j71j /Ĉ dZt|Zt||1%61jUu-=1j71jg(j {]}U Zt|a61j^uA91j71j71j /cQԾ Zt|Zt|=#61jz <1j71jg(j  kh1< _Zt|4[61jzˏ<1j71jg(jH $o9<C Zt|r61jz$<1j71jg(j  k8` Zt|61jzA91j71j71j /!ټ ZSZt|Zt|=#61j-C{u#=1j71jg(j  k #Zt|F՝61j-C{A91j71j71j /3y Zt|Zt|=#61j6{+=1j71jg(j k; JZt|061j?{A91j71j71j] //|r }}O$61j?{*=1j71jg(j  ka ( Zt|m|M61jQ7|<=1j71jg(j  ~5Bf Ac|M61jQ7|B=1j71jg(j" z|Ti c|ݫI61jQ7|=1j71jg(j kd̍ 6zc|J61j~7=1j71jg(j ~nSfA c|XP61jN=1j71jg(j( |dO7 ,c| J61j9N=1j71jg(j( |jB l|zH61jPJ0=1j71jg(j  ~j! ?2l|RL61jP=1j71jg(j ,~6(c }l|N61jύB*=1j71jg(j  4~1x =l|H61jύA 91j71j71jJ /z @~~O$61jύ<=1j71jg(j  ?~>$Q$ 5}VF61jύ=1j71jg(j O~ƥs ܫ}qF61j=1j71jg(j V~(g ʑ}G61jA=1j71jg(j" |-x m}A61ji=1j71jg(j ]~k[ _@} D61j-=1j71jg(j e~a }2$E61j9=1j71jg(j l~ʐ: x}DE61j9=1j71jg(j t~c7 }C61j9=1j71jg(j {~D }0D61j9=1j71jg(j ~Ԟ9 } B61j V=1j71jg(j ~r^M }GB61j =1j71jg(j ~  \~τB61j)=1j71jg(j ~ 饢 \~;C61j)=1j71jg(j ~1h H7\~<61j)=1j71jg(j  ~; =5\~G61j2-/=1j71jg(j  ~~+ K\~$=61j2-)=1j71jg(j  ~N+ O\~-:>61js=1j71jg(j ~vkc ~H>61j&#=1j71jg(j  ~\qt g~ F=61j̄=1j71jg(j ~䷝|) S~Q<61j̄=1j71jg(j ~Q ~<61j̄)=1j71jg(j ~x5! L~~_@61j̄$=1j71jg(j  ~5?,/ ~u"@61j =1j71jg(j ~bi S~Zk?61j .=1j71jg(j  ~&Z xl|R61j =1j71jg(j  0Oe l|3R61j$=1j71jg(j  "u 1l|=1j71jg(j  = ~$i61j=1j71jg(j RrH?3 X~Kp61jA91j71j71j /{-x ^(61jE=1j71jg(j$ | &.ڽ (Lۆk61j0`=1j71jg(j2 |_ GH~kWo61j0[j=1j71jg(j6 }+bFZ] ~>&n61j0@!=1j71jg(j  7_ 4V~p61jmc?=1j71jg(j  a T~zl61j5=1j71jg(j /U0~ ~i61j#=1j71jg(j  q^ F~Ik61jA 91j71j71jM /zh q(61jЎ8C=1j71jg(j" }Е4D \61jЎb=1j71jg(j [^m7P Byg61j =1j71jg(j ws %WKg61j =1j71jg(j :!= Tg61j C =1j71jg(j  \rF D.c61j =1j71jg(j  ;s kc61j !=1j71jg(j  FC "d61j*"=1j71jg(j  XUe Se61j*=1j71jg(j #I{r# _d61j*k=1j71jg(j *ޏO |ύe61j{N=1j71jg(j 1x ɰύe61j{=1j71jg(j 9 jT $ύf61j{ =1j71jg(j  A * U=ύ'f61j&=1j71jg(j Jc2y# ύѲ]61j&=1j71jg(j R#o eύ]61jc=1j71jg(j Zzx Bύ!_61jc=1j71jg(j b8Kl !ύ^61j5=1j71jg(j jq ύ^_61j=1j71jg(j  xV ύja61j'=1j71jg(j  ~dxov H=ύO a61j==1j71jg(j c  Fύ+`61j==1j71jg(j -=w ύ4R`61j=1j71jg(j E #H|:b61j'=1j71jg(j  Чv QIb61j }m=1j71jg(j WA֞ sa61j }yT=1j71jg(j, ,}B} c 6~2m61j }R=1j71jg(j *P. ~ k61j<$=1j71jg(j   -> x~Uj61jA91j71j71j /G5W ֓'61jxr=1j71jg(j: B}v2) .-C{61j&4A91j71j71j /;}G =#61j&4%v=1j71jg(j< _}QWJ+ 61j&4h%=1j71jg(j  Æ#Ai \61jn?5=1j71jg(j ͆5x,% wY61jwY#9=1j71jg(j ۆ~/a, PAA61jӘl3=1j71jg(j  Ѣ Ә61jӘF=1j71jg(j$ }}1N Q DhJ(61jӘA91j71j71j /: DDs$61jӘ!=1j71jg(j  W $:t61ja=1j71jg(jn 7?Y 2DUu61jA91j71j71j /z հ (61j5(=1j71jg(j  i xeD3r61j5!=1j71jg(j  t s61jr4f=1j71jg(j4 }96 Hr61jrA91j71j71j /hz0I Tw=#61jr =1j71jg(j  84  (Yt61jA<91j71j71j  t//_sa2g i|1%61jA 91j71j71j5 /3f X< n%61j*}=1j71jg(j@  ?=(= ZM!61j*9=1j71jg(j ak >̄4I#61jg8=1j71jg(j '0*<3c &>̄F#61jgp4=1j71jg(j 6[HC B&̄az$61jgn=1j71jg(j8 }Ffq ̄|1%61jXO6l=1j71jg(j8 0"q4 "̄%&61jjɞZn=1j71jg(j8 !wX %̄'61jjɞer=1j71jg(j: -'H xJ̄(61jjɞs=1j71jg(j: J## ̄ )61js$|=1j71jg(j@  }7 ̄93*61jQ=1j71jg(j* gM 'Ē]'+61j+u=1j71jg(j< |_٨ ̄x+61jhv=1j71jg(j< Rz / -61jh`}=1j71jg(j@  UW P .61j֥1z=1j71jg(j> $ D ,61jQ~=1j71jg(j@  Ae \% q/61j'ˣ[7=1j71jg(j Db+Y b #f061j'ˣA 91j71j71j2 /siK`O ]%&61j0=1j71jg(j g!ޙ5W 5061j0(=1j71jg(j  R̂M LD861j$=1j71jg(j  ]N ar 561j5=1j71jg(j g A :61j]2=1j71jg(j  u( I 661j6=1j71jg(j ~V0 1761j%=1j71jg(j  4o *461j!0=1j71jg(j   .p8961j!%=1j71jg(j  a s,:61j!%=1j71jg(j  g& ) 661j!C+=1j71jg(j  q]$ C];61j%=1j71jg(j  ƇWD ~6461j%=1j71jg(j  ЇI3 961j}+=1j71jg(j  ڇix ~~^861j*%=1j71jg(j  #3 b561j(=1j71jg(j  gF 7s461j1<1j71jg(j  aJ U#4d61jJ<1j71jg(j S" v61j#xF <1j71jg(j  ZJY <rx61jk`<1j71jg(j  JD} ,T61jk`Y2<1j71jg(j  w ~0 2{61jk`<1j71jg(jN 'ۈ@Rpݰ `61jt9&<1j71jg(j  $QF} Ý61jt<1j71jg(j .Ȍ/ n 61j}<1j71jg(j@  !2h!u 61j6<1j71jg(j 5DCp 61jT <1j71jg(j  C! P .861jyQ<1j71jg(j* cѳ– KA61jy<1j71jg(j LL?  61jy <1j71jg(j  StA.P ߮e61j鶯<1j71jg(j \ O61j鶯w<1j71jg(j< Ar+ R 61j鶯=1j71jg(j dpR x.z61j0 7<1j71jg(j k9RAe wb61j0x<1j71jg(j> _y0 d9V61j0?<1j71jg(j ym;&t[ 9J61jLV9<1j71jg(j N1 H961jLV<1j71jg(j Oô6 29>61jLV0<1j71jg(j  I:} o961j^в<1j71jg(j jr 9p61j^в/A<1j71jg(j" ~a. 961j^вlx<1j71jg(j> !@/ l9a61jpJ1<1j71jg(j  H ا & 7 61jݶS,<1j71jg(j  [ " R61j X1-<1j71jg(j  gJm1 G W61jY-<1j71jg(j  Ɋ8  EG61j :<1j71jg(j Պ/z 0? 61j(<1j71jg(j  d % 61j$N<1j71jg(j( T Jj HZ [61j$<1j71jg(j 0R : 61j-L;<1j71jg(j Yk8 ͬ e61j-Le#<1j71jg(j  7*R #= 61jD<1j71jg(j$ 9S  061j "<1j71jg(j  > V G> 61jx!<1j71jg(j  <ʻ; ۗ)>861j<1j71jg(j  6 8 )Y61ju<1j71jg(j (+V ͮ)b,61j(0<1j71jg(j  0{*7# =)B61j('<1j71jg(j  =>T #)w61j(.$<1j71jg(j  G 7 =)561j('<1j71jg(j  QhQ  2-]B61j%<1j71jg(j  [NQ|K 2-61j7"<1j71jg(j  eER] #2-61jM$<1j71jg(j n|t|h _2-o61jǽ"<1j71jg(j  ~Wzh 2-Z71j`!#<1j71jg(j  |Cz 2-]71j`!##<1j71jg(j   "2-671j`!m&<1j71jg(j  (:Wx 2-71j!)#<1j71jg(j  5 2-D71j!<1j71jg(j fz]$ D*71j"<1j71jg(j Z 6D71j"W <1j71jg(j  9e) )D71j"%<1j71jg(j  ŋ~j< D}71jU"-+<1j71jg(j  ϋ¤TZ@ 6D71jU"?&<1j71jg(j  ڋe|GA <D71jaz$0<1j71jg(j  ?w Dۘ71jj$#<1j71jg(j  C\ DQ71jj$\=1j71jg(j0 g`] `!D$71jj$f=1j71jg(j  "D71js$>=1j71jg(j  NY D>71js$=1j71jg(j v ǣ D{71js$=1j71jg(j w22 ;M71jn%~'=1j71jg(j  =s6H Mo71jn%=1j71jg(j #wI uQM71jn%e=1j71jg(j *;d*( YM'71jn%"=1j71jg(j  15,  .M)71j%<2=1j71jg(j  :BR8C M%71j&=1j71jg(j GGF FM271j&=1j71jg(j OP^ M 71j&=1j71jg(j WC.} SMM71j&*=1j71jg(j _dð2 SV!V 71j&=1j71jg(j f{\ޑ V!h 71j& =1j71jg(j  n*P_ rV!@ 71jV'&=1j71jg(j w<%  %V! 71jV'=1j71jg(j n kV! 71jV'U$=1j71jg(j  4_ zV!ݢ 71jV'=1j71jg(j /s\ kVV!Y 71j֓'{ =1j71jg(j  E V! 71j֓'|"=1j71jg(j  F V!( 71j֓'R=1j71jg(j  bTo `V!N71j') =1j71jg(j  TC V!@B71j0)=1j71jg(j m4q 1V!I71jBp*;=1j71jg(j šz oh71jBp*}=1j71jg(j ʚF>% V9hd671jBp*9=1j71jg(j  Қ,0n hms71jBp*Z=1j71jg(j ؚ:H fh71jK*N=1j71jg(j V3_Uh ehg71jK*=1j71jg(j ǴG @h71jK*=1j71jg(j Ό: hl71jK*=1j71jg(j eH m'h71jK*=1j71jg(j  ό$] |h71j]'+=1j71jg(j  4Pj h71j]'+H=1j71jg(j  `?i xh71jfd+{=1j71jg(j vJiPn SVq؃71jfd+ =1j71jg(j ^@ 0 q؃71j-Q==1j71jg(j  "KL TMq؃!871j-=1j71jg(j 2F>: mxq؃<71j.=1j71jg(j  9CN p Rq؃Ni71j.g=1j71jg(j ?mf q؃`71j.7=1j71jg(j FW^ (q؃i 71j@.-=1j71jg(j  NN]@ q؃71j@.#=1j71jg(j  ZqP `_q؃71j.4=1j71jg(j cpެ'ޕ q؃Q71j.z=1j71jg(j j/  lq؃71j.=1j71jg(j q4łW q؃E71j.=1j71jg(j  x颢; J7q؃Zb71j.=1j71jg(j ~%J z̿71j.*=1j71jg(j -G z 71j4/=1j71jg(j ȩ|-a TSzv71jP1=1j71jg(j m@ F z71jY1=1j71jg(j ɣ z k71jY1=1j71jg(j =A6 z/_71jY1K=1j71jg(j  ZP 9z871jY1 =1j71jg(j m|/$ jzA71jkN2Q=1j71jg(j  -L z\71jt2i=1j71jg(j (6 /ze71jt2I=1j71jg(j  ś  ?zwG71jt2v7=1j71jg(j ˛L=a- z71j}2-=1j71jg(j  ٛhs a'~V71jB3 =1j71jg(j  RL 71jB3U=1j71jg(j m+[ 71j3m=1j71jg(j >P / 71j3u=1j71jg(j  } ^ѩ 71j4=1j71jg(j 5+- , 71jg5 =1j71jg(j  "r !dH71jg5-=1j71jg(j Ec) 4X`!71j5=1j71jg(j 6IٔEq V!71j5A91j71j71j oTq s֓'71j5<1j71jg(j &g  %71j5A91j71j71j o9sm az$71j5=1j71jg(j .ق[d ߯ 71j5A91j71j71j o͝bSk ֓'71j5|=1j71jg(j h^1DW; 9K71j6 =1j71jg(j  5ڝ:j vۏ71j^85=1j71jg(j >ޖJ n `}̨71jp89.%=1j71jg(j  FQ{tC~ (ا71jp89A91j71j71j o-xL X=$71jp89آ=1j71jg(jR ),$ y71jyu9"=1j71jg(j  P[% Tl${71jyu9A91j71j71j oelf l'71jyu9&<1j71jg(j  Y0; \x71j96%<1j71jg(j  coĈ7r 71j9-<1j71jg(j  m  JT71j9$<1j71jg(j  y.B ,71j95<1j71jg(j 79 `71j;<1j71jg(j  .R1 qۏ71j;Y<1j71jg(j  zͰQ, F71jQ<<1j71jg(j  m;[k 71jQ<W2<1j71jg(j   `_Sm `\֥71jQ<'<1j71jg(j  )zQ ҩ\71jQ<H0<1j71jg(j  E) _71j<*<1j71jg(j  ǜwM2 <771j<R <1j71jg(j  Ҝ&?t _Q71j<,<1j71jg(j  ۜ 071j<|%<1j71jg(j  Ld u^71j<s4<1j71jg(j R01Gu kw71j<['<1j71jg(j  CL A %\wfv71jH>H'<1j71jg(j  = :q _wB71jQ.?j1<1j71jg(j  6mY7 b~wD71jQ.? <1j71jg(j  A~+"\ kw;s71jc?0<1j71jg(j  ) Nw 71jc?^<1j71jg(jL &6K Sw_g71jc?y(<1j71jg(j  6vd4~ $w71jc?)<1j71jg(j  AD-Q (w71jl?x-<1j71jg(j  L>r swӼ71jl?E<1j71jg(j$ }{ӏ %1w71jA7<1j71jg(j  Xk8 JwO71jGB<1j71jg(j ^@~ w71jGB%<1j71jg(j  f dw,71jτBo+<1j71jg(j  pǩ@{Y ݴݽ71jτBQ<1j71jg(j  {J R nݴ71jτB<1j71jg(j Hn\L3 ˚ݴ771jτB<1j71jg(j  а  ݴ71jB<1j71jg(j  ŝ ݴ671j2$E5<1j71jg(j ՝ؘ] ֛ X71j;aE.<1j71jg(j  z+ u471j;aE.<<1j71jg(j   {}ڬ71j;aEA<1j71jg(j" DҀpn \Gl71jDE(<1j71jg(j  & H71jDEX<1j71jg(j. 7W i#x71jG$<1j71jg(j  x YT71jGp.<1j71jg(j  `L. Dij71jG<1j71jg(j "ƶ(z .>71jG%<1j71jg(j  )bS .%71jGI=<1j71jg(j  3a@A .:ܱ71jGO,<1j71jg(j  CƟ6 g.c71jH<1j71jg(j Oɞ D.g 71jH'<1j71jg(j  V Saz$71jXP =1j71jg(j  :K8 \71jPA91j71j71j oA'Q M ֓'71jP1=1j71jg(j  ~p,r X}ڬ71jP7=1j71jg(j =*] ?y>/71jQja=1j71jg(j2  IFY71jQo=1j71jg(j8 ё)1 3k71jQ=1j71jg(j ʞ=Y #x71j1j>1j kjv~ 3A.=1j.=1j=1j=1j\ .͏ >8=1j>8?1=1j71jg(j Mْ? [ۆk>871jAYP1j=1j=1j t]^ ϖ} =1j XF=1j=1j=1j e[ @Bϖ=1jϖ>1j>1j>1j P OOO>1jOu91j71jg(j< &;5Kh ۆk#f071jn[7B1j=1j=1j X =1jl=1j=1j=1j8 g˻X@ y3=1j3'=1j=1j=1j  vHM' >8>8D=1jDE=1j=1j=1j ܎d\P 3*=1j91j71j71j/boot/vmlinuz-virtkO nl,^)071j,^A`1j71j71j >~L i^i^W71ji^A`1j71j71j  @ W71ji^g(j71jg(j l_R $ 71ji^71j71j71jlibmount.so.1.1.07 MN{71j Gj71jGj CtZN N{71jЎGj71jGj Bz2c# #Se71jAi71ji BDWbD :|C71js71j71j71jlibnvme.so.1.16.1D ^xx71jxi71ji D+owC ^71jjA`1j71j71j t f]YY1I71j(bZ`'i71jZ`'i  Y71j(bA`1j71j71j ,#K 11xh71j1A`1j71j71j hP YYxh71j1DZ`'i71jZ`'i C$– Y71j1Z`'i71jZ`'iT  TT Y71jCci71jci u8n R7 71jݽA`1j71j71j  5˔$ z G71j!A`1j71j71j ( "H71j^j71jj >u <71j^j71jj ('q^ 171jA`1j71j71j ɇ.i =H71j4j71jj  5a71jA`1j71j71j -V: G71j j71jj S Tw 71j j71jj @! X71jA`1j71j71j ~Ao/T 7eTTG71j j71jj  (Ĺ 71j!Sj71jj  Q@ 0T71j!S j71jj | }T71j!SA`1j71j71j *O tTTIG71j!Sj71jj ڑO /T71j!SA`1j71j71j G; 9TTH71j*l j71jj t حT71j* j71jj QjF1 ԤT71j< A`1j71j71j 1pi< 6)TTzH71j< j71jj ck _T71j< j71jj bseh ;T71jEGA`1j71j71j !I |G71jEGj71jj  j DT71jEGj71jj "ŭso T71jEGl j71jj $+o T71jN j71jj 'Zyl T71jNM j71jj *<2E I71jWx j71jj -8Ю 71jW j71jj 0.ť?s o71jW j71jj 3 71ji; j71jj 6.A ,71ji;j71jj 9Nn {71ji;A`1j71j71j 0gU G71ji; j71jj :o 71ji; j71jj <$R 71ji; j71jj @Sl 71j{q j71jj C5Le x71j{j71jj GuZ T71j{ j71jj KkC\ d71j j71jj OiA U71jA`1j71j71j &D7 IG71jj71jj S) -71jj71jj Ua`? G71jl71j71j71jvt220+ 0H !ll71jlnj71jj W򖕙2 71jlGj71jj YSN Pg71jj71jj ZL 9n 71jj71jj ^l 71jA`1j71j71j , kII=H71j<j71jj  bBó 71j`j71jj  g lI71j`j71jj lgݐY< I71j`j71jj nD OTI71jÝ71j71j71jlibncursesw.so.6.6׵@_ /a71j j71jj Dg Ha71j371j71j71jlibedit.so.0.0.77+ ;ss71jsj71jj S *71jsA`1j81j81j C }.}.H71j& ci81jci ɳp )g81j{ci81jci q3T&h g81jcA`1j81j81j 4(+ Iuc1I81jcci81jci  s650% P>81juci81jci 0~ o81juci81jci n f81j>Pci81jci Cy%* d81jo8ci81jci f ݽ81j_L U8ci81jci x# 81jq ci81jci 1 d /81j 0ci81jci Bܯ(& F81jIA`1j81j81j c5 JAXXoh81j* ci81jci E7+ ;81jEci81jci G ;&81j% ci81jci $f i}.81j@.A`1j81j81j @ %0}.}.H81j}.ci81jci N 681j5Aci81jci /_Q \681j6 ci81jci suP P81ju"@ ci81jci e*yD P81jG ci81jci vG" P81jM0ci81jci w X81jW(i81j(i Bk( 8j81j+`(i81j(i B%_' j81jF`(i81j(i BTTt j81jF`(i81j(i Bȓ )cj81jXFap%(i81j(i 7 ݥj81jsa(i81j(i B ;'j tj81jc(i81j(i BL.M? Xj81jc(i81j(i B=SV \j81je81j81j81jtune2fs 1jee81je81j81j81jdumpe2fs l1 ;jee81je(i81j(i !7Y bPj81je(i81j(i  "-; Ik81je(i81j(i BД!, Ik81je(i81j(i B^J{` Ik81j'f(i81j(i BTirvʃ Y Ik81j0f(i81j(i B%/ָ lYIk81jKg(i81j(i Bؕm[MA Ik81j]0h(i81j(i Bb 8bIk81j]0h(i81j(i BƭZO>O^ ~Ik81jxh(i81j(i hB| *&Ik81jiGj81jGj B lQ1 BZy81jx81j81j81jlibfdisk.so.1.1.0O& hvv81jv@Gj81jGj Cr2 3h81j)Gj81jGj HZ!Di -81j81j81j81jlibyaml-0.so.2.0.9Yx>kj JKWW81jWxg81jxg -lQ s爔81jÔje81jje BO| kN*81jA`1j_1j_1j $. Yk_1je0j81je0j  ܄{5 h-81jA`1j81j81j  c _T--wb81jA`1j81j81j   g KKb81j\A`1j81j81j ,@9 x--c81j\e0j81je0j ok3 i1-81j\e0j81je0j bB+ qy-81jA`1j81j81j wzl --c81je0j81je0j O3i `,-81jMe0j81je0j N8 {-81jA`1j81j81j qv b81j e0j81je0j 59 ] $81j e0j81je0j ez 81j A`1j81j81j $s Z _c81j e0j81je0j d{r(| 81j e0j81je0j } A81jQe0j81je0j 5? P81jQA`1j81j81j D I) kc81jQe0j81je0j 'Ti 81jQ[e0j81je0j " 81jA`1j81j81j n 3}kc81jje0j81je0j 4mQw h81j0e0j81je0j <6 ݿ81j0A`1j81j81j w} b81j9Ee0j81je0j T38 T81j9E e0j81je0j H?X 81j9Eee0j81je0j %ZLK 3[81j9EA`1j81j81j ar .c81j9Ee0j81je0j }yx r81jKe0j81je0j  HX f81jKA`1j81j81j HN Pb81jKe0j81je0j p2E K81jKe0j81je0j ڗ6j Յ81jT _1j81je0j `' 3-f81jT:#e0j81je0j  LX( -81jT^e0j81je0j ʟ3 -81jTA`1j81j81j gB wb81j]9} e0j81je0j ̟u >81j]9e0j81je0j П ^4 T 81j]9e0j81je0j ؟9?i :81j]9e0j81je0j ٟ%<*{ 81j]9e0j81je0j ڟj.m 81jo e0j81je0j ۟("'I 81jo _1j81je0j ܟWҚ 9N81joe0j81je0j kh t81jb#e0j81je0j t }}ڬ81jb#e0j81je0j *:} ۃ}ڬ81jte0j81je0j /N }ڬ81jtA`1j81j81j  UUU"3 ~kiki&+Y81jyA`1j81j81j  NhH  Ѳ]81jyi91ji ǺE 2>81jij i91ji  74J h 81j>i81ji @H J:ki81j>i81ji  fg 81j>i81ji Ň t81j{i81ji YF p81j{_ i81ji -g^ t81j} i81ji ( }81ji81ji @ n}81ji81ji 쿞U (Z}81joi81ji cMu f81jʬi81ji  ]81jʬi81ji %ʩ #]81j&i81ji b>2 81ji81ji  81ji81ji Ʒ 81jqi81ji mok o81ji81ji 1% f81ji81ji a:0 z481jA@`1j91j91j" ?;%,/p $$[81j$4 i91ji  ~ 81j$C i91ji  /H 81j$i91ji+ HL  $81j-Lfi81ji 3 81j-LA`1j91j91j) ?eȑ$ ݵ6n6n\81j?Ƹ&i91ji yW7& =j-181j?Ƹ&i91ji  ׍m: -181jH&i91ji  e BQ-181jQ@ i91ji  G -181jQ@4i91ji H r-181jQ@&i91ji W<L? I\-181jc&i91ji ##@ ߥ-181jc i91ji `a<]I $-181jc4i91ji Us=" ;-181ju4@i91ji N}, 76n81ju4Bi91ji +37Y t6n81j~q&i91ji 3 6n81j~qli81ji -Y 81j~qi81ji !W J81j~qi81ji "r*FL 81jLi81ji #̯} ;81ji81ji %-6oU 81j2i81ji &S0F U81j(Ni81ji '. y81j(ji81ji )Ob Y81j(i81ji *s~t n81jj i81ji +QX (81ji81ji .4I N81ji81ji 18 ok81j߻`i81ji 3Q \ ;81j߻i81ji 4 ,Ӄ 81j߻i81ji 5Dsd υ81ji91ji 6f q 81jNi81ji :k u81jϖi81ji <p~ 81jϖ<i81ji >?M n81jӼNi81ji ?LW 81jӼhi91ji Bn&|P i 81jӼzi81ji CRE 81ji81ji EW 81jNi81ji F1h 581ji81ji He# 81j i91ji JIz= , q 81ji91ji Mbd oq 81j i91ji P". 281ji81ji S( .81ji81ji T€I ؒ81jZ i91ji U4%J 7|q 81ji81ji Xl]M ^u81ji91ji [?g q 81ji81ji ]t t81ji81ji ^b+Nnn 81j ai81ji ag 8z81j i81ji c 81j7i91ji ` M81j7A`1j91j91j @%D ??D\81j7\ i91ji c# ?81j7\ i91ji q x?81jt\ i91ji Y& Z?81jti81ji <D V81jti81ji HnC c.81ji81ji ^xW .81jfi91ji b H81j2i81ji ?e <.81j,ni81ji r .81j,4 i91ji PZZ'J 281j,i81ji 9 .81jii81ji  .81jii91ji QV 281j.i81ji g.K Z.81j.Li91ji m`$ =81j7 i91ji t 281j7 i91ji qyx _ =81jIi91ji #' .Q81jIi91ji mi^O1  =81jI i91ji %Z 0z81jRGi91ji Y 281jR0i91ji XCdZ V mz81jmi91ji c. z81jvi91ji ꇤ5 jz81jv i91ji a <281jENi91ji  m %281jE i91ji ٦g=Z ^$81jA`1j91j91j& /4sj \Q%Q%,^81ji91ji  ??81ji91ji p /`?81ji91ji t 7 81ji91ji }R^ ?81ji91ji ӊf,[ Q%81j i91ji eص q 81j9|i91ji / Q%81j9i91ji 2<, Q%81j9i91ji ;YG S) 81jv|i91ji \e ,Q%81jvi91ji   Q%81jvA`1j91j91j /W' Q%Q%,^81jvi91ji AS RM81jA,`1j91j91j+ /?Gۜ B8Y81ji91ji  V#^$ [Q%81ji91ji  Z3N3j3 eQ%81ji91ji  ^ AQ%81j-i91ji qj uZb81j-i91ji m{Ε Zb81j-]i91ji \O uZb81jji91ji Т7_ JCZb81jji91ji q4;ih Zb81jji91ji m - 81ji91ji j Zb81j!i91ji >4 >h 81j!i91ji  z- zZb81j!ji91ji ab [Zb81j^i91ji A Zb81j^i91ji sa{ G81ji91ji  eN @~V81ji91ji !$Mh rc81jmi91ji #r] 81j1i91ji $ҴJ EJ81jfi91ji %uG c81jCi91ji &ȯ7 Hc81jQi91ji '2 kc81j!Si91ji ) e c81j!Si91ji *k? eSq 81j*Ai91ji +y.w1o >u81j*i91ji ,b@@ u81j*i91ji .X+ Mu81j< i91ji 2Ͽ 9 2u81j< Ii91ji 6m'(# TJ81jEGi91ji 7"P )u81jEGmi91ji 9[ Cu81jEGi91ji :Ea yu81jEGi91ji <o 0Y281jNi91ji >o\ ou81jNi91ji ?Rq_ M~V81jNT i91ji @[x ~J81jNi91ji Cܴń^N Bo~V81jNi91ji Dp|S^ (w~V81j`{i91ji FYyN, F~V81j`i91ji GRlP 6 81j`i91ji HБY ~V81ji;i91ji I-Px /~V81ji;i91ji Ke _81jrxi91ji Mß= J81jrxi91ji N%4N g81ji91ji PH 81ji91ji RP1a a81ji91ji SGjp 81ji91ji T¿ mw ƦD81j/i91ji VHOc 9 81j/i91ji XJO v 81j/i91ji Z1l S 81j#i91ji \55O 4 81j`ai91ji ]w # 81j`i91ji ^< 81ji91ji _V= 81ji91ji aYJM ޖ 81ji91ji b8I 2eh 81ji91ji c9_}2 БJ81j3i91ji eTO! CJ81jTii91ji fO=R "J81jTi91ji gAҮG }J81ji91ji i|z_ mJ81jAi91ji jg u QJ81ji91ji kI ]! J81ji91ji l[SK& wJ81j i91ji n1c |81j 5i91ji oݜ e81jIi91ji pkֈ )81jIi91ji r_`C @81j i91ji tQF@t o81j i91ji vC~ƽ 081ji91ji xs:7 gw81jqi91ji zFG5 781j&=A`1j91j91j& ?'h g>>eZ81j&=r i91ji |Dn1 l'81j&=\ i91ji ] 81j&=ii91ji ܶ 81j/zi91ji vX~@ z81j/zi91ji  81j/z1 i91ji pmE Z>81j/zi91ji tČ ?>81jAi91ji ( q_ >81jAA `1j91j91jG ?# n[81jAi91ji mN 81jJ1i91ji  m m81jJ1i91ji m * V81jSni91ji :9 681jSn6 i91ji *QJ ˷81jSnEi91ji ;2Z 81jei91ji =i? {81je6i91ji !B; {81jei91ji Z fi{81jei91ji % <981jn%i91ji 'j Ƥ81jn%A`1j91j91j ?C } IB22"_81ju i91ji T \D81jA`1j91j91j ?; 22"_81jA`1j91j91j ? P]X G22i^81ji91ji >am z 81ji91ji %p  81j i91ji -7V ä)81j A`1j91j91jk ?٩_8* 4z  "_81j ri91ji  b&R V^ 81jȇti91ji  5o81jȇui91ji FoA\ co81jȇui91ji "D ovo81jȇui91ji ( o81jti91ji :fD 0jo81jti91ji c] [o81jti91ji j o81jti91ji [$j ko81jti91ji tca7 o81jti91ji @ '81jpui91ji E[o '81jpui91ji  acTH ߲'81jui91ji MJ'ζ W'81jui91ji ͉Q ­'81jui91ji T, '81j"ui91ji 1*9* ׇ'81j"ui91ji  :. 5'81j"ri91ji Ⱦ/j _ 81j+'A`1j91j91j U_ȩ ]h h ^81j+'i91ji  - 81j=i91ji !/ e 81j=Pi91ji K bD81jFi91ji ,p9 ] h 81jFi91ji =˭;ے M81jFi91ji R9 G)81jO@ i91ji  n .)81jOui91ji _& h 81jOx i91ji >r BV 81ja i91ji n #)81jali91ji mSy D81jji91ji vb B281jsHi91ji  7 h 81jsi91ji 9# K281js i91ji >Xey @281j6 i91ji Kj -D81j< i91ji {q D81ji91ji 2? 9D81j i91ji I{+ VD81ji91ji A@X:N D81j}i91ji ;  oM81jQ i91ji y 7.V 81ji91ji  ߚP, `M81j4i91ji  im M81j4i91ji  W fM81jqi91ji 7͛I WM81jqdi91ji |c/ =V 81jq$i91ji g GV 81ji91ji ~^0 E9V 81ji91ji zg V 81j(ri91ji fȓ sV 81jei91ji  J+ V 81je^ i91ji "w h 81jeti81ji %0U ٫581jIi91ji &. rq 81jZA`1j91j91j# U4W +q q n[81jZi91ji 'FT Uh 81j'i91ji (O 5 zh 81j0i91ji )U h 81j0.i91ji *ǕPq5 U} 81j9NA`1j91j91j U'o q q eZ81jKi91ji +Y< q 81j]BA`1j91j91j  U_pnS ^_81j]BVi91ji .s# q 81joi91ji / q 81jo i91ji 0Cq,{ z 81jxi91ji 1Ky ^k} 81jxi91ji 2N Lz 81js4i91ji 3|5 z 81jsi91ji 4R 81jsi91ji 5Hj ?z 81jsi91ji 6+ ݀z 81ji91ji 7{2# X} 81jgbi91ji ?#ӨI 9} 81jg"i91ji @쇇 Y 81ji91ji AS%  81ji91ji B <5 81jMi91ji C/ 6} 81ji91ji D̑, eb 81jfi91ji EiCF Ng 81jۘA`1j91j91j& _T[ q q i^81j$i81ji  F^da ^dki81ji81ji  K.3 [ki81j#$Ii81ji& \F- ki81j#$Di81ji$ o-*R ki81j#R@1j=1j=1j U8  7|W=1jJ1jJ1jJ1j.NPo J1jJ1jJ1jJ1j KM2YU ~"J(J(J1j8P1j`1j`1j`1j F+8 U8U8cP1jc#S1jP1jP1j SM{S 775P1j /S1jP1jP1j TMʃS Vr]r]QP1j/_K1jK1jK1j B;r6K K1jA`1j]1j]1j _c BN1jrfTF^1j]1j]1j 8te$ }6w>]1jA^1jO1jO1j _}| y̨̨xCN1jNV%^1jO1jbj  N }70DN1jV|-^1jO1jbj  XQo1@ %7JZN1jW78_1jO1jbj d I(P7 N1jW2_1jO1jbj  s">i p(P7]'+N1jW_1jO1jbj w"q1 (P7\6N1jW_1jO1jbj  (P7g8N1jWbjO1jbj |,l (P7N1jWfbjO1jbj Zc a(P7N1jWHf bjO1jbj4 ݬU C(P7N1jigbjO1jbj4 Q!= (P7N1jy bjO1jbj p[#4 O:7N1j[ bjO1jbj հG :7N1j$ bjO1jbj CL :7N1jabjO1jbj E5c}\ :7N1ja bjO1jbj zn} p:7N1jxbjO1jbj  wyЩ4G v:7N1j@ bjO1jbj Li :7N1j"0 ^1jO1jbj ]_ k:7yN1j7PqbjO1jbj: 4)N h:7N1j0GbjO1jbj {AfB [:7N1jng bjO1jbj4 t :7N1jo@ _1jO1jbj A! h:7;N1j : bjO1jbj  %C8N1jV*PebjO1jbj δ DC8N1j\1jO1jbjP  mP{ 4C8N1j0dbjO1jbj j^ @C8N1jY!]1jO1jbj  f C8"O1jJbjO1jbj CGs& )CC8O1j0e]1jO1jbj  PSAv oC80O1jbjO1jbj  rE# U8O1j bjO1jbj ؅N ZU8O1jPebjO1jbj4 Tu їU8O1jbjO1jbj #r= U8O1jl A`1jO1jO1j _]- ;fU8U84R`O1j bjO1jbj  ^ӀZV U8O1j bjO1jbjh 4ʿj"{ tU8O1j ]1jO1jbj 8a=e U8O1j`!$]1jO1jbjh P4MIVc /i 3U8zO1j`!A`1jO1jO1j _"g }H 6\64R`O1j\6_1jO1jbj < ( wRV'O1j2$E__1jO1jbj )'ߨO ą/O1jDEA`1jO1jO1j _geI MEME"dO1jDEA\1jO1jO1jb iio}=dY "q669O1jME(2]1jO1jbj  8%t *̨} O1jMEbjO1jbj  0 9i :̨O1j_UF ]1jO1jbj "q = ̨O1jhFbjO1jbj "i ĮO1jqF+]1jO1jbj  )s3 V2̨pO1jqFbjO1jbj  |: ̨O1jIGP)]1jO1jbj  ^e b̨,0O1jIGbjO1jbj  W5} ĄO1jIG]1jO1jbj [L ' ̨lO1jGpbjO1jbj EOD ȳ O1jG]1jO1jbj 9}b _ WO1jGPbjO1jbj n&D< O1jH]1jO1jbj 'V L HO1jH bjO1jbj Zmp @ O1jH]1jO1jbj jU< $ DO1j=HbjO1jbj YW  O1j=H(]1jO1jbj  Nd kWoO1jHpbjO1jbj t\ 1 O1jH8\1jO1jbjP (rMP z 9O1j1IWbjO1jbj, Bn O1jbJP]1jO1jbjx <V( C FO1jbJbjO1jbjT *$E FO1jJ .]1jO1jbj  ) KF2O1jWKbjO1jbj   $ mFO1jWKX]1jO1jbj  \{h FP1O1jWK@bjO1jbj \" {FO1j%Kh!]1jO1jbj  $t^/ F[O1j%KxbjO1jbj  % ! FO1j.K]1jO1jbj *YҀ3 KF0O1j.KbjO1jbj 1wA/ FO1j@KL8]1jO1jbj  4adL~ #Fu]O1j@KLbjO1jbj 9Yuz zFO1j@KL ]1jO1jbjD "]K0!w }F O1j@KL4bjO1jbj ;os%.z FO1jIL]1jO1jbj  IEh FO1j[MbjO1jbj Ni~f /FO1jd?M]1jO1jbj  Pf7u F>O1jm|M bjO1jbj UUD etFO1jM]1jO1jbjP (w3̆ F'sO1jMAbjO1jbj" /U< QpFO1jpN ]1jO1jbj W{}]- F O1jpN bjO1jbj Z}B yFO1jN8]1jO1jbj  \t#8 FO1jN bjO1jbj b$, FO1jN]1jO1jbj  e kFO1jN bjO1jbj ku FO1jN-]1jO1jbj  nxI ph O1j'ObjO1jbj  zO ZO1j'O@]1jO1jbj  72j LtO1jO@bjO1jbj X< aRO1j K,MO1jUpJ]1jO1jbj& ȗhLX ٰ,@O1jU`!bjO1jbj  $ . ,O1jU/]1jO1jbj  g~ ,-O1jUPbjO1jbj  Ԋ_ 3,O1jUH]1jO1jbjV +)0 ,yO1jU>bjO1jbj  HSm 8,O1jËVH]1jO1jbj Fͣv 4,>/O1jËV`bjO1jbj DH* ,O1jV]1jO1jbj  Ќr ,i:O1jVXbjO1jbj ] ?,O1jW ]1jO1jbj : ,9O1jWbjO1jbj ) Ng ՛5O1jWP]1jO1jbj  |Hh7 [5➍O1jBWbjO1jbj [;m|= 5O1jBW]1jO1jbj  gӗ 5 tXO1jBWbjO1jbj sVH JP5O1jBW^]1jO1jbj0 J$ R5TO1jW0&bjO1jbj  k nGlO1jX?]1jO1jbj  6ؕT Gl6w>O1jXPbjO1jbj  F 7nGlO1j&+Y]1jO1jbj L Gl.ڈO1j&+YbjO1jbj PQUFK QGlO1j/hYp#]1jO1jbj  R GloO1j/hYbjO1jbj [ i CGlO1j/hY`]1jO1jbj _I HGlvO1j/hY bjO1jbj f- GlO1j8YN]1jO1jbj( q{ _YGl7LO1j8YbjO1jbj iXoU 0GlO1jJZh7]1jO1jbj pG' Gl^uO1jJZ@bjO1jbj  ~sL0 [GlO1jS\Z ]1jO1jbj LBN ؖGlO1j\Z0bjO1jbj M9F r7GlO1j\Z8/]1jO1jbj  (j 0GlFO1j\ZxbjO1jbj  'p\ -GlO1j\Z ]1jO1jbj c PGlO1j\ZpbjO1jbj YA]f jGlO1jn[3]1jO1jbj  G ZGl$O1jn[PbjO1jbj  BU8b rGlO1jn[8.]1jO1jbj  T}. GlBp*O1jn[bjO1jbj  $Y N"GlO1j[6]1jO1jbj Ŗ fGl/O1j[bjO1jbj MR GlO1j[-]1jO1jbj  <& Ab#%O1j[bjO1jbj   |[R fb#O1j[bjO1jbj ~: b#O1jD\6]1jO1jbj ۛ-[E ib# fO1j\bjO1jbj dR rGb#O1j\]1jO1jbjH $L b#s$O1j\h<bjO1jbj  R b#O1j\0]]1jO1jbj0  ˹ $b#')O1j\P.bjO1jbj  r| b#O1ju]]1jO1jbj  b#u4O1ju]@]1jO1jbj djg `t.O1ju] bjO1jbj ${"A <>tO1j!_H]1jO1jbjh 4"#)>6 Ht*O1j!_pbjO1jbj: V] MtO1j_ ]1jO1jbj (<;e EtѻO1j_bjO1jbj +J tO1j_`]]1jO1jbj0 s>ɨ D}t kO1j"_CbjO1jbj" ۗs wtO1j"_a]1jO1jbj2 5I)( "t;aEO1j4R`CbjO1jbj" ݯAL< @5tO1j4R`C]1jO1jbj"  T:tJ(O1j=`:bjO1jbj -q?! tO1j=`|]1jO1jbj@  @bU }ڬO1jO abbjO1jbj2 D> Ԛ}ڬO1jO aXc]1jO1jbj2 ]9R 7}ڬ O1jjaXbjO1jbj. oW }ڬO1jjaH1]1jO1jbj  < e* }ڬ4 O1jsa(bjO1jbj  I% $}ڬO1jsaD]1jO1jbj" be }ڬD\O1jsa6bjO1jbj T@@ ׀}ڬO1jsa]1jO1jbj bw*A pAvO1jsaHbjO1jbj is} 'O1jsap]1jO1jbjR )OK _NO1jsabjO1jbjL &x- 7=O1jc]1jO1jbj  l DfxO1jc bjO1jbj rGBFl lO1j"dX]1jO1jbj uX!xh &O1j"dbjO1jbj xO% O1j_d0]1jO1jbj y 5wO1j_dbjO1jbj }ahƞ O1j_d]1jO1jbj aQCw _&O1jdbjO1jbj  cB+% O1jdx>]1jO1jbj  ]x7l WO1jd!bjO1jbj  w O1je]1jO1jbj   /]+ 'ŹqO1je bjO1jbj ! O1je@]1jO1jbj  1  O1jSebjO1jbj ~ O1jSe(]1jO1jbj   be O1je0 bjO1jbj % #O1j f@B]1jO1jbj" `Z@ LέC8O1jTgx&bjO1jbj  %7\ + CέO1j]0h-]1jO1jbj  /H8^ 6έ;O1j]0hbjO1jbj ;ь SέO1j]0h.]1jO1jbj  C_vi Xέ@.O1joh'bjO1jbj  Oօu. ZέO1joh1]1jO1jbj  Ykֱ oH7O1johbjO1jbj ffU zHO1johX]1jO1jbj. ` 4@w }H6O1jaiObjO1jbj( w<>f 'HO1jai=]1jO1jbj  nH- cH=`O1jai2bjO1jbj  ~;6y.g HO1ji0V]1jO1jbj, ^&89 `HQO1jiHbjO1jbj& t:TI HO1ji\]1jO1jbj0  1z vHcO1jiRbjO1jbj* C HO1jIk bjO1jbj <. /HO1jۆkbjO1jbj $O`l0 VO1jۆk02]1jO1jbj  W? w+H{O1jۆkbjO1jbj  M\ O1jۆk04]1jO1jbj ~J Z^_O1jۆkXbjO1jbj  {/6 LO1jۆk R]1jO1jbj UvB| Hq O1jۆkhbjO1jbjF #= TO1jl8B]1jO1jbj" +Q* \2mO1jl0bjO1jbj 8 O1jl]1jO1jbj  2{jo O1j2mbjO1jbj * hO1j2m]1jO1jbj E[ ;jO1j,m bjO1jbj )ك O1j,m@]1jO1jbj" A UhO1j,mh"bjO1jbj  b O1j5m0 ]1jO1jbj  K YI3rO1j5mbjO1jbj O l: VO1j5m+]1jO1jbj  Li &O1j5mbjO1jbj bw O1jPn ]1jO1jbj B5 O1jPnbjO1jbj 7q yO1jboh]1jO1jbj  % C gybO1jbo bjO1jbj qSR& ryO1jkWo]1jO1jbj aX y =O1jkWo bjO1jbj :y \CyO1jkWoH4]1jO1jbj YX)c y,O1jkWobjO1jbj *P5 yO1jto@@]1jO1jbj" x< !yVFO1jtobjO1jbj Wv yO1jto]1jO1jbj  ElJT #yO1jto bjO1jbj $H ,SyO1jp.]1jO1jbj  'jIR xy?qO1jpbjO1jbj  3<G yO1jpM]1jO1jbj( :JH f@鶯τBO1jp bjO1jbj  8P 鶯O1jq4]1jO1jbj A 鶯z O1jqbjO1jbj  OI3p 鶯O1jq0=]1jO1jbj  Ur} H Ln鶯O1jprbjO1jbj eJc 1鶯O1jpr]1jO1jbj mRj 鶯ۏO1jprbjO1jbj  uw"Z` 鶯O1jpr'bjO1jbj J$4  鶯O1jr]1jO1jbjz *S, 鶯RO1jes]1jO1jbj  zTU 'x鶯 kO1jtbjO1jbj ~ 鶯O1jt]1jO1jbj  j 鶯CuO1j1tbjO1jbj {2< P鶯O1j1t"]1jO1jbj  T0 03NO1j1t`bjO1jbj  `Ky 20O1j:t(g]1jO1jbj4 [ 0.O1j:t#bjO1jbj  RL 0O1j:t4]1jO1jbj 8D% /0,O1jCuHbjO1jbj  Cx 0O1jCu(!]1jO1jbj  [* 0xO1jCup bjO1jbj 1-R g0O1jCu#]1jO1jbj  1 h0ZyO1jCu bjO1jbj ;V 0O1jCu+]1jO1jbj  v,mRS *0~h}O1jCubjO1jbj -LV k0O1j^up]1jO1jbj k - knRO1j^u bjO1jbj 1:B onO1jy~vX\1jO1jbj /\> Kn.O1jy~vHbjO1jbj >UJ nO1jv]1jO1jbj z) knxhO1jv bjO1jbj oq @ nO1jv]1jO1jbj ! )nwO1jv bjO1jbj )g nO1j5w0]1jO1jbj  @o?{ 7bn1IO1j5wbjO1jbj ,%O1ju+} ]1jO1jbj [^i :J%r]O1ju+}bjO1jbj _ B%O1j~h}0]1jO1jbj  a7ϊv^ Z%SSO1j~h}pbjO1jbj gңA 1%O1j~h}]1jO1jbj  jA %AO1j~h}`bjO1jbj p ؒ' C%O1j~h}]1jO1jbj r% <%>1O1j}x bjO1jbj yZ Qn%O1j}+]1jO1jbj  |K(A %IO1j} bjO1jbj . Z%O1j~!]1jO1jbj  s’: [%JO1j~bjO1jbj W %O1j~@!]1jO1jbj  SVql n%}2O1j~bjO1jbj I6? G)%O1j~!]1jO1jbj  UW }% DO1j~bjO1jbj `s } %O1j~H!]1jO1jbj   ;+ %JO1jPbjO1jbj "r љ%O1jP!]1jO1jbj  d? qz%UO1jPpbjO1jbj Si- 7%O1jP!]1jO1jbj  ۍ $1gO1jPHbjO1jbj ذE 1O1jP5]1jO1jbj  C6O1j9bjO1jbjb 19S \CO1jV!]1jO1jbj  CkN2O1jV! bjO1jbj m CO1jq؃(9]1jO1jbj *ċP UCEO1jq؃bjO1jbj  !n^: JCO1jz@D]1jO1jbj  jQ8 C64O1jzbjO1jbj g2v CO1jkl]1jO1jbj8  W CCUO1j /bjO1jbj  ']ov b^UO1j`]1jO1jbj 3 = 8UWO1j`8bjO1jbj ;:2 UO1j`]1jO1jbj ?Ōw UO1j` bjO1jbj FڅA_ UO1j`h ]1jO1jbj IMo Ul|O1j`bjO1jbj LtZ09 jUO1j` ]1jO1jbj N{M@g$) ӫUAO1j`bjO1jbj R 1F :^вO1j`]1jO1jbj TaD ^вCO1j`0bjO1jbj Xppuk ϰ^вO1j7 ]1jO1jbj  Z s^в^8O1j7bjO1jbj _;dl y^^вO1j7h]1jO1jbj aue H-^вQ.?O1jI bjO1jbj h8 ^вO1jI`]1jO1jbj k Q^вvŠO1jIbjO1jbj oz= }^вO1jIh ]1jO1jbj q=. ?^вqFO1jI@bjO1jbj u LfU p^вO1jI]1jO1jbj  wԊ;8 n^вPO1jdHbjO1jbj |— $^вO1jdH@]1jO1jbj  ~< In/ ^вӘO1jdHbjO1jbj $ja ^вO1jvŠ ]1jO1jbj Mg\U RpJrO1jvŠ0bjO1jbj ?mJJ cpJO1jy ]1jO1jbj ъK7 ,pJ17O1jypbjO1jbj >XB pJO1jy ]1jO1jbj t45 epJyu9O1jybjO1jbj  JpJO1jyo]1jO1jbj  pJ(O1j0]1jO1jbj o {/pJO1j0']1jO1jbj   yHpJ(YtO1j0bjO1jbj \= NO1j3ďbjO1jbj  C}d O1j3ď]1jO1jbj| >\`5O aO1j3ďtbjO1jbj< (Ei O1j ]1jO1jbj  <B= F՝O1j&bjO1jbj ( p:O1j&]1jO1jbj  > XO1jPbjO1jbj  Q >O1j]1jO1jbj "1 o>+ #O1jbjO1jbj S(X >O1jݒ]1jO1jbj @' }>%KO1jݒHbjO1jbj L U >O1jW]1jO1jbj G (>iO1jWbjO1jbjb 1.12\ IO1jѓHK]1jO1jbj& _v i-O1jKbjO1jbj  Ӣ uO1jK` ]1jO1jbj  (ە NO1jK bjO1jbj 1nԭU `O1jKx]1jO1jbj  5bf RO1jŔHbjO1jbj :4AuN% O1jŔ (]1jO1jbj  <ԡ&t F#O1j bjO1jbj  Gli 7jO1j]1jO1jbj L3JfH 1AO1j bjO1jbj S3īr (O1j`]1jO1jbj W0]e:` 7?)O1jX bjO1jbj _C7* S O1j]1jO1jbj bme1 2#O1j bjO1jbj j"m -)2O1j]1jO1jbj m6}mG 7R2IO1jp bjO1jbj ut+-~ Z2O1j:]1jO1jbj xQ. 2YO1j bjO1jbj  ֹ {a2O1jeߗ]1jO1jbj e: (2rfTO1jeߗbjO1jbj U'+ $.2O1jeߗ ]1jO1jbj   2!8O1jbjO1jbj {= 3OoO1j*]1jO1jbj  D oO1jӘbjO1jbj   aoO1jӘ]1jO1jbj  y/Y 1oT*O1jӘ0bjO1jbj d Yoc W%oO1jM8*]1jO1jbj  ;*N !ojaO1jMbjO1jbj  /( KoO1jM]1jO1jbj  Qqp ;o0O1j@bjO1jbj , ΰ oO1j@]1jO1jbj   ~ ʬ O1jbjO1jbj lI* %ʬO1j/]1jO1jbj  X %`ʬO1jPbjO1jbj  -) $jʬO1j`:]1jO1jbj  ~ ʬ{O1jbjO1jbj ;% ʬO1j]1jO1jbj  ezZ8 ctʬO1j~8bjO1jbj xQi& ʬO1j~]1jO1jbjZ -o$ޤ jʬ2O1j~(EbjO1jbj$ r&5H tʬO1j~]1jO1jbj L _^ iʬ'O1jgH bjO1jbj w C DʬO1jg6]1jO1jbj /4D a&O1j)]1jO1jbj  LmF h2&B3O1j bjO1jbj L6 )&O1j Y]1jO1jbj. 55 &KO1jh'bjO1jbj  L71T '&O1j+0]1jO1jbj  "L&BO1j+bjO1jbj  .Lx &O1j+ ]1jO1jbj 3L+&̥ &~O1j4[bjO1jbj _=p jcO1j4[]1jO1jbj  7L U: Ħc9  $^O1j-bjO1jbjL &K j $O1j-+]1jO1jbj  6M39 $O1jbjO1jbj  AMM XA$O1j^D]1jO1jbj$ Kz ,$[O1j^bjO1jbj  FM&ğ 6$O1j^]1jO1jbjt :NP1 fA$g5O1j^bjO1jbjR )KZR 6O1j^]1jO1jbj  LM'4 X6V!O1j^xbjO1jbj QMKk\ 06O1j^:/O1jO1jO1j Qso Je .6O1j6O1jO1jO1j Iio} ] 26)?ƸO1j?ƸO1jO1jO1j B. ^ )?ƸO1j?Ƹq_1jO1jO1j ABA|<8 0PQ@?ƸXPO1j?Ƹ-S1jP1jP1j VMX  %%SAP1jO$oP1jP1jP1j JWu q'֓']'+P1j֓'A,]1j]1j]1j }NT ..\1j8\1j\1j\1jP (*|"# 999\1j9X\1j\1j\1j fB6 F...\1j.]1j]1j]1j mB Czzz]1jz3]1j]1j]1j  uB* b ,t$$$]1j$,]1j]1j]1j  B:GǓ U???]1j?]1j]1j]1j Bˀ 7HHH]1jHP]1j]1j]1j BB ׎ZbZbZb]1jZb]1j]1j]1j B~>h lll]1jl]1j]1j]1j  B82ư D~V~V~V]1j~V]1j]1j]1j  Bnem/$ gB]1jH!]1j]1j]1j  B!㢀) JJJ]1jJ ]1j]1j]1j BO^ ]1j`:]1j]1j]1j BjΣQ ܉{{{]1j{ ]1j]1j]1j B Xc ]1jp#]1j]1j]1j  B3rT booo]1jo]1j]1j]1j  BmѢay p]1jXc]1j]1j]1j2 *"vZ> N   ]1j  .]1j]1j]1j  B#Y 222]1j2]1j]1j]1j Bu` DDD]1jD+]1j]1j]1j  B.eѕ :V V V ]1jV -]1j]1j]1j  BKd.k h h h ]1jh 4]1j]1j]1j B}E z z z ]1jz (2]1j]1j]1j  CUf } } } ]1j} H1]1j]1j]1j  C0,nؐ (4 4 4 ]1j4 R]1j]1j]1j U+UL/ cq q q ]1jq (]1j]1j]1j  C7UC e e e ]1je @]1j]1j]1j  $C ]1j x:]1j]1j]1j *C mY Y Y ]1jY ]1j]1j]1j 9C$(L ]1j p]1j]1j]1jR )+H:>`I $ NNN]1jN1]1j]1j]1j  =C5" 777]1j7+]1j]1j]1j  JCO.3 0III]1jID]1j]1j]1j$ a+d ̈́[[[]1j[xC]1j]1j]1j" +=-$Y vvv]1jv]1j]1j]1j  UCN K***]1j*`P]1j]1j]1j* +U#` $]1jh!]1j]1j]1j  ZCN uE[[[]1j[8]1j]1j]1j  cCyˢa K]1j ]1j]1j]1j iC D'u rOOO]1jO5]1j]1j]1j mCf7 ]1j %]1j]1j]1j  {Chހ CCC]1jC]1j]1j]1j  C: }M]1j ]1j]1j]1j C !8!8!8]1j!8 ]1j]1j]1j Cyee Y<<<]1j< ]1j]1j]1j C^u1 UNiNiNi]1jNix]1j]1j]1j C e *```]1j` ]1j]1j]1j CA #>r]r]r]]1jr]+]1j]1j]1j  C, f]1j`]1j]1j]1j  CvM` QQQ]1jQ]1j]1j]1j  C4sF L]1j(9]1j]1j]1j CD(0_ `_EEE]1jE]1j]1j]1j  CuC b]1j ]1j]1j]1j CZ9l r999]1j9` ]1j]1j]1j  C`5 7 ]1j`]]1j]1j]1j0 ,˚w &G k k k]1j kHD]1j]1j]1j$ !,L| y &"&"&"]1j&"0]1j]1j]1j  Cg SSSSSS]1jSS]1j]1j]1j  C> ݹ\\\]1j\8]1j]1j]1j C@~IN #,n n n ]1jn *]1j]1j]1j  Cd ]1j ]1j]1j]1j CiZ} ]1j]1j]1j]1jB !A,.y< #xxx]1jx ]1j]1j]1j C;!< ]1j ]1j]1j]1j sWi C3+ #+ #+ #]1j+ # (]1j]1j]1j  3y F#F#F#]1jF#]1j]1j]1jH $,-`t \s$s$s$]1js$-]1j]1j]1j  Lv/ /%%%]1j%J]1j]1j]1j& ,R(] Y%&%&%&]1j%&X]1j]1j]1j CHޢZ E&&&]1j&]1j]1j]1j q ;-''']1j'@9]1j]1j]1j  f K''']1j'C]1j]1j]1j" ,^i SJ(J(J(]1jJ(]1j]1j]1j /, D zT(((]1j(`]1j]1j]1j 6]m ?)?)?)]1j?)0]]1j]1j]1j0 - ! a')')')]1j')8.]1j]1j]1j  >T0|v Bp*Bp*Bp*]1jBp*]1j]1j]1j  J3qz T*T*T*]1jT*]1j]1j]1jl 6A-8( Nfd+fd+fd+]1jfd+4]1j]1j]1j O;Y ,,,]1j,H4]1j]1j]1j ]z ~.,,,]1j,HK]1j]1j]1j& !-stI 7z---]1j-/]1j]1j]1j  kkyy =---]1j-.]1j]1j]1j  wG @.@.@.]1j@.(g]1j]1j]1j4 -O~` ...]1j.6]1j]1j]1j [=p #///]1j/ ]1j]1j]1j ^n $)0)0)0]1j)0P)]1j]1j]1j  9!- u,0,0,0]1j,0]1j]1j]1j `8C '>1>1>1]1j>1X]1j]1j]1j  -N| MP1P1P1]1jP1]1j]1j]1j ҈CS@ skN2kN2kN2]1jkN2@!]1j]1j]1j  R ;}2}2}2]1j}2)]1j]1j]1j  p@ oB3B3B3]1jB3]1j]1j]1j  Ȱ\qr& 333]1j3@D]1j]1j]1j .= i:i:i:]1ji:X#]1j]1j]1j  Γ: ; ; ;]1j ;-]1j]1j]1j  4r s;;;]1j;]1j]1j]1j B E = = =]1j =H]1j]1j]1j z6y q$=$=$=]1j$=?]1j]1j]1j    6w>6w>6w>]1j6w>h]1j]1j]1j ~W Q.?Q.?Q.?]1jQ.?]1j]1j]1j ")Pl l?l?l?]1jl?pJ]1j]1j]1j& .wLMY H@@@]1j@]1j]1j]1j  *.S ynSASASA]1jSA]1j]1j]1j  /I55 "AAA]1jAM]1j]1j]1j( /: {τBτBτB]1jτB0]1j]1j]1j  5 9 BBB]1jB]1j]1j]1j Am 2vCCC]1jC!]1j]1j]1j  E|FK X D D D]1j Da]1j]1j]1j2 /) ;aE;aE;aE]1j;aE@@]1j]1j]1j" /@u VFVFVF]1jVFh ]1j]1j]1j Nηm@r !qFqFqF]1jqF]1j]1j]1j Rm icHHH]1jH0]1j]1j]1j  ZL -g1I1I1I]1j1I]1j]1j]1j `t  jIII]1jI!]1j]1j]1j  h_($C @JJJ]1jJ]1j]1j]1j qŴg %K%K%K]1j%KN]1j]1j]1j( 0Ey߼ 7L7L7L]1j7L(]1j]1j]1jH $A0Q, RLRLRL]1jRL"]1j]1j]1j  s0m= x3N3N3N]1j3Nj]1j]1j]1j6 !0Dx]] NNN]1jN]1j]1j]1j  |4N PPP]1jPp]1j]1j]1j ' RRRR]1jRp]1j]1j]1j: 0X }NrSNrSNrS]1jNrS]1j]1j]1j N m2 FrfTrfTrfT]1jrfT8+]1j]1j]1j  .w UUU]1jU]1j]1j]1j 2G AVVV]1jV]1j]1j]1j 4Hf {WWW]1jWx>]1j]1j]1j  Ʋ/ GWWW]1jW]1j]1j]1j  e tX tX tX]1j tX8O]1j]1j]1j( 0I AI&+Y&+Y&+Y]1j&+Y]1j]1j]1j kqGr S\ZS\ZS\Z]1jS\Z]1j]1j]1j  ErL a2wP[wP[wP[]1jwP[D]1j]1j]1j" 0E;(F D\D\D\]1jD\8]1j]1j]1j  Kt @u]u]u]]1ju]04]1j]1j]1j ˌH n ^_^_^_]1j^_=]1j]1j]1j  ̱Reu v=`=`=`]1j=`8*]1j]1j]1j  ܱ y mjajaja]1jjah]1j]1j]1j   <bbb]1jb\]1j]1j]1j0 08  :ccc]1jc6]1j]1j]1j p, S[ f f f]1j f]1j]1j]1j  M{NA D9${${${]1j${02]1j]1j]1j  2`·w 'H{H{H{]1jH{$]1j]1j]1j  2TDd OZt|Zt|Zt|]1jZt|h ]1j]1j]1j 2zb l|l|l|]1jl|+]1j]1j]1j  2{T9J4 W~h}~h}~h}]1j~h} ]1j]1j]1j 2h ~~~]1j~!]1j]1j]1j  2j ~~~]1j~P]1j]1j]1jx <4hk ]1j*]1j]1j]1j  2:} -]1j ]1j]1j]1j 2` ]1j ]1j]1j]1j 2vk DN ]1j ]1j]1j]1j 2Do) ;j;j;j]1j;j]1j]1j]1j  2G}| WV!V!V!]1jV!@]1j]1j]1j" a4 2E /hhh]1jh@]1j]1j]1j  2S˳ J| ]1j @]1j]1j]1j  26 1p]1j]1j]1j]1j 2E z gwww]1jw@]1j]1j]1j 2t!d ....]1j.]1j]1j]1j 2*xE R###]1j#]1j]1j]1j 2U! S.ڈ.ڈ.ڈ]1j.ڈ:]1j]1j]1j 2A-l lMRΉRΉRΉ]1jRΉ`]1j]1j]1j  3~x? 5kvŠvŠvŠ]1jvŠH]1j]1j]1jV +4㹨[ 8yyy]1jy]1j]1j]1j  39O c}000]1j0]1j]1j]1j  3ү ]1jP]1j]1j]1j  3e^ ➍➍➍]1j➍!]1j]1j]1j  305\ 2UUU]1jUH]1j]1j]1jh 45\*o ***]1j*-]1j]1j]1j  )3}_ M```]1j`]1j]1j]1j 536vae r!&&{]1j{]1j]1j]1j <3vx5 WWW]1jW Y]1j]1j]1j. A5d0 KKK]1jK/]1j]1j]1j  D3cG o+]1j]1j]1j]1j P3~t d]1j]1j]1j]1j W3 >AAA]1jA]1j]1j]1j  ^3_G F eߗeߗeߗ]1jeߗ@]1j]1j]1j  d3|~ ӘӘӘ]1jӘ|]1j]1j]1j@  a58U^ @]1j ]1j]1j]1j i3Vr AAA]1jA ]1j]1j]1j m3+ &ѻѻѻ]1jѻ0=]1j]1j]1j  p3S 3 l8]1j!]1j]1j]1j  3f)wcJ ggg]1jg ]1j]1j]1j 3(U* F՝F՝F՝]1jF՝]1j]1j]1j| >5Z0 aaa]1jax]1j]1j]1j  3P\ ]1j84]1j]1j]1j 3/i< ttt]1jt]1j]1j]1j 3d ֥֥֥]1j֥8]1j]1j]1j 3#zш ޜ]1j0V]1j]1j]1j, 5 \IK QQQ]1jQ]1j]1j]1j 3J3z8 Z000]1j0^]1j]1j]1j0 5b ?BTTT]1jT@B]1j]1j]1j" 6a  xxx]1jx(l]1j]1j]1j \6!}ȵ 8^^^]1j^]1j]1j]1j 3KvP ^ۏۏۏ]1jۏ8/]1j]1j]1j  3h j zFFF]1jF`]1j]1j]1j  3< =#x#x#x]1j#xH]1j]1j]1j 30' >/>/>/]1j>/:]1j]1j]1j 3vN YYY]1jY@]1j]1j]1j  3 V ttt]1jt#]1j]1j]1j  3o|p ]1jV]1j]1j]1j, !6W"U ]1j ]1j]1j]1jD "A6SYm ]1j +]1j]1j]1j  3-G ͤ111]1j1l]1j]1j]1j8 6e^# 0UUU]1jU]1j]1j]1j  3M1` >>>]1j>]1j]1j]1jZ -7S@ ]222]1j2+]1j]1j]1j  8AEP &&&]1j&]1j]1j]1j 3]R Y X X X]1j X]1j]1j]1j   8 FGW`c $$$]1j$ ]1j]1j]1j 86& @HHH]1jH]1j]1j]1j 8oS _u4u4u4]1ju4o]1j]1j]1j 85\ mF(((]1j(]1j]1j]1j 8q- d]1j]1j]1j]1j 8)h /YYY]1jY]1j]1j]1j 8͝S W[MMM]1jM6]1j]1j]1j 8*|* =]1j ]1j]1j]1j 8ڼKfO 262626]1j26A`1j]1j]1j 4*/ @/|@/|pN]1jM$]1j]1j]1jh 4 X4`Ei j[M]1jM]1j]1j]1j 8% 0 i]1j]1j]1j]1j@ rR O ]1j.t_1j_1j_1j 58IU! =H=HH_1jH _1j_1j_1j 18ID-R UbxCxCGB_1jGBB_1j_1j_1j #8 OY jNpNM_1jM_1j`1j`1j`1j qF= p89p89p_1jIkT_1j_1j_1j ,82Y A|qpKp_1jKp_1j_1j_1j/etc/init.d/dmesg$[} w_1j_1j_1j_1j/etc/init.d/hwdriversn hkkk_1jk_1j_1j_1j/etc/init.d/mdevqK b<<<_1j<_1j_1j_1j/etc/init.d/acpid-e| rororo_1jro_1j_1j_1j/etc/init.d/bootmisc_n UŔŔŔ_1jŔ_1j_1j_1j/etc/init.d/hostnamezK \\\_1j\_1j_1j_1j/etc/init.d/hwclock寳 ѻѻѻ_1jѻ_1j_1j_1j/etc/init.d/modulesȽ J===_1j=_1j_1j_1j/etc/init.d/swapl@ ttt_1jt_1j_1j_1j/etc/init.d/sysctl} J9'ˣ'ˣ'ˣ_1j'ˣ_1j_1j_1j/etc/init.d/syslogj; 3=_1j_1j_1j_1j/etc/init.d/chronydWt h _1j _1j_1j_1j/etc/init.d/networkings}k %%%_1j%_1j_1j_1j/etc/init.d/sshd  U{{{_1j{_1j_1j_1j/etc/init.d/killprocsp4 (((_1j(_1j_1j_1j/etc/init.d/mount-ro=`, ǺBBB_1jB_1j_1j_1j/etc/init.d/savecache T U0zzz_1jz]_1j_1j_1j 88{8< D֮f_1j`1j`1j`1j/etc/init.d/tiny-cloud-boot u???`1j?`1j`1j`1j/etc/init.d/tiny-cloud-early" ;X;X;X`1j;X`1j`1j`1j/etc/init.d/tiny-cloud-mainvL `1j `1j`1j`1j/etc/init.d/tiny-cloud-finalBX i`1jT1j\1j\1j\1j G -1S1j-T1j\1j\1j\1j ζC e00Q%S1j-T1j\1j\1j\1j ʳ =~VS1jT1j\1j\1j\1j 1im S1jT1j\1j\1j\1j bg1d ظS1j!T1j\1j\1j\1j /~X ++S1j^T1j\1j\1j\1j Sx5 ))S1jT1j\1j\1j\1j 8} A  _L S1j*T1j\1j\1j\1j iӕX A @ S1j3T1j\1j\1j\1j B͡q q S1jEGT1j\1j\1j\1j CB 'ˣ'ˣS1jNT1j\1j\1j\1j PX S9E9E[S1ji;T1j\1j\1j\1j 6\  gS1jT1j\1j\1j\1j }^ 9E9E S1jT1j\1j\1j\1j qjy 'ˣ'ˣNiS1j#T1j\1j\1j\1j |@Nm 00S1jÝT1j\1j\1j\1j  ( S'ˣ'ˣ`!S1jT1j\1j\1j\1j Ӕ8f ]U"S1jT1j\1j\1j\1j vk r]S1jIT1j\1j\1j\1j 9@ ++S1j T1j\1j\1j\1j   ÂS1jT1j\1j\1j\1j x]( WS1j/zT1j\1j\1j\1j Ga> עעS1j8T1j\1j\1j\1j mv :AS1jJ1T1j\1j\1j\1j > )  S1jSnT1j\1j\1j\1j ?4m* {F#S1j\T1j\1j\1j\1j * עע%S1jn%T1j\1j\1j\1j VA6 j$S1jwbT1j\1j\1j\1j N4 00s4S1jT1j\1j\1j\1j ,ݲa+ ;&S1jA\1j\1j\1j\1j 8K ǬS1jT1j\1j\1j\1j ;mʎ n[S1jVA\1j\1j\1j\1j MN ^S1j A\1j\1j\1j\1j ԥu cccS1j T1j\1j\1j\1j ZFR ccTgS1jJA\1j\1j\1j\1j 0 u?cS1jT1j\1j\1j\1j  hq cciS1jA\1j\1j\1j\1j kR g---S1jA\1j\1j\1j\1j & R---S1jU1j\1j\1j\1j Kga7 Li--i)TS1jS1j\1j\1j\1j SH& |C|COS1jaU1j\1j\1j\1j > |C|CYnS1jU1j\1j\1j\1j  8$$-:>U1j\Z\1j\1j\1j\1j : "&+YU1j_\1j\1j\1j\1j Tl` YnU1j_\1j\1j\1j\1j FR+ ~ X XeZU1j+`\1j\1j\1j\1j :eZ J X X^U1jb\1j\1j\1j\1j P{ $$GU1jGcn\1j\1j\1j\1j Kq &τBU1jkWo\1j\1j\1j\1j 4n BWU1jLMuAV1j\1j\1j\1j ZvLlG 5"u4u4U1jZt|A\1j\1j\1j\1j |Ċ -gggV1jѻV1j\1j\1j\1j  Ok`V1jV1j\1j\1j\1j : Biggk`V1j . ..  lost+found boot etc var& lib) bin: sbin; usr@ procA dev homemedia mnt opt root run srv systmp ޫ& ... py ޏ# ޏ# ޏ# ޏ# ޏ# ޏ# ޏ# ޏ# ޏ# ޏ# ޏ#  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ . .. efi config-6.18.35-0-virt vmlinuz-virt initramfs-virt boot(grubT dtbs-virtSystem.map-6.18.35-0-virt ξ . .. ;:Q ...{W, $o/ . .. repositories keys4protected_paths.d arch |world ^Ad . ..<3alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub3alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub ap . .. logcacheempty liblocal@run mailLoptspool tmplock   . ..apk.log ބ& . ..( libc.musl-aarch64.so.1firmwaremodules-load.dsysctl.dk mdev apkmodules'\ld-musl-aarch64.so.1 pg) ...{L Ǔ+ .L..,busybox Pu- .L...acpid openrc |chrony gY/ . ..0 if-down.d1if-post-down.d2 if-post-up.d3 if-pre-down.d4 if-pre-up.d5if-up.d` interfaces X 0 ./.. #~1 ./L..bridge &2 ./.. )A3 ./.. E}4 ./L..bridge ޣHք5 ./L..6dad 8 .L..9 udhcpc.conf m: ...{ȧiྲྀ ޤox8; . ..< sbin=shareB bin liblocallibexec ޴&< .;..{Tbrxr ް#= .; ..>udhcpc misc apkdhcpcdmkinitfsv kernel! zoneinfo grub hlocale )4> .=L..?default.script ,@ ... 3(A . ..' ptswshm &B .;..{.@>XV[m $ D [[S beepi cpiov diffexpandflockgroupshostidloggermkfifonohupnsenteropenvt pmaprealpath) sha256sum-shredpcs1 sortG trI traceroute6Qudhcpc6Yunlzopop]uptimefi_uudecode`uuencodeh wgetlwhoisn xxdo ssl_clientscanelftlddtree  findssl.sh sftp ssh-addiconv scmp_sys_resolver ssh-pkcs11-helper grub-menulst2cfg  grub-mkimage  grub-mknetdir grub-mkstandalone grub-script-check  grub-editenv P grub-file C [md5sum odm cut foldwdirnameq deallocvt find+ sha512sum E topLtruncateiwhich j who% doas  ssh-keygen  grub-mklayout grub-mkpasswd-pbkdf2 grub-mkrelpath 9[M ashObase64*busybox\ cat^chgrpn datep dd|dumpkmapfalsegunzip gzipioniceipcalckbd_mode killlinux64login lsattr lzopmakemimemkdir more{ mount mountpoint mvpidof pingping6 pipe_progress pwd reformime revrmdir sed% setserial sh3 stat5 stty6 su; syncFtouchSunameqLzcat<bbsuidmount mountpoint mv pidof pingping6 pipe_progress  pwd reformime rev rmdir0 ;|y dnsdomainnamemknodfsync} echo niceprintenv`chownQbbconfiglinux32J arch rm ps~egrep chattrgetoptxdmesg run-parts linkmpstat_chmod grepfgrepfatattr lsiostatmktemph cpfdflush lnhostnamenetstatu df$setpriv0sleep@ tarK trueRumount^usleepewatchK@kmodl rc-status ޑ)PbasenameXunlzmapkill fallocateNttysize lesshexdump lzmaresize factorH tracerouteA tee7 sum  pwdxzdos2unixejectR bc last. shufTunexpandinstall" setkeycodes_ipcrmlcryptpw4strings2split=printf. env hdDtimeout(sha1sumgkcrontabU uniqg wckwhoamiSmxargsgetent ldd yx grub-syslinux2cfg 0 grub-kbdcomp * ' .A.. n!?w .A.. ?m@x .L..yroot z . ..|blacklist.conf} i386.conf{ aliases.conf ޚbrJ~ ... ޷ ...  . ..15mindailyhourlymonthlyweekly # ... 0([X ... Yx ... ދJ ... m ... ݙ . ..READMEcolor_prompt.sh.disabled 20locale.sh ~  .L..README t . ..ualpine  .&.. JR .&.. , .&.. VN . ..cdromfloppyusb x\5 ... R ... ނn ... %?R ... \9 ... ~W ...  . ..lock Tј ... rV ... ޤn ... ޽-3 ... 1x~ .;..{[o iΩ ... ި!紞 .L..00-alpine.conf e .; .. bin libshare '@ ...  ... ޺< ... o .=.. J . .. miscapk ]Ȧ ... ޾5 ... M . .. misc chrony!dhcpcd cloud t\ ... > ... z ... ޝw ... ޹̯ . ..Lcronmail #6ʰ .L..crontabs k ... VEacpidIadjtimexK arpVblockdevfstrimgetty ifenslave initinotifydMinsmodipaddriplinkipneighloadkmaplosetupNlsmod mdev,mkdosfsPmodprobenameifnologin pivot_rootpoweroffQrmmodroute: switch_rootPudhcpcr zcipopenrc rc-service rc-updateservicestart-stop-daemonldconfig' dosfslabel(fatlabel apk)fsck.fat+ fsck.vfat@ fsck.ext2Cmke2fsD mkfs.ext2E mkfs.ext3 tsfdisk?e2fsck އ 8swapoffifdownhwclockreboot ifupipruleiptunnelT blkdiscardklogd9swapon/ mkfs.vfatOtunctlUblkid<sysctl  raidautorun fsckLdepmodfdisk=syslogdfbsplashavconfig/slattach openrc-run ifctrstat ifquery* fsck.msdos. mkfs.msdosB fsck.ext4 mkmntdirsF mkfs.ext4&dosfsck (@޼ .; .. ifupdown-ngrc ޜˊ . ..bridge dhcpforward ipv6ipv6-ra ipv6-tempaddr linkstaticbond uK/ ...{ I0.ybxT ( U . .. binK sbinXLshixversion ޻a+  ...{>"e: ^$ ...{rx $,bihwclock killprocsmodules mtabnetmount staticroute swapswclockloadkmapPsyslogchronyd sshd@klogd consolefontdevfs@@5.apk.d1e36cff4304bf69c0323b664a1a886920a08c637e262e89@@5.apk.7a252540ebef811a6a4b3bb66912fd6d42f150a44acd7d13@5.apk.ecd79fff2baa1f929743922f5833ac66768f950a680ed6e3t5.apk.923c6ff52cf0985688a735c527739a0380c979eb728c66dd AEdmesg fsck localmountmodloopseedrngcrond ntpdrdate net-onlinewatchdogbootmiscV9@@A@6mf0@djp@zp@~t@rx @~+@R`@%!@Q@ؠ@ĈZ C6 killprocsmodulesnetmountnumlockswclock sysfsconf@loadkmappmdevLacpidtcgroups@@5.apk.8e2660c28def239b547eef1e266372aaef737161f7632172cab@t5.apk.531c75e3f7b4dd23bb0e8e86f31aebdad861e455b09bb0ef1a8a94ec41f7 75 hwdrivers localmountloopbackmodloop mtabosclock savecache fsckseedrngsysctlklogd @tiny-cloud-final sshd k networkingprocfs s6-svscanhostname net-online  termencoding user ntpdrdatewatchdog"dhcpcddmesgcrond tiny-cloud-mainbootmiscbinfmt.ybx@@+Њhl @b~@pm @\B0@T@@@f P ݃@S@Ƞ"c@As@Jwg cX rootrunsvdir save-keymapssave-termencoding staticroute swapsysfs functions.shhwclocklocal machine-idmount-rosyslogchronyd tiny-cloud-early Htiny-cloud-bootdevfs0 firstboot consolefontm @" @& 0@bP@|`"@H)t }+@ I0@baG@*K @bqMp@d_`@B2c@@4yg jn  .L.. README ތUDY . .. bootdefault nonetworkshutdownsysinit T . ..acpidbootmischostnamehwclockmodules swapsysctlsyslog`tiny-cloud-boot H . ..chronyd networking sshdtiny-cloud-earlytiny-cloud-main|tiny-cloud-final ޤ= ... dc . .. killprocsmount-ro savecache  . .. devfsdmesg hwdriversmdev 3T$eerrorn&einfo(eoutdent+ ewaitfile0 get_options5 on_ac_power9service_get_value<service_set_value=service_started@service_stoppedBservice_wasinactiveC shell_varFveindent 4 checkpath ߷ׁ-ewarnn/ fstabinfo4 mountinfo#eerror%eindent* eval_ecolors openrc-user7 save_options8service_crashed:service_hotplugged> service_started_daemonAservice_stoppingEveendGveinfoIvewarnJvewend!ebegin ,ewarn.ewend2 is_older_than?service_startingD0vebegin" eend6h rc-depend 0H@ veoutdent1 is_newer_than3kill_all;Xservice_inactive'einfon)$esyslog>@dA@G@I @B1 J@hM@?Z0@H,_@@"e@gP@mk@fl`@o@ٙ cK . ..Mmark_service_failedN mark_service_hotpluggedO mark_service_inactivePmark_service_startedQ mark_service_startingRmark_service_stoppedS mark_service_stoppingT mark_service_wasinactiveUrc-abortVseedrngWswclockLmark_service_crashed X ...{uaK ޢ3 ] init-early.sh_ openrc-run.sh`openrc-user.shbrc-functions.shc rc-mount.shgstart-stop-daemon.shhdsupervise-daemon.sh \@drunit.shes6-svscanboot.shfs6.sh\ gendepends.sh^init.sha rc-cgroup.sh[ functions.shZcgroup-release-agent.shY binfmt.sh@| @" @!9 @Z|*`@)>@@bgH0@uaKtFW@Z @d@@p@I ~rk .& ..mpersistent-storagenptpdevousbdevldvbdev ޏq .L..rlbu.conf ,3achpasswdrdelgroup partprobe  rdev  readahead remove-shellsendmaily lbu_commitz lbu_exclude| lbu_statussetup-bootable setup-devd setup-dns setup-keymap setup-lbu setup-ntp setup-proxy setup-usersetup-xorg-base e2label e4crypt e4defrag logsave tune2fs  grub-macbless ( grub-mkconfig  grub-install $ grub-rebootwgenfstab grub-set-default (grub-sparc64-setup l badblocks T@r2M4@FM'>2OD@X,2Yt@Tb@HHc@~u{dXhd@08j@Dn0Ծw: } 9h FJ treeC timeXbunzip2microcomlzopcatkillalllsusbZunshare> tac&setsidpgrepc chvt,showkey id ipcspstree\unzipicrN awklzcat lsofpscansoxzcatseng commnprocYbzcatmkpasswddvolname? tail head seq[ unxzZbzip2p yesdcksumf cmppasswdsunisoV.chronyc econftool scp imdsgetconf  ssh-agent  ssh-keyscan  grub-mkrescue hgrub-render-label  grub-fstest grub-glue-efi  .= ..keys vY ...{ . 9ؙ . ..3alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub\3alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub ޚkaarch64<3alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub<3alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub<3alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub<3alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub<3alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub<3alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub3alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pubarmhfarmv7 loongarch64mips64ppc64les390x x86<3alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.puba<3alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub3<3alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub2<3alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pubeD3alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub /IB<3alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pubD3alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub<3alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub<3alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pubH3alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub3alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pubriscv64x86_64&T@6(WS@pR_D@Jc@gd@t@LdXBė .4@埤@ @Z& mke2fs.conftiny-cloud.conf  ... (uPU . ..VT features.d  mkinitfs.conf ̗V .U..{tr/W7mDۧ \ e dhcp.filesk f2fs.modulesz network.files ubifs.modulesvirtio.modules xfs.files p gve.modules ޘ=f dhcp.modulesg ena.modulesh ext2.modules`cramfs.modulesm gfs2.modulesn https.filest lvm.modulesy nbd.modules raid.files scsi.modulessquashfs.modules gpio_pl061.modules | mana.modulesW 9p.modules67X` aoe.modules73a059ded04f880e08f8d3@@@~t5.apk.5ef479c6bf8938bf4f81b736ea9af4728cff46d66ae2936d BVo jfs.modulesq kms.modulesu memdisk.filesx nbd.files} nvme.modules~ ocfs2.modules qeth.modules raid.modules zfs.modules] btrfs.filesb cryptsetup.files ޳"w mmc.modules phy.modulesreiserfs.modulesi ext3.moduleswireguard.modulesxenpci.modules zfs.files pci-hyperv.modules[ base.modules^ btrfs.modules_ cdrom.modulesacryptkey.filesdXdasd_mod.modules `ހlfloppy.modulesp keymap.files{network.modules usb.modules xfs.modulesj ext4.modulesccryptsetup.modulesY ata.modules7m@5t@tw`@fLt@pş@; @Dۧp@B@\7ت@2,g@:ԷP@g@@Zc\ srlvm-thin.filess lvm.files| nfit.moduleswireguard.filesh zfcp.modulesv@memdisk.modulesZ base.files\bootchart.files !• .= ..groupinitramfs-init mdev.confpasswdfstab r . ..amazon amd apm armcavium hisiliconqcom ޡ . ..alpine-v3-evp.dtb\alpine-v2-evp.dtb ޤ . ..amd-overdrive-rev-b1.dtb\amd-overdrive-rev-b0.dtb .w= . ..apm-mustang.dtb\apm-merlin.dtb ޕ) ...{'qw f:$foundation-v8-gicv3-psci.dtb foundation-v8-psci.dtb juno-r1.dtb juno-r2.dtb juno-scmi.dtbjuno.dtbmorello-fvp.dtbHmorello-sdp.dtb $<ٷrtsm_ve-aemv8a.dtb$vexpress-v2f-1xv7-ca53x2.dtbjuno-r2-scmi.dtb@juno-r1-scmi.dtb corstone1000-mps3.dtb foundation-v8-gicv3.dtbfoundation-v8.dtbfvp-base-revc.dtbcorstone1000-fvp.dtbɿ@PfB@C@Z8^0@q^@fv@@vt'qw@:]x@p>ˏ@W`@v@n, @ҵU ޾б . ..thunder2-99xx.dtb\thunder-88xx.dtb ߼ . ..hi3670-hikey970.dtb hi3798cv200-poplar.dtbhi6220-hikey.dtb hip05-d02.dtb hip06-d03.dtb< hip07-d05.dtbhi3660-hikey960.dtb = ...{!T 4y N),@p38|; vDHLRVHZI:^ VqiFlat(~ZɅTFƐ|#u/! z?".p߆:R 9׋(,!msm8916-samsung-grandprimelte.dtb$msm8916-samsung-rossa.dtb msm8916-thwc-uf896.dtb$msm8953-xiaomi-tissot.dtbM sar2130p-qar2130p.dtbu$sc7180-trogdor-pompom-r2.dtb,$sc7280-herobrine-zombie-nvme-lte.dtb$sdm632-motorola-ocean.dtbsm8150-hdk.dtb,"sm8550-sony-xperia-yodo-pdx234.dtbsm8650-hdk-display-card.dtb /"Xipq5332-rdp441.dtb10%msm8998-sony-xperia-yoshino-maple.dtbW(sc7180-trogdor-homestar-r4.dtbsm8150-mtp.dtb0'x1e80100-hp-elitebook-ultra-g1q-el2.dtb( x1e80100-microsoft-romulus13.dtb,!x1p42100-asus-zenbook-a14-el2.dtb  x1p42100-hp-omnibook-x14-el2.dtb`(sc7180-trogdor-lazor-r1-kb.dtbb$sc7180-trogdor-lazor-r1.dtbhsc7180-trogdor-lazor-r3.dtb@@@5.apk.e7395f0e979f77a2f53ac619f9d36f0621cf5bf6ad4d1735@@5.apk.1a91b60da4f1e1a1055fd413b288dcea20036f649bd5e0d3t5.apk.60aaeb9d851f5da9db738d959daf086c60cbdddc94196442 L)B msm8916-mtp.dtb,"msm8956-sony-xperia-loire-suzu.dtb'(msm8996pro-xiaomi-natrium.dtb3 msm8998-xiaomi-sagit.dtbX(sc7180-trogdor-kingoftown.dtb,!sc7280-herobrine-herobrine-r1.dtb$sc8180x-lenovo-flex-5g.dtb$sm4250-oneplus-billie2.dtb0%sm8150-sony-xperia-kumano-bahamut.dtb sm8250-samsung-r8q.dtb|sm8750-qrd.dtb {.( msm8998-oneplus-cheeseburger.dtbDqrb4210-rb2.dtb[4)sc7180-trogdor-lazor-limozeen-nots-r5.dtb( sc7280-herobrine-zombie-nvme.dtb,!sc8280xp-microsoft-arcata-el2.dtbsm8650-mtp.dtbx1e001de-devkit.dtb(x1e80100-asus-zenbook-a14.dtb x1e80100-microsoft-romulus15.dtb ޺ݯ$msm8916-samsung-j3ltetw.dtb$,#msm8996-sony-xperia-tone-kagura.dtb)(msm8998-asus-novago-tp370ql.dtbLsa8775p-ride.dtbq,"sc7180-trogdor-pazquel360-wifi.dtbv( sc7180-trogdor-pompom-r3-lte.dtb\sdm450-motorola-ali.dtbapq8016-sbc.dtbipq5332-rdp474.dtbt ޹L( $msm8939-wingtech-wt82918.dtb5qcm6490-idp.dtbipq9574-rdp418.dtb$msm8916-longcheer-l8910.dtb,$msm8998-lenovo-miix-630.dtbdP sc7180-trogdor-lazor-r10-lte.dtb (R$msm8916-samsung-gt510.dtb$msm8916-wingtech-wt88047.dtb,$msm8939-sony-xperia-kanuti-tulip.dtbFqrb5165-rb5.dtbZ4)sc7180-trogdor-lazor-limozeen-nots-r4.dtbk$sc7180-trogdor-lazor-r9.dtbx0'sc7180-trogdor-quackingstick-r0-lte.dtb|8/sc7180-trogdor-wormdingler-rev1-boe-rt5682s.dtb(sc8280xp-microsoft-arcata.dtb(sdm845-samsung-starqltechn.dtb,"sdm845-sony-xperia-tama-apollo.dtb0%x1e78100-lenovo-thinkpad-t14s-el2.dtbx1e80100-qcp-el2.dtbtmsm8916-lg-c50.dtbc68ed4611a7f4d611af4f6a7e7b50da843d@ZɅ@F- @NT0@ȗ@@NP@ޠu@ ߥ@(msm8994-sony-xperia-kitakami-satsuki.dtb msm8953-xiaomi-mido.dtb* msm8998-fxtec-pro1.dtbc(sc7180-trogdor-lazor-r10-kb.dtbl0%sc7180-trogdor-pazquel-lte-parade.dtb}0'sc7180-trogdor-wormdingler-rev1-boe.dtb0'sc7180-trogdor-wormdingler-rev1-inx.dtb,#sdm630-sony-xperia-nile-pioneer.dtb,#sm6125-sony-xperia-seine-pdx201.dtb$sm7125-xiaomi-joyeuse.dtb sm8550-hdk.dtb4ipq5332-rdp468.dtbffc38e426a9880793123d8b98d1e74d3f73@@5.apk.4d5c2913b26767e524a4931ba5c71381dd280cb6eac36e7at $ msm8939-samsung-a7.dtb(msm8992-lg-bullhead-rev-10.dtb7 qcm6490-shift-otter.dtbsm8450-qrd.dtbipq9574-rdp433.dtbR$sc7180-trogdor-coachz-r1.dtb^,$sc7180-trogdor-lazor-limozeen-r4.dtb,$sc8280xp-microsoft-blackrock-el2.dtb sm6115p-lenovo-j606f.dtb,$sm8350-sony-xperia-sagami-pdx215.dtb,!x1e80100-asus-zenbook-a14-el2.dtb( x1e80100-dell-xps13-9345-el2.dtb x1p42100-hp-omnibook-x14.dtb apq8016-sbc-usb-host.dtbapq8096-db820c.dtbapq8096-ifc6640.dtbd;\(qcs6490-rb3gen2-industrial-mezzanine.dtb.apk.a12df2cee07a77140ee3f5ac520b6e8a68cea4ff615cac4d@5.apk.a4e2ac7720d8a048449941afcc402f8195f1ac4a019b6168@5.apk.fc27429fb964a63e905d5e7ac78c91dd6edc84df0aa721d7t 9ݘ$msm8976-longcheer-l9360.dtb" msm8996-oneplus3t.dtb%,#msm8996-sony-xperia-tone-keyaki.dtb/$msm8998-oneplus-dumpling.dtbe$sc7180-trogdor-lazor-r10.dtbg(sc7180-trogdor-lazor-r3-lte.dtbm,!sc7180-trogdor-pazquel-lte-ti.dtbsc7280-idp.dtbsc8280xp-crd-el2.dtb$sm7325-nothing-spacewar.dtb sm8250-xiaomi-pipa.dtb sm8450-samsung-r0q.dtbP&x1e78100-lenovo-thinkpad-t14s-oled.dtb ޫhmsm8916-lg-m216.dtb$msm8916-samsung-a3u-eur.dtb msm8953-xiaomi-vince.dtbCqrb2210-rb1.dtb,$sc7280-herobrine-villager-r1-lte.dtb(sc7280-herobrine-zombie-lte.dtb( sc8280xp-microsoft-blackrock.dtbsda660-inforce-ifc6560.dtb4lemans-evk.dtb@@@X@5.apk.5a7bd2bd4a84b612fd36137db1e07c02fa7fe2cf89095636@@5.apk.9f692589c24646031708fb4d5f6584d04faf83f8a76a3299t5.apk.5e92a0692cb7932b4cbc89f1015339a03702b3fa8554692c@p@bv)@Zb@9`@$R@v3İ@ D@&msm8994-msft-lumia-octagon-cityman.dtb$msm8916-samsung-a5u-eur.dtbBqdu1000-idp.dtbapq8039-t2.dtb $msm8953-flipkart-rimob.dtb#,!msm8996-sony-xperia-tone-dora.dtb_,$sc7180-trogdor-lazor-limozeen-r9.dtbs$sc7180-trogdor-pompom-r1.dtb sm7225-fairphone-fp4.dtb$sm8250-xiaomi-elish-csot.dtbsm8350-mtp.dtbsm8650-hdk.dtb,"x1e80100-asus-vivobook-s15-el2.dtb(x1e80100-dell-latitude-7455.dtb $x1p42100-lenovo-thinkbook-16-el2.dtbY4*sc7180-trogdor-lazor-limozeen-nots-r10.dtbjm ޷k@&msm8994-sony-xperia-kitakami-karin.dtb msm8916-samsung-e7.dtb msm8916-samsung-gt58.dtb]@%sc7180-trogdor-lazor-limozeen-r10.dtb:qcs615-ride.dtbf(sc7180-trogdor-lazor-r3-kb.dtbr( sc7180-trogdor-pompom-r1-lte.dtbz$sc7180-trogdor-r1-lte.dtb$sc7280-herobrine-crd-pro.dtb sc7280-herobrine-crd.dtb,#sdm630-sony-xperia-nile-voyager.dtb$sm8250-xiaomi-elish-boe.dtbsm8350-hdk.dtbH#x1e80100-hp-elitebook-ultra-g1q.dtb!sm8350-microsoft-surface-duo2.dtb@Mo@L @*Mh@3@՛0@&R@@QJ@4yP@S `@j"t$@%@j) 5] >qcs8300-ride.dtbsm4450-qrd.dtbipq9574-rdp454.dtb1cmsm8916-acer-a1-724.dtb39@@{@5.apk.bfa5e7d504fce621f99dbe42eafbacfa19d5731a799d12d1@@5.apk.d8828527a5c45dbb95069a82db43f2423dbb85001606fbbe@4 tn$sdm845-xiaomi-polaris.dtb,$sm8450-sony-xperia-nagara-pdx223.dtbpx1e80100-crd.dtb,!lemans-evk-camera-csi1-imx577.dtb876&msm8992-msft-lumia-octagon-talkman.dtbb@5.apk.ba440183eca732669db9c2294d6f0be08df0533098095412e@5.apk.25e6f47ea4ea2d248ced5bc5fc8e8da28a65234791d4dcf6@m@5.apk.65a179c12bed8faf856d794649ef02e89e598924b8c86adc@t5.apk.38386fce21835a188c7a81b5224dd6cf3cf3685c1caf701e@10@"Ұ@֐@.׀@XP@])@ j ޮo9sc8280xp-crd.dtb sm6125-xiaomi-ginkgo.dtb x1p42100-lenovo-thinkbook-16.dtb8qcs404-evb-1000.dtb31e3a1de1bf8d1fa97302a4ef2ef6ac35a@5.apk.ba6657611bb0f13facf9c366f37d35c6a290fabff1297ec6@@@@5.apk.706ab94d7091f09cb9b1b7b8eab7d8e29a38e2863eea1882t5.apk.c05cf973818beffb595b5b5987d132c79b67858e5be55959@Vqi@qlp@r-l@Fl@@rFjmP@n@drq 54p,!sc7180-trogdor-pazquel360-lte.dtbT%sdm636-sony-xperia-ganges-mermaid.dtb msm8916-asus-z00l.dtb(msm8992-lg-bullhead-rev-101.dtb00%msm8998-sony-xperia-yoshino-lilac.dtb? qcs8550-aim300-aiot.dtbAqcs9100-ride.dtbHsa8155p-adp.dtb8%sm8150-sony-xperia-kumano-griffin.dtbhamoa-iot-evk.dtb( x1e80100-hp-omnibook-x14-el2.dtb,#x1e80100-lenovo-yoga-slim7x-el2.dtb$x1e80100-microsoft-romulus15-el2.dtb ޖf(msm8929-wingtech-wt82918hd.dtb!msm8996-oneplus3.dtbQ( sc7180-trogdor-coachz-r1-lte.dtbU(sc7180-trogdor-homestar-r2.dtbV(sc7180-trogdor-homestar-r3.dtb,!x1e78100-lenovo-thinkpad-t14s.dtbx1e80100-crd-el2.dtb x1p42100-crd.dtbipq6018-cp01-c1.dtb$sdm450-lenovo-tbx605f.dtb%sdm630-sony-xperia-nile-discovery.dtba06abbbbbd30ebc9t ޣNO sc7180-acer-aspire1.dtb(sc7280-herobrine-evoker-lte.dtb,!sdm845-sony-xperia-tama-akari.dtb!sm8250-sony-xperia-edo-pdx206.dtb$msm8916-gplus-fl8005a.dtbmsm8916-samsung-e5.dtbat@t`@m vp@NXw@>x@2x@[y@z@(~0@@1 @ xP@Î@m gtkn,!sc7180-trogdor-pazquel-parade.dtb$sc7280-herobrine-zombie.dtbsc7280-idp2.dtb$sdm845-oneplus-fajita.dtb,$sm6375-sony-xperia-murray-pdx225.dtbsm8650-qrd.dtbsm8750-mtp.dtb(x1e80100-lenovo-yoga-slim7x.dtbpx1p42100-asus-zenbook-a14.dtb,#apq8016-sbc-d3-camera-mezzanine.dtbipq5424-rdp466.dtb5 msm8916-huawei-g7.dtb712 msm8916-samsung-j5.dtb@5.apk.68b9e432956c6af503b537c8b3e6a013e4bd57852a8d8f31t ޫYsm8250-hdk.dtb(sm8250-mtp.dtb msm8916-samsung-j5x.dtb= qcs6490-rb3gen2.dtbmsm8916-motorola-harpia.dtbipq5332-rdp442.dtbipq9574-rdp453.dtb$msm8916-motorola-surnia.dtb( msm8916-samsung-gprimeltecan.dtb$msm8916-yiming-uz801v3.dtb msm8939-wingtech-wt82918hd.dtb`@X@ @P@ߒ@@Pp@TtM0@2 @^ @9n @@ `@ ʄ䅪@sdm845-lg-judyp.dtbT$sc7180-trogdor-coachz-r3.dtb$sc8280xp-huawei-gaokun3.dtb8%sc8280xp-lenovo-thinkpad-x13s-el2.dtb{ sc7180-trogdor-r1.dtb sdm632-fairphone-fp3.dtb$msm8916-samsung-grandmax.dtbasc7180-trogdor-lazor-r1-lte.dtb <,$qcs6490-rb3gen2-vision-mezzanine.dtb$sdm660-xiaomi-lavender.dtbsdm845-lg-judyln.dtb sdm845-shift-axolotl.dtb4x1e001de-devkit-el2.dtbmonaco-evk.dtb$msm8916-alcatel-idol347.dtb(x1e80100-asus-vivobook-s15.dtbx1e80100-qcp.dtb ޑ:,(msm8916-samsung-serranove.dtb $msm8953-motorola-potter.dtb0'msm8994-sony-xperia-kitakami-sumire.dtbD*x1e78100-lenovo-thinkpad-t14s-oled-el2.dtbt( sc7180-trogdor-pompom-r2-lte.dtbX#x1e80100-dell-latitude-7455-el2.dtb&msm8996-xiaomi-gemini.dtb 7  msm8953-xiaomi-daisy.dtb((msm8996pro-xiaomi-scorpio.dtb-msm8998-mtp.dtb@'x1e80100-dell-inspiron-14-plus-7441.dtbJsa8540p-ride.dtb msm8992-xiaomi-libra.dtbx1e80100-hp-omnibook-x14.dtb,!ipq5018-tplink-archer-ax55-v1.dtbi(sc7180-trogdor-lazor-r9-kb.dtb ( sc7280-herobrine-villager-r0.dtb(sc8280xp-huawei-gaokun3-el2.dtb3$x1e80100-microsoft-romulus13-el2.dtb@@@5.apk.860b6aaadbf6a532882794f30011fc559d248099bed8621a@,!ipq5018-tplink-archer-ax55-v1.dtbi(sc7180-trogdor-lazor-r9-kb.dtb ,4 sc7280-herobrine-villager-r0.dtb7@ o,!sm8250-sony-xperia-edo-pdx203.dtb+x1e80100-dell-inspiron-14-plus-7441-el2.dtbipq8074-hk10-c1.dtb(msm8216-samsung-fortuna3g.dtb@pqcs9100-ride-r3.dtb.@X@ٰ@P8@Nʾ @])0@ j@@F@pP@d@a;@A$tC@r HY'E qrb5165-rb5-vision-mezzanine.dtbKsa8775p-ride-r3.dtbsc8180x-primus.dtbsdm670-google-sargo.dtb msm8916-thwc-ufi001c.dtbmsm8939-longcheer-l9100.dtbVqi@!uitk@k@ql@hul@r-l @Fl0@*al@rFjm@@qn@nP@ܝ`o@drq ޙ]̈6$qcm6490-particle-tachyon.dtb9qcs404-evb-4000.dtbGqru1000-idp.dtbN$sc7180-acer-aspire1-el2.dtbPsc7180-idp.dtbo,sc7180-trogdor-pazquel-ti.dtb$msm8916-longcheer-l8150.dtb msm8917-xiaomi-riva.dtb,$msm8994-sony-xperia-kitakami-ivy.dtb~8/sc7180-trogdor-wormdingler-rev1-inx-rt5682s.dtbsdm845-mtp.dtb msm8996-mtp.dtb\4)sc7180-trogdor-lazor-limozeen-nots-r9.dtb$sc7280-herobrine-evoker.dtb,$sm8450-sony-xperia-nagara-pdx224.dtbdx1e80100-dell-xps13-9345.dtb$apq8016-schneider-hmibsc.dtbsdm845-db845c.dtb,$sdm845-sony-xperia-tama-akatsuki.dtb( sdm845-xiaomi-beryllium-ebbg.dtb$sdm850-lenovo-yoga-c630.dtb(sm6125-xiaomi-laurel-sprout.dtbsm7125-xiaomi-curtana.dtb@bv)@Zb @90@@H3@ćtz@ֹa@8К@$R@@v3P@ Z@ qV sdx75-idp.dtb sm8250-samsung-x1q.dtbH$sm8350-sony-xperia-sagami-pdx214.dtbmsm8916-wingtech-wt86528.dtb4@qcm6490-fairphone-fp5.dtbipq8074-hk01.dtbipq8074-hk10-c2.dtb$msm8916-motorola-osprey.dtb\"msm8956-sony-xperia-loire-kugo.dtbƐ@p `@pu>P@tB@@t‚@i @|#p@(@@Y@@6z0@R~%@Ԗw b,!msm8994-huawei-angler-rev-101.dtb0&sdm845-db845c-navigation-mezzanine.dtbdsdm850-samsung-w737.dtb$msm8916-wingtech-wt86518.dtb\sm8550-mtp.dtb sm6115-fxtec-pro1x.dtb` sm8150-microsoft-surface-duo.dtb4ipq5018-rdp432-c2.dtbvD@zD@6F@5F@ڱH@޼I@I@XL @HL0@""YM@@ aMt[}MP@(N@C@P 8sc7280-crd-r3.dtb$sdm845-oneplus-enchilada.dtb+ msm8998-hp-envy-x2.dtb sm8550-qrd.dtbmsm8992-lg-h815.dtbS( sc7180-trogdor-coachz-r3-lte.dtbj(sc7180-trogdor-lazor-r9-lte.dtbTsm8550-samsung-q5q.dtb20&msm8998-sony-xperia-yoshino-poplar.dtb!sc8280xp-lenovo-thinkpad-x13s.dtb,#sdm630-sony-xperia-ganges-kirin.dtb,"sdm845-xiaomi-beryllium-tianma.dtb\"sm6350-sony-xperia-lena-pdx213.dtb@@ @Mo@L @^@t;@*Mhp@@3`@՛0@s@qYt&R ޴w .& ..6.18.35-0-virt 9`/5 ...{dz ;4 . .. arch$cryptoadrivers fs lib net\ security` |sound ޜ=1 . ..arm64 A'T . ..crypto"lib " . ..aes-ce-ccm.ko.gzaes-ce-cipher.ko.gzaes-neon-blk.ko.gzaes-neon-bs.ko.gzghash-ce.ko.gz nhpoly1305-neon.ko.gz sha3-ce.ko.gz sm3-ce.ko.gz sm3-neon.ko.gz!sm4-ce-cipher.ko.gzaes-ce-blk.ko.gz ޯc" .L..#xor-neon.ko.gz p,$ ...{ ($xEę P*. .$ ..0async_pq.ko.gz1 async_raid6_recov.ko.gz2async_tx.ko.gz3async_xor.ko.gz/async_memcpy.ko.gz I6 blake2b_generic.ko.gz7 blowfish_common.ko.gz<cast_common.ko.gzCcrypto_engine.ko.gzJ essiv.ko.gzM lrw.ko.gzN lz4.ko.gzV rmd160.ko.gz]x xcbc.ko.gz%adiantum.ko.gz@@S@5.apk.51bdbc7251c919746d6b91e5f75961b0a1618e73908ec3e2V@5.apk.013e2cf76b9184755945557dac50cbd19a0c087793b7fc35Wt5.apk.49692151298f6b990315d7fbadc333dca98538bbb2e7dd90 j G:cast5_generic.ko.gzD$crypto_user.ko.gz( af_alg.ko.gz)algif_aead.ko.gz,algif_skcipher.ko.gzQmichael_mic.ko.gzS pcbc.ko.gz&taegis128.ko.gz@@M@5.apk.ecb8f4757c9f02bcb819d71d938ed06066910d4ee5bb1aa4@d &#@ cmac.ko.gzF ecc.ko.gzRnhpoly1305.ko.gz+algif_rng.ko.gz9 camellia_generic.ko.gzGecdh_generic.ko.gzT pcrypt.ko.gzU polyval-generic.ko.gz[ twofish_generic.ko.gz\ wp512.ko.gz' aes_ti.ko.gz`xxhash_generic.ko.gz  _O lz4hc.ko.gzP md4.ko.gzY sm4.ko.gz8 blowfish_generic.ko.gz= ccm.ko.gz> chacha.ko.gzA crc32c-cryptoapi.ko.gzB cryptd.ko.gz-ansi_cprng.ko.gz5authencesn.ko.gzZtwofish_common.ko.gz_4 xor.ko.gzK@ fcrypt.ko.gz.async_tx*algif_hash.ko.gzHecdsa_generic.ko.gzIpechainiv.ko.gz@@Deɛ@ө @zE0@ w@@ę@p١P@] .a ..algosbusses i2c-dev.ko.gz i2c-mux.ko.gzi2c-smbus.ko.gzmuxesi2c-core.ko.gz ޚ' . ..i2c-algo-pcf.ko.gz\i2c-algo-pca.ko.gz  . ..i2c-virtio.ko.gz\i2c-nforce2.ko.gz +w- . .. i2c-mux-pca954x.ko.gzi2c-mux-pinctrl.ko.gzi2c-mux-pca9541.ko.gz ޖb .aL.. miscserio evdev.ko.gz =  .L.. uinput.ko.gz | .L.. serport.ko.gz N .aL..virtio-iommu.ko.gz Kw .a ..arm_mhu_db.ko.gzmailbox-xgene-slimpro.ko.gz arm_mhu.ko.gz iR| .a..{0ɓf5 rE9 .L.. bcache.ko.gz dm-bufio.ko.gzdm-cache-smq.ko.gzdm-cache.ko.gzdm-integrity.ko.gz dm-log-userspace.ko.gz dm-log.ko.gzdm-mirror.ko.gz dm-mod.ko.gzdm-multipath.ko.gz dm-raid.ko.gzdm-round-robin.ko.gz dm-service-time.ko.gzdm-snapshot.ko.gzdm-switch.ko.gz raid0.ko.gz raid1.ko.gz raid10.ko.gz raid456.ko.gzdm-vdoddm-bio-prison.ko.gz oV dm-writecache.ko.gz $ dm-zero.ko.gzdm-io-affinity.ko.gzdm-crypt.ko.gz@@@5.apk.56543731d4de30d847945e5af904072a6f8954fc2b76dcbb@@5.apk.e2fa8710bc2e74fabc1ce78eaf522c66347f2cd1498dd358@ d5.apk.7af0afcd6b6d17f149fe28adf3959b6fbb6b2f8388cffd4f@"Ӱ@`'df5t@=@ Y/ ; .L.. dm-vdo.ko.gz 95dm-log-writes.ko.gz$dm-queue-length.ko.gzdm-delay.ko.gz( dm-era.ko.gzbcachedm-region-hash.ko.gzdm-thin-pool.ko.gzdm-unstripe.ko.gz dm-verity.ko.gz Tmd-cluster.ko.gz persistent-data dm-flakey.ko.gz0ɓ@B'͘@"Ӱ @@`'0@Odnƴ@f5@@=P@ Y/`d@ jք@@fޔ@2 ޱw  .L..dm-persistent-data.ko.gz ރ .a ..pvpanic 3Ϳ; . ..pvpanic-pci.ko.gz pvpanic.ko.gzpvpanic-mmio.ko.gz ]c .a ..chips! maps$mtd_blkdevs.ko.gz%mtdblock.ko.gz&parsers( ubi# mtd.ko.gz [ B . .. cfi_cmdset_0002.ko.gz cfi_cmdset_0020.ko.gzcfi_probe.ko.gzcfi_util.ko.gz chipreg.ko.gz 8gen_probe.ko.gzcfi_cmdset_0001.ko.gz b`w! .L.." physmap.ko.gz N& .L..' ofpart.ko.gz ޕ( .L..) ubi.ko.gz av* .a..{A٠ Pҏ, .*L..- bonding.ko.gz 8/ .* ..0amazon3google6intel=mellanoxD microsoft ԝ0 ./ ..1ena 21 .0L..2 ena.ko.gz [v3 ./ ..4gve Ř4 .3L..5 gve.ko.gz ދ6 ./ ..7e10009e1000e;ixgbevf m7 .6L..8 e1000.ko.gz ޸9 .6L..: e1000e.ko.gz X3; .6L..< ixgbevf.ko.gz Pp= ./ ..> mlx4Amlx5 4Z]> .= ..@ mlx4_en.ko.gz?\mlx4_core.ko.gz  A .= ..Bcore %C(B .AL..Cmlx5_core.ko.gz <4ufD ./ ..Emana EZE .DL..F mana.ko.gz ލQH .*L..Ihv_netvsc.ko.gz u?K .* ..M ipvtap.ko.gzL\ ipvlan.ko.gz pZQ .* ..Sfwnode_mdio.ko.gzT of_mdio.ko.gzRacpi_mdio.ko.gz xX .*L..Y ovpn.ko.gz މrXZ .* ..\fixed_phy.ko.gz] libphy.ko.gz^mdio-bus.ko.gz_mdio_devres.ko.gz[ dp83640.ko.gz >r` .* ..bppp_async.ko.gzcppp_deflate.ko.gzdppp_generic.ko.gzeppp_mppe.ko.gzfppp_synctty.ko.gzg pppox.ko.gzhh pptp.ko.gzabsd_comp.ko.gz ޏI0i .* ..k slip.ko.gzj\ slhc.ko.gz ${m .* ..o$team_mode_activebackup.ko.gzp$team_mode_broadcast.ko.gzq$team_mode_loadbalance.ko.gzr team_mode_random.ko.gzsteam_mode_roundrobin.ko.gzn\ team.ko.gz zH;,bondingG geneve.ko.gzJ ifb.ko.gzN macsec.ko.gzKipvlanO macvlan.ko.gzP macvtap.ko.gzUnet_failover.ko.gzV4netconsole.ko.gzQmdio` pppmteamwPvmxnet3zvxlanW@5.apk.2aec876951723dd494e9d9eee4e0f024e0bd259d5cfcbad4 ` ppp @m team@ul5.apk.072027d1b0440855206b0ff87ef421b48fdb279bc0e09a6e bRt tun.ko.gzu veth.ko.gzvvirtio_net.ko.gzW nlmon.ko.gzl tap.ko.gzy vrf.ko.gzX ovpni slipZLphyHPhyperv. dummy.ko.gz/Pethernet| wireguard+ bareudp.ko.gz  R`@ 9+ VR5j9l0@@<!R@s%zL ~@weP@A٠@Xp@U_³ [ʼ 2ʶ D@\86ɫ(@s_@fa}@ A(w .*L..x vmxnet3.ko.gz ޔjz .*L..{ vxlan.ko.gz /̥| .*L..}wireguard.ko.gz ދJ]~ .a ..virtio_pmem.ko.gz\nd_virtio.ko.gz g .a .. hosttarget 9‚ . ..nvme-fabrics.ko.gz nvme.ko.gznvme-core.ko.gz j*"z . ..nvmet-tcp.ko.gz nvmet.ko.gznvme-loop.ko.gz |% .aL..nvmem-rmem.ko.gz U .a .. controllerhotplugpci-stub.ko.gz8pci-pf-stub.ko.gz x . ..pci-hyperv.ko.gz\pci-hyperv-intf.ko.gz ޒ\ .L..acpiphp_ibm.ko.gz ޲I .aL..thunderx2_pmu.ko.gz +9ᾖ .a ..arm  .L..scpi_pm_domain.ko.gz ޻5! .aL..pps_core.ko.gz 6 .a .. ptp_kvm.ko.gzptp_vmclock.ko.gz ptp.ko.gz D(@"Ur5 -1jS-1j <BkS'En4jz;/}yߞhM?YW -1j @@ AɈy#H#)s I X ƹ i  Ա t    = -   bu! } "! R7 $]· {  Ss      3 .a ..rpmsg_ns.ko.gzvirtio_rpmsg_bus.ko.gzrpmsg_core.ko.gz g} .a ..rtc-ds1511.ko.gzrtc-ds1553.ko.gzrtc-ds1685.ko.gzrtc-ds1742.ko.gzrtc-ds2404.ko.gzrtc-m48t35.ko.gzrtc-m48t59.ko.gzrtc-msm6242.ko.gzrtc-rp5c01.ko.gzrtc-stk17ta8.ko.gzrtc-ds1286.ko.gz Kg .a..{  ޏ 2 .L.. efct.ko.gz YO湹 .L.. libsas.ko.gz sS .L.. mpi3mr.ko.gz h .a ..common core host monstorage $A .L..usb-common.ko.gz ^ae6 .L.. usbcore.ko.gz \c . ..ehci-pci.ko.gzehci-platform.ko.gzohci-hcd.ko.gzohci-pci.ko.gzohci-platform.ko.gzuhci-hcd.ko.gzxhci-hcd.ko.gzxhci-pci.ko.gzehci-hcd.ko.gz ޵Or .L.. usbmon.ko.gz DcA . ..usb-storage.ko.gz\ uas.ko.gz $'0 .a ..Pifcvf virtio_pcix vdpa.ko.gz 6 .L.. ifcvf.ko.gz މDž .L.. vp_vdpa.ko.gz nO1 .a ..vhost_iotlb.ko.gzvhost_net.ko.gzvhost_scsi.ko.gzvhost_vdpa.ko.gzvhost_vsock.ko.gz\ vhost.ko.gz G .a .. backlightfbdev "c .L..backlight.ko.gz T . ..core ޲ . ..fb_sys_fops.ko.gzsyscopyarea.ko.gzsysfillrect.ko.gzsysimgblt.ko.gzfb.ko.gz ގQ .a ..virtio_dma_buf.ko.gzvirtio_input.ko.gzvirtio_mem.ko.gzvirtio_mmio.ko.gzvirtio_vdpa.ko.gz\virtio_balloon.ko.gz " . .. 9pautofs/@ mbcache.ko.gzbtrfs cachefiles  ceph configfs cramfs dlmecryptfsefivarfserofsexfat ext4 f2fs fat! fuse% gfs2'isofs) jbd2+ jfs-Plockd0netfs2 nfs< nfs_common> nfsd@nilfs2B nlswntfs3yocfs2 overlayfspstorequotaromfs smbsquashfs udf xfs@binfmt_misc.ko.gz ": .L..9p.ko.gz T# .L.. autofs4.ko.gz  .L.. btrfs.ko.gz ޛ .L..cachefiles.ko.gz k  .L..  ceph.ko.gz   .L.. configfs.ko.gz ޽F  .L.. cramfs.ko.gz ݮ .L.. dlm.ko.gz z/ .L..ecryptfs.ko.gz ޸I- .L..efivarfs.ko.gz bsw .L.. erofs.ko.gz j .L.. exfat.ko.gz ô .L.. ext4.ko.gz hdc .L.. f2fs.ko.gz ؕELFP@@8 @@@@\\\00888HHH888$$PtdhhhTTQtdRtd888GNUhͅBڛ/lib/ld-musl-aarch64.so.1.@./ o"Jd ( ]jw)@B #~ EVO^ 4t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardmallocvsnprintfstderrfputsfreerealloc__stack_chk_failclose__errno_locationstrerrorfprintf_exitfopengetlinestrcmppipe2sigfillsetsigprocmaskforkelogdup2setuidexecvpsetgidwritereadwaitpidsetenvgetpwnamstrdupinitgroupssigemptysetsigaddsetsigwaitlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)px      (08 @!H"P#X$`%h&p'x()*+,-8{{_{6G9    :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> "R{ S *G[ k@O (!' qT@!0(`RGO@@BҀ Tb@@!(@XB) G@$ Ra@"R(ba@"R )]a@"R,)Xa@"R@)S`@a@Db@C!X) @"R (F**#R 6cDc@RcRc3c**RsQk@*{JSK[L_! 1|ЄGA@cGG@   @!@?T!Ga_@!@!"A !ABGb_{ `B@97G@G+ R`B9 @{¨_G@{!`+{{SG[ c k s  @7҉C#_)<<<===y?qTR_kTG@$A@_)A@<<<===WG@$ R!G7@"@c@TM{GSH[IcJkKsL_@7_{ ` @6ARrd%` 6t@sG`@!%3 Ru @{¨_r{C[*GSc*c@\'!&&!(h'7 CH T @"h`8_(qAT?h 8 @@9?q T*55RTR @^4!'8@Rc7###@RL* 6@RE @#@'@}{ywu@) 6@`R!'R!G@"@c TB<'5!R`R`71T1T*7@R * 6@3'@҇ R'@'#@CҒ4**RS@R1!TqR@sC*RA1T@?qT@q@{USV[WcX_{{_out of memory xasprintf: unable to format a buffer /dev/nullFailed to open /dev/null: %s/usr/libexec/rc/sh/openrc-user.sh start/usr/libexec/rc/sh/openrc-user.sh stop/bin/sh-c/etc/shells-%sdo_exec: %sopenrc-userEINFO_LOGInvalid usage. %s Invalid username %s.USERLOGNAMEHOMESHELLopenrc-user.%s;T 8lh80TTzRx 0,< @`A BTdD4DG@XAA"!B DD[ pA BX8XAB BDBC0<@ABBFxl  8@ox(  X 0  o$ #% H @openrc-user.debugX.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 8((@0 0 JB T ^ O d@@ jp2$$AxhhTp88@@HHXX  8 $ELF d@(@8 @@@@@l@l@l}}PHHH888$$Ptd\l\l\lQtdRtd  GNUF!ӵEv%(QT?@ABCDEFGHKLOPRSTUVWXYZ[\^`bcdfhijklmnopqrstuvwxyz{|}!@mwn.%~B#ҁcs}݁c{E3vg5k-q`  : zqPX#ب--F; ˏڡ] {a,IcA) c[i.:i̬b@xm XrP[YVDS`*w_tc^3\hTs稙kPkPlّOI2A{T]vǀ[c5<,!Qߠ~eoPL:<{C*uԕn1ffdaY5Ui="{,SL `# ]MI\ CbPO'zN&;pd   x:1 6 7 ' Clm W`0 \B" d H1L (@' M @8 L` BX tS|! 5= chw h7 AH [ XF  ;p LF v @l 5 ,  \(TS H6 `a _ 5  a` H0`_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize__deregister_frame_info__register_frame_info__errno_locationcap_set_syscallcap_get_boundsched_yieldcap_max_bitsstrlencallocstrcpycap_iab_initcap_iab_dupcap_new_launchercap_func_launchercap_freememsetcap_initcapgetcap_dupcapsetpsx_load_syscallscap_get_proc__stack_chk_guardcap_set_flagcap_clear_flag__stack_chk_failsetgidcap_set_proccapgetpcap_get_pidcapsetpcap_drop_boundcap_get_ambientcap_set_ambientcap_reset_ambientcap_get_secbitscap_set_secbitscap_prctlcap_prctlwcap_set_modecap_get_modecap_comparecap_setuidcap_setgroupscap_iab_get_proccap_iab_fillcap_iab_set_proccap_launcher_callbackcap_launcher_setuidcap_launcher_setgroupscap_launcher_set_modecap_launcher_set_iabcap_launcher_set_chrootcap_launchpipe2forkexitwriteexecvechdirwaitpidcap_sizecap_copy_extcap_copy_intmemcmpcap_copy_int_checkcap_get_flagcap_clearcap_fill_flagcap_fillcap_iab_get_vectorcap_iab_set_vectorcap_iab_comparetolowerisalnumstrtoulcap_from_textcap_from_namecap_to_nameasprintfcap_to_textsnprintfcap_mode_namecap_iab_to_textcap_iab_from_textcap_proc_rootcap_iab_get_pidfopenfclosestrncmpfgetscap_get_fdfgetxattrcap_get_filecap_get_nsownercap_set_fdfstatfremovexattrfsetxattrcap_set_filecap_set_nsownerreallocperrorfreadstrcmpputsputchar__execable_dl_loaderlibc.musl-aarch64.so.1libcap.so.2 &9PX`hOpxHA    R`Q }(a0L8@^HPXh`hp?xzlD !fy|"#I$ic%'()* +(,0-8.@/H0P1XX`2h3pTx_456789:;{{_{F"5    FB5 Fb5 F5 F5 F5 F5 F6 F"6 FB6 Fb6 F6 F6 F6 F6 F7 F"7 FB7 Fb7 F7 F7 F7 F7 G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> G> G> { `:@`: @{¨_{SГ[c#@ Rh7s@5RYR8u *6Qk-Ts4q Rs#@SA[BcC{Ũ_ְ3R  !?T!Ga_!!"A !ABGb_{ `@97G@G = R`9 @{¨_G@{ !=t{l@_{S 9RSA{¨_5A  @{¨_ {S@TR$ _5RBrkTTBpQkTBlkTb@RRB RW7`"@ `&@"@4SA{¨_`"@4&R_{ S zRSA{¨_ATR ra0t`@RrkTk`TfR3rkTo{SR@ra_?k TORSA{¨_W  R7TT} bT`z@`@zYXc@#4{ ?6K @{¨_*RRNЌ @ 4{@ ?6K @{¨_* 3{S _rQ@q TRSA{¨_  R7`a2B@"4@` Ҁ?Ѐ@@ UB@@_{ 0%4 @{¨_C{C[GS*#@R$R*RF@"s* 5@4@*@Ҁ?*6K@@WRG@@BT**#@*{ASB[CC_C{C[GSc*@R $R*RR*@@45@*Ҁ?*5@Ҁ?*6K1.R@08G@@BT{5**5k*{A*SB[CcDC_@{S!_*!rQ!@q TRSA{¨_ R 7t a2`N {S**4@@SA{è_{S!_*!rQ!@q TRSA{¨_ Rz 7t a2`AaB|@R|@@|{|@!R *6K* @{¨_{SR[@*Y1T`4SA[B{è҂iuRSA[B{è_{S[cks @B)C)* @s* @33 s*@"@4-*8R4Q~# @?j T*43R*5R S5I*5*5 |@9R*b4[QZ<#{ `@j!T5c $Rc*R*420*SA[BcCkDsE{ƨ_B*4`@j@T@*4{S[*f c $Rc*R*s*5qT(TQqTR)qAT@ҁҧ*!AR=R 75*5Ҡ@җ*qTR*6!R("ҟR**SA[B{è_@~@pa4?q`T{{R_bR|@B@@rBR@`R*@J@Z*@o{S[c4*R qTRSA[BcC{Ĩ_T@R**1ATq@zTU@T*ROM537srT@R5*1T5sR`R R*@g*@{S[+@ @SA[B{Ĩ_CR*h7R*4Q*~"I5a5 @* *qATu5@*{ _rQq TR @{¨_ R 7@[{S_rQq TRSA{¨_ Rw 7tR{S_*rQq TRSA{¨_ R] 7 R`R)R{S[ _**rQq@TRSA[B{è_֩ R> 7 R`R)v"uR{S_*rQq TkRSA{¨_֌ R! 7 R`R)R{S_rQq`TOR@SA{è_n R 7u@tUb R 7{S_rQq T*RSA{¨_K R 7`"R{SG[ck@ҳ`_rQqTRG@@BҠTZ! R 7`@@`&@``*@RCR`5*@5@RRRR!`@a@`&@R ?@4@*F6@,q T* R`@`5`@ 4c@b"@a@@P5`2@4a6@@@5a@y"@Y`Db.@a@@@ 4@@$4@R $R#*R.B@C*5@ 4D @`Ҁ?*6K@RB@x4o*5*@47@46@,qT*Rc@R@~@F{B*SC[DcEkF_֠_֠{ R@ra_?kT @{¨_V R 7_{SA!_R@r?kaTSR@SA{è_7 R 7rTR0Tb?T0TBT} RR2 r`R`9`s"A@8B#|S9#|S!|S9 9A@,9#|S89#|S!|SD9P9T{ !0Ғ4R8e@9ҊR H&|@R(*kTb|aB#bBD@9k@T+|ba!a!!@9 *kTK|a b"bBB@9@*kT"|A!a!!@9`*a}$i"H_ T T @{¨_*R*{?TR{_@9B BB|@_T{{@S[T*R@ra_?kTq*BBzTcR R 7~| !R@4! t @?jRSA[B{è_{S[ *R@ra_?kAT@Q*qT q*AzT2RU R7$Rzc?qT"|q @|"B@5b @ @! *@ ckTR@SA[B{Ĩ_{ _rQ@qTR ' R7`2|R @{¨_{S?qT_*rQ@qTR   R7tJ4RSA{¨_{S`a_RBr?kT__k@TR*@SA{è_փ Rv7eC)C)A)?kcA)kk!xS **B)`B)kk_k`***{S[*a_RBr?kT__k TRSA[B{è_֟ q*bBzTA R47J5tJ4@@~R* R_R@SA[B{Ĩ_{S`5R[@rc_kT** kmT5R~" R7qTqT qTtJ4@j^tJ4@tJ4@R{S[c@&RSA[BcC{Ĩ_*`5R@r_?k!T*CkT*kMT6R" R7qTqT qaTJ3q@ @6 * RJ3q @@6 * *J3q@6 *R{S[c#*RBr_?kT_!l_kTR#@*SA[BcC{Ũ_*qhT` Rt@7J4RqTq`T qT@` @a ` Rq2$ Azs9RT@`@a *`@ *`R{S`a_b5RBr?kT__k@TxR@*SA{è_ R*`7`d2R@"@k@D@*"@k#D@kctSb *T*TdvdQ*eR!H#H$C5_$_0@cQB$ "|#Ra B|@@A)?j?j@T2BB@?j@T2_{[Sjs84js8skk@Tjs8*@5~qSA[B{è_{CSG[@Ҁ@@9!Q?$qHTRKIT!G@"@cTP@q@!R(4sQZs@*{ASB[C_{S*!! š!Q5SA{¨_bQsjSkTsQk#*Z"{S[*Cӟ q,T*Ka"!4kTSA[B{è_R$h`8qTclSqTcQ  TzeJ!  z%qhTqiTc\QQB_qhTcQRR!G{S[c3"@ҠpR{@G@@BҀT@Rr?k`TBRr?kTfR3r?kTfURCR@8*qa&Q Dzᇟ)TC4S4*+*`5~q!Ts8R@ 9*X@@9?q T@9*5?q`T5R#1 T|#B|~jb*j"qRd@zT*6@R@9qT@9?q$BzT4?q R RQ2BRR~R (R $ ,`@9xA4$Q?qTsqTqTqT2q` TTqT@`@9qLz Tw4a@9c"2BQ_dqT*R x@4!$Q?qTv7RqBzT22qT*Rg*"Rb*BR]4qT76 *QLqT! (@6"@Qd_B*"D`5 *"@Qd_B*"D`56 *"@Qd_B*"D`56*R)6*"R#6*BR*3@{BSC[DcE_{ I1`TS`1 @Z{è_q!G{CS"@ДGT@@!@T!({ASB `*!'q T@@`@@T{ASB_{S[cksG@7!_R@r?kTR~*RkTRzsu?ksAT@c(#~tBĀ1T|@iT} *|~j`!j RR 5*k` Tv 4RR`8_kT@sj`T@9_qa T@9q T ?@c(#?~?t!s @KjT@B(#!"c~#t$!{s `TAR}Q*=kT*~@!G7C"@c Tva!?Tx @Ss pZbR5*~qT*#Ҡz{`4*R`8_q T@c~st!4(s `T{aT@`s*|~j`!j *kaT*@ a!?iT@s ZSA[BcCkDsE{ƨ_q TTqBT _ q@TqB p{S[ckG@Ҫ*_rQqT R7&R*(kT9~!GC"@cT"*" @@A @B@**jT ! B f5R84"Rb84 R`8?Tzy)T} 4R9dR9ĀҦq(T54SA[BcCkD{Ũ_{S[' '@@SA[B{Ũ_?qT?xq T?qaTs2'@95s2s2q#s<1T|"6J!b@B*b6J!b @B*b 6J!"@@* '@@9!4?qTRRR7R>)R{St:@``:SA{¨_!G{ CS [ c k"@G"8@bB *!8qLTGG@@B TX@!@)#bғ5/Ҏ5C`R*#aRrqT/z5C`R"R /n5C`2Rn~Rk@{ISJ[KcL_{@Re@?kT`R?kT R?kTB0Q$R4{_BPQDRa@B`Q$0gL$#@C&@Fe4c*C! B0?TqT  {S _rQ@q@TkR@SA{è_֋ R 7`@RrkTARrk@TfR3rkTQRRBR@R`&@@4a@ Rr?k)TR`R`&@`@b@DR*c2N$e@Ef@F4g@*'jTB c0_T@4!2RR!?"R`@_qTb@5b"@5b@$R4C{#*GS@*!'# qT G@@BTQF#@{BSCC_C{#GS@!' qTG@@BT$#@{BSCC_{ _rQ@q TR @{¨_ Re7`&@{ k!GS *"@W5;@  @qTR!GW@"@cҠT*!'3C5C*R!'k@{KSL_{[!GS"@wRl7**,Rrb*74*Gw@@BT;@  @qT*p;R*B8(Yq T.R*]!'[3C@5CR!'{O*SP[Q_{S_*rQ@q TRSA{¨_% R7t&RG_{!((S[ck+R,!|(A`)w R!ҟTj58 RT|@0@p)"_8_q`z8*Ta@-9?-5)kLT4`@tzuv4r5X-RA.i@5K*14.*.!Rq-T{#06R/{*wkaT@R_T000k*Ye^qTX-v  A9p4 8_* _05_{{_cap-launcher/all%ui=%s%s%s%s,%c%s%s%s-%s%s%s+%s%s%sNOPRIVPURE1E_INITPURE1EUNCERTAINHYBRIDUNKNOWN/proc%s/%d/statusCapInh: Bnd: Amb: cap_chowncap_dac_overridecap_dac_read_searchcap_fownercap_fsetidcap_killcap_setgidcap_setuidcap_setpcapcap_linux_immutablecap_net_bind_servicecap_net_broadcastcap_net_admincap_net_rawcap_ipc_lockcap_ipc_ownercap_sys_modulecap_sys_rawiocap_sys_chrootcap_sys_ptracecap_sys_pacctcap_sys_admincap_sys_bootcap_sys_nicecap_sys_resourcecap_sys_timecap_sys_tty_configcap_mknodcap_leasecap_audit_writecap_audit_controlcap_setfcapcap_mac_overridecap_mac_admincap_syslogcap_wake_alarmcap_block_suspendcap_audit_readcap_perfmoncap_bpfcap_checkpoint_restoresecurity.capability/proc/self/fd/%dThis libraryrb/proc/self/cmdlineunable to parse argumentsfailed to allocate memory for argv%s is the shared library version: libcap-2.78. See the License file for distribution information. More information on this library is available from: https://sites.google.com/site/fullycapable/ --usage--help usage: libcap.so [--help|--usage|--summary]--summary Current mode: %s Number of cap values known to: this libcap=%d, running kernel=%d => Consider upgrading libcap to name: %d=> Newer kernels also provide support for: %sQ/lib/ld-musl-aarch64.so.1;_,,@Pd P@Th о Ծ ؾ4@X|@`hDxXL8T($8L` $X 8 ,`  $ L ` , d d8 Ph 4 , `  d T  $ LP ,|  P0dP$t<$PtLDzRx d0,< @`A BTd4DG4$AP BEd A  $A BH A  0AJ$0A BN A $@TA0BDM h@A CK,B Bm A G$A DI A $4A BN A    4hD EI XlD CJ$|(A BM A  DA BM0TAPABDBJ0pAPABFQD$XtA BM A $d`A0BBR$|A BM A  LA GJ4A0BBO F E@T\A` C EV A ,A0CR A X\DC $8x$L0`A@DL A `\,`A@DN A lA BL A $@hA BM A $8lA BM A ,`A0CP A $lA BM A (\A0CO A $pA BM A < hApA BDCL8(`,\B BI A G(\<A0CQ A $l8A BE A (|HAG B G( A0Eg,8$A@Du hlA BW (xA BZ(|A0BBS A ,HA0BBS A  < C@EB@BF0` lDA@DI A 4 |LAP EX A , A0BBS A  P< xL($ pA0BCU(P A@ABDo$| hA BJ A , A0BBT A 4 ApC F @A0BL00 A0DBR A U A @d |A` G `F `< 0AP F iPE, (AP DK A , P,A BG P 0A BH4t AC Ef 0BS A ( A0CO A ( <APABDd($ APABDd P L`A BL A (t AABDn, 8lAABDR( thA BM A  ,A` J D8(& %$L&ggggggg hh!h5hJh\hjhvhhhhhhhhhhii i3i=iGiWiiiuiiiiiiiii  go`  8PH o$# %H0+,+0+,+GCC: (Alpine 15.2.0) 15.2.0.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.interp.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment 88$o``x( 0 08BBHHPL VG\$$(B bgghgg(p@l@lx\l\l`o`oXHHH88000P00LELF@@8 @@@@F F F p$p$p888$$Ptd` ` ` QtdRtdxxGNUOA>.z wO$! $%&'()*+,U{!w ν4byn2\4b8 :C"9AR )  +2 FKj Q HL 8 F e {" \D8  < $  @_init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize__deregister_frame_info__register_frame_infogetpidcallocsprintfpsx_load_syscallspsx_syscall3psx_syscall6atexitpthread_atforksched_yieldfree__psx_syscall__stack_chk_guard__errno_location__stack_chk_failmemsetstderrfprintfkillatoifputspsx_set_sensitivity__wrap_pthread_create__real_pthread_createfopenreallocperrorfclosefreadstrlen__execable_dl_loaderlibc.musl-aarch64.so.1libpsx.so.2 *'-!(      (+08@HPX`hpx !"#{{_{NGb:    RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB>  ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@vG R`"9 @{¨_G@{!@{{SuJ|@t"@ Ws! 9y@nSA{è_@BGG _M!\ _{SstB R97`@`5 R`"]|@@'`: R`z`B `F GB N R`SA{¨_\@_{ ssBN R7 @{¨_{ s`@5`R``:@G`F@E`@C @{¨{S*s*`@kT@tSA{è{ S[cksc-? *G  "H@Wc)c*O)qTRGWH@BҀ*TR!Ra75?`$` @ht5qaT? : qT6$qTqTq&`!R`0hXTR R#@AR[ Ry`RxD@B{s@=; G)7@ 3@uR@?1aT 7@@!\9@@`B@!RA)?@R+wB T3@TT_BT} kax_N Y|@;@UTH @Tz''@\aTB??@d?@Qx|@@@|@?@@D'@KT@C`D@| Ҁn"@@3@3@/@/_@B +@(TE@@TF@ {a&F@&F @& eh B@7@ *7?@/@4;a;@5 R;ul3@n@57@4c*@ 4G@9j@CD42@E!H:w;l;zlT!;|*@qT`B@!Rzc#@[@R@R`!:hF@~{A@h`T# @T"@Z c-SA[BcCkDsE{ʨ_%Dg҆{ b{B_'H{g#ҧ#R{C_{ q TUR @{¨_*h R {SsG[*`"@kaT`n@ 4 @1T`@?T`:@@c*SA[B{èdj@`CbD5@uF@aB@?4 `n@5`@Q`SA[B{èdEf2@SA[B{è_R_#Gc{[еGS@Ҡ"@:@Q|C` !}@h!Rҙ"@Bj@ `&_T@`TbBT} ԂBTBCTB^|@~ ==bTHTBTTB!`&҂@@a ``ҡ"@aAR[G@@B@Tg{CSD[E_ЄGХGaTG{@; R9{!< # May be distributed under GPL2 or MIT VERSION=3.22.0-r0 sysconfdir=/etc/lbu PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" LBU_LIST="${ROOT}etc/apk/protected_paths.d/lbu.list" DEFAULT_CIPHER="aes-256-cbc" LBU_CONF="${ROOT}$sysconfdir"/lbu.conf LBU_PREPACKAGE="${ROOT}$sysconfdir"/pre-package.d LBU_POSTPACKAGE="${ROOT}$sysconfdir"/post-package.d if [ -f "$LBU_CONF" ]; then . "$LBU_CONF" fi UMOUNT_LIST= usage() { cat <<-__EOF__ $PROGRAM $VERSION usage: $PROGRAM [options] [args] Available subcommands: commit (ci) diff exclude (ex, delete) include (inc, add) list (ls) list-backup (lb) package (pkg) revert status (stat, st) Common options: -h Show help for subcommand. -q Quiet mode. -v Verbose mode. __EOF__ exit $1 } cleanup() { local i for i in $REMOUNT_RO_LIST; do mount -o remount,ro $i done for i in $UMOUNT_LIST; do umount $i done } exit_clean() { cleanup exit 1 } # check if given dir is not a mounted mountpoint is_unmounted() { awk "\$2 == \"$1\" {exit 1}" /proc/mounts } mount_once() { if is_unmounted "$1"; then mount $1 && UMOUNT_LIST="$1 $UMOUNT_LIST" || return 1 fi } # check if given dir is read-only is_ro() { local tmpfile="$(mktemp -p "$1" 2>/dev/null)" [ -z "$tmpfile" ] && return 0 rm -f "$tmpfile" return 1 } mount_once_rw() { mount_once "$1" || return 1 if is_ro "$1"; then REMOUNT_RO_LIST="$1 $REMOUNT_RO_LIST" mount -o remount,rw "$1" fi } # create backupfile backup_apkovl() { local outfile="$1" local d="$( date -u -r "$outfile" "+%Y%m%d%H%M%S" )" local backup="$(echo "$outfile" | sed "s/\.apkovl\.tar\.gz/.$d.tar.gz/")" vecho "Creating backup $backup" if [ -z "$DRYRUN" ]; then mv "$outfile" "$backup" APKOVL_BACKUP="$backup" fi } restore_apkovl() { local outfile="$1" if [ -n "$DRYRUN" ] || [ -z "$APKOVL_BACKUP" ]; then return 0 fi mv "$APKOVL_BACKUP" "$outfile" } # verify we have openssl if we want to encrypt check_openssl() { [ -z "$ENCRYPTION" ] && return 0 OPENSSL=$(which openssl 2>/dev/null) || die "openssl was not found" $OPENSSL list -1 -cipher-commands | grep "^$ENCRYPTION$" > /dev/null \ || die "Cipher $ENCRYPTION is not supported" } # grep and sed has issues with escaping '*' in lists so we rather do # our own filter functions list_has() { local line= [ -e "$LBU_LIST" ] || return 1 while read line; do [ "$line" = "$1" ] && return 0 done < "$LBU_LIST" return 1 } list_filter_out() { local line= while read line; do if [ "$line" != "$1" ]; then echo "$line" fi done < "$LBU_LIST" } # list_add(char prefix, char *listfile, char* file...) list_add() { local prefix="$1" shift mkdir -p "${LBU_LIST%/*}" while [ $# -gt 0 ] ; do filename="$(echo "$1" | sed -E 's:^/+::')" if list_has "${prefix}${filename}"; then vecho "$filename is already in $LBU_LIST." else vecho "Adding $filename to $LBU_LIST." echo "${prefix}${filename}" >> "$LBU_LIST" fi shift done } # list_delete(char prefix, char *listfile, char *file...) list_delete() { local prefix="$1" local tmp="$LBU_LIST.new" shift [ -f "$LBU_LIST" ] || return 1 while [ $# -gt 0 ] ; do filename="$(echo "$1" | sed -E 's:^/+::')" if list_has "${prefix}${filename}"; then vecho "Removing $filename from $LBU_LIST." list_filter_out "${prefix}${filename}" > "$tmp" \ && mv "$tmp" "$LBU_LIST" else vecho "$filename is not in $LBU_LIST" fi shift done } # unpack archive on LBU_MEDIA to given dir unpack_apkovl() { local f="$(hostname).apkovl.tar.gz" local dest="$1" local mnt="${LBU_BACKUPDIR:-/media/$LBU_MEDIA}" local count=0 mkdir -p "$dest" if [ -n "$LBU_MEDIA" ]; then mount_once "$mnt" fi if [ -n "$ENCRYPTION" ]; then f="$f.$ENCRYPTION" fi if [ ! -f "$mnt/$f" ]; then return 1 fi if [ -z "$ENCRYPTION" ]; then tar -C "$dest" -zxf "$mnt/$f" return fi check_openssl while [ $count -lt 3 ]; do $OPENSSL enc -d -$ENCRYPTION -in "$mnt/$f" ${PASSWORD:+-k "$PASSWORD"} \ | tar -C "$dest" -zx 2>/dev/null && return 0 count=$(( $count + 1 )) done cleanup die "Failed to unpack $mnt/$f" } # # lbu_include - add/remove files to include list # usage_include() { cat <<-__EOF__ $PROGRAM $VERSION Add filename(s) to include list ($LBU_LIST) usage: $PROGRAM include|inc|add [-rv] ... $PROGRAM include|inc|add [-v] -l Options: -l List contents of include list. -r Remove specified file(s) from include list instead of adding. -v Verbose mode. __EOF__ exit $1 } cmd_include() { if [ "$LIST" ] ; then [ $# -gt 0 ] && usage_include "1" >&2 show_include return fi [ $# -lt 1 ] && usage_include "1" >&2 if [ "$REMOVE" ] ; then list_delete + "$@" else list_add + "$@" list_delete - "$@" fi } show_include() { if [ -f "$LBU_LIST" ] ; then vecho "Include files:" grep -- '^+' "$LBU_LIST" | sed 's/^+//' fi } # # lbu_package - create a package # usage_package() { cat <<-__EOF__ $PROGRAM $VERSION Create backup package. usage: $PROGRAM package|pkg -v [|] Options: -v Verbose mode. If is a directory, a package named .apkovl.tar.gz will be created in the specified directory. If is specified, and is not a directory, a package with the specified name willbe created. If nor is not specified, a package named .apkovl.tar.gz will be created in current work directory. __EOF__ exit $1 } _gen_filelist() { local line path rc tmpfile tmpfile=$(mktemp /tmp/$PROGRAM-filelist-${$}-XXXXXXXXXX) || return 1 apk audit --root ${ROOT:-/} --backup --quiet --recursive --check-permissions \ > "$tmpfile" || { rc=$? rm -f "$tmpfile" return $rc } if [ -f "$LBU_LIST" ]; then while IFS= read -r line || [ -n "$line" ]; do case "$line" in +*) line=${line#+} path="$ROOT$line" if [ -L "$path" ] || { [ ! -d "$path" ] && [ -e "$path" ]; }; then echo "$line" fi ;; esac done < "$LBU_LIST" >> "$tmpfile" fi awk '!seen[$0]++' "$tmpfile" rc=$? rm -f "$tmpfile" return $rc } cmd_package() { local pkg="$1" local rc=0 local owd="$PWD" local suff="apkovl.tar.gz" local tmpdir tmppkg check_openssl init_tmpdir tmpdir if [ -d "$LBU_PREPACKAGE" ]; then run-parts "$LBU_PREPACKAGE" >&2 || return 1 fi [ -n "$ENCRYPTION" ] && [ "x$pkg" != "x-" ] && suff="$suff.$ENCRYPTION" # find filename if [ -d "$pkg" ] ; then pkg="$pkg/$(hostname).$suff" elif [ -z "$pkg" ]; then pkg="$PWD/$(hostname).$suff" fi tmppkg="$tmpdir/$(basename $pkg)" local tar_create="tar -c --no-recursion -T -" cd_assert "${ROOT:-/}" # remove old package.list if [ -f etc/lbu/packages.list ] && [ -f var/lib/apk/world ]; then echo "Note: Removing /etc/lbu/packages.list." >&2 echo " /var/lib/apk/world will be used." >&2 rm -f etc/lbu/packages.list fi # create tar archive if [ -n "$VERBOSE" ]; then echo "Archiving the following files:" >&2 # we dont want to mess the tar output with the # password prompt. Lets get the tar output first. _gen_filelist | $tar_create -v > /dev/null rc=$? fi if [ $rc -eq 0 ]; then if [ -z "$ENCRYPTION" ] || [ "x$pkg" = "x-" ]; then _gen_filelist | $tar_create -z >"$tmppkg" rc=$? else set -- enc "-$ENCRYPTION" -salt [ -n "$PASSWORD" ] && set -- "$@" -pass pass:"$PASSWORD" _gen_filelist | $tar_create -z \ | $OPENSSL "$@" > "$tmppkg" rc=$? fi fi cd_assert "$owd" # actually commit unless dryrun mode if [ $rc -eq 0 ]; then if [ -z "$DRYRUN" ]; then if [ "x$pkg" = "x-" ]; then cat "$tmppkg" elif [ -b "$pkg" ] || [ -c "$pkg" ]; then cat "$tmppkg" > "$pkg" else if cp "$tmppkg" "$pkg.new"; then mv "$pkg.new" "$pkg" rc=$? else rm -f "$pkg.new" rc=1 fi fi fi [ $rc -eq 0 ] && vecho "Created $pkg" fi if [ -d "$LBU_POSTPACKAGE" ]; then run-parts "$LBU_POSTPACKAGE" >&2 fi return $rc } # # lbu list - list files that would go to archive # usage_list() { cat <<-__EOF__ $PROGRAM $VERSION Lists files that would go to tar package. Same as: 'lbu package -v /dev/null' usage: $PROGRAM list|ls __EOF__ exit $1 } cmd_list() { if [ "$1" = "-h" ]; then usage_list 0 fi _gen_filelist } # # lbu_commit - commit config files to writeable media # usage_commit() { cat <<-__EOF__ $PROGRAM $VERSION Create a backup of config to writeable media. usage: $PROGRAM commit|ci [-nv] [] Options: -d Remove old apk overlay files. -e Protect configuration with a password. -n Don't commit, just show what would have been commited. -p Give encryption password on the command-line -v Verbose mode. The following values for is supported: floppy usb If is not specified, the environment variable LBU_BACKUPDIR or LBU_MEDIA will be used. If LBU_BACKUPDIR is set, nothing will be mounted. Password protection will use $DEFAULT_CIPHER encryption. Other ciphers can be used by setting the DEFAULT_CIPHER or ENCRYPTION environment variables. For possible ciphers, try: openssl -v The password used to encrypt the file, can either be specified with the -p option or using the PASSWORD environment variable. The environment variables can also be set in $LBU_CONF __EOF__ exit $1 } cmd_commit() { local media mnt statuslist tmplist local incl excl outfile ovls lines check_openssl # turn on verbose mode if dryrun [ -n "$DRYRUN" ] && VERBOSE="-v" mnt="$LBU_BACKUPDIR" if [ -z "$mnt" ]; then # find what media to use media="${1:-$LBU_MEDIA}" [ -z "$media" ] && usage_commit "1" >&2 # mount media unless its already mounted mnt=/media/$media [ -d "$mnt" ] || usage "1" >&2 mount_once_rw "$mnt" || die "failed to mount $mnt" fi # find the outfile outfile="$mnt/$(hostname).apkovl.tar.gz" if [ -n "$ENCRYPTION" ]; then outfile="$outfile.$ENCRYPTION" fi # remove old config files if [ -n "$DELETEOLDCONFIGS" ] ; then local rmfiles="$(ls "$mnt/"*.apkovl.tar.gz* 2>/dev/null)" if [ -n "$rmfiles" ] ; then if [ -n "$VERBOSE" ]; then echo "Removing old apk overlay files:" >&2 echo "$rmfiles" echo "" >&2 fi [ -z "$DRYRUN" ] && rm "$mnt/"*.apkovl.tar.gz* fi else lines=$(ls -1 "$mnt"/*.apkovl.tar.gz* 2>/dev/null) if [ "$lines" = "$outfile" ]; then backup_apkovl "$outfile" elif [ -n "$lines" ]; then # More then one apkovl, this is a security concern cleanup eecho "The following apkovl file(s) were found:" eecho "$lines" eecho "" die "Please use -d to replace." fi fi # create package if ! cmd_package "$outfile"; then restore_apkovl "$outfile" cleanup die "Problems creating archive. aborting" fi # delete old backups if needed # poor mans 'head -n -N' done with awk. ls "$mnt"/$(hostname).[0-9][0-9][0-9][0-9]*[0-9].tar.gz* 2>/dev/null \ | awk '{ a[++i] = $0; } END { print a[0]; while (i-- > '"${BACKUP_LIMIT:-0}"') { print a[++j] } }' | xargs rm 2>/dev/null # remove obsolete file. some older version of alpine needs this # to be able to upgrade if [ -z "$DRYRUN" ] && [ -f $mnt/packages.list ]; then echo "Note: Removing packages.list from $(basename $mnt)." echo " /var/lib/apk/world will be used." rm -f $mnt/packages.list fi # make sure data is written sync [ "$media" = "floppy" ] && sleep 1 # move current to commited. vecho "Successfully saved apk overlay files" } #--------------------------------------------------------------------------- # lbu_exclude - add remove file(s) from exclude list usage_exclude() { cat <<-__EOF__ $PROGRAM $VERSION Add filename(s) to exclude list ($LBU_LIST) usage: $PROGRAM exclude|ex|delete [-rv] ... $PROGRAM exclude|ex|delete [-v] -l Options: -l List contents of exclude list. -r Remove specified file(s) from exclude list instead of adding. -v Verbose mode. __EOF__ exit $1 } cmd_exclude() { if [ "$LIST" ] ; then [ $# -gt 0 ] && usage_exclude "1" >&2 show_exclude return fi [ $# -lt 1 ] && usage_exclude "1" >&2 if [ "$REMOVE" ] ; then list_delete - "$@" else list_delete + "$@" list_add - "$@" fi } show_exclude() { if [ -f "$LBU_LIST" ] ; then vecho "Exclude files:" grep -- '^-' "$LBU_LIST" | sed 's/^-//' fi } #--------------------------------------------------------------------------- # lbu_listbackup - Show old commits usage_listbackup() { cat <<-__EOF__ $PROGRAM $VERSION Show old commits. usage: $PROGRAM list-backup [] __EOF__ exit $1 } cmd_listbackup() { local media="${1:-"$LBU_MEDIA"}" local mnt="${LBU_BACKUPDIR:-/media/$media}" [ -z "$media" ] && [ -z "$LBU_BACKUPDIR" ] && usage_listbackup 1 if [ -n "$media" ]; then mount_once "$mnt" || die "failed to mount $mnt" fi ls -1 "$mnt"/*.[0-9][0-9]*[0-9][0-9].tar.gz* 2>/dev/null | sed 's:.*/::' } #--------------------------------------------------------------------------- # lbu_revert - revert to old config usage_revert() { cat <<-__EOF__ $PROGRAM $VERSION Revert to older commit. usage: $PROGRAM revert [] The revision should be one of the files listed by 'lbu list-backup'. __EOF__ exit $1 } cmd_revert() { local mnt="${LBU_BACKUPDIR:-}" if [ -z "$mnt" ]; then local media="${2:-"$LBU_MEDIA"}" [ -z "$media" ] && usage_revert "1" >&2 mnt="/media/$media" mount_once_rw "$mnt" || die "failed to mount $mnt" fi local revertto="$mnt/$1" local current="$mnt/$(hostname).apkovl.tar.gz" if [ -n "$ENCRYPTION" ]; then current="$current.$ENCRYPTION" fi [ -f "$revertto" ] || die "file not found: $revertto" backup_apkovl "$current" vecho "Reverting to $1" [ -z "$DRYRUN" ] && mv "$revertto" "$current" } #--------------------------------------------------------------------------- # lbu_status - check what files have been changed since last save usage_status() { cat <<-__EOF__ $PROGRAM $VERSION Check what files have been changed since last commit. usage: $PROGRAM status|st [-av] Options: -a Compare all files, not just since last commit. -v Also show include and exclude lists. __EOF__ exit $1 } cmd_status() { if [ -n "$USE_DEFAULT" ]; then apk audit --backup return 0 fi LBU_MEDIA=${1:-"$LBU_MEDIA"} [ -z "$LBU_MEDIA" ] && [ -z "$LBU_BACKUPDIR" ] && usage_status local tmp init_tmpdir tmp mkdir -p "$tmp/a" "$tmp/b" # unpack last commited apkovl to tmpdir/a unpack_apkovl "$tmp/a" # generate new apkovl and extract to tmpdir/b cmd_package - | tar -C "$tmp/b" -zx # show files that exists in a but not in b as deleted local f ( cd_assert "$tmp"/a && find ) | while read f; do f=${f#./} local b="$tmp/b/$f" if [ "$f" = "." ] || [ -e "$b" ] || [ -L "$b" ]; then continue fi echo "D $f" done # compare files in b with files in a ( cd_assert "$tmp"/b && find ) | while read f; do f=${f#./} [ "$f" = "." ] && continue local a="$tmp/a/$f" local b="$tmp/b/$f" if [ ! -e "$a" ] && [ ! -L "$a" ]; then echo "A $f" elif [ -f "$a" ] && [ -f "$b" ] && [ "$b" -nt "$a" ] \ && ! cmp -s "$a" "$b"; then echo "U $f" fi done } #----------------------------------------------------------- # lbu_diff - run a diff against last commit usage_diff() { cat <<-__EOF__ $PROGRAM $VERSION Run a diff against last commit usage: $PROGRAM diff [] __EOF__ exit $1 } cmd_diff() { local diff_opts= LBU_MEDIA=${1:-"$LBU_MEDIA"} [ -z "$LBU_MEDIA" ] && [ -z "$LBU_BACKUPDIR" ] && usage_diff "1" >&2 local tmp init_tmpdir tmp mkdir -p "$tmp/a" "$tmp/b" unpack_apkovl "$tmp/a" cmd_package - | tar -C "$tmp/b" -zx if diff --help 2>&1 | grep -q -- --no-dereference; then diff_opts="--no-dereference" fi cd_assert "$tmp" && diff -ruN $diff_opts a b } #----------------------------------------------------------- # Main cmd=$(echo "$PROGRAM" | cut -s -d_ -f2) PROGRAM=$(echo "$PROGRAM" | cut -d_ -f1) if [ -z "$cmd" ] ; then cmd="$1" [ -z "$cmd" ] && usage "1" >&2 shift fi # check for valid sub command case "$cmd" in include|inc|add) SUBCMD="include";; commit|ci) SUBCMD="commit";; exclude|ex|delete) SUBCMD="exclude";; list|ls) SUBCMD="list";; package|pkg) SUBCMD="package";; status|stat|st) SUBCMD="status";; list-backup|lb) SUBCMD="listbackup";; revert) SUBCMD="revert";; diff) SUBCMD="diff";; -h) usage 0;; *) usage "1" >&2;; esac # parse common args while getopts "adehlM:np:qrv" opt ; do case "$opt" in a) [ $SUBCMD = status ] || usage_$SUBCMD USE_DEFAULT="-a" ;; d) DELETEOLDCONFIGS="yes" ;; e) [ -z "$ENCRYPTION" ] && ENCRYPTION="$DEFAULT_CIPHER" ;; h) usage_$SUBCMD 0 ;; l) LIST="-l" ;; n) [ $SUBCMD = commit ] || usage_$SUBCMD DRYRUN="-n" ;; p) PASSWORD="$OPTARG" ;; q) QUIET="$QUIET -q" ;; r) REMOVE="-r" ;; v) VERBOSE="$VERBOSE -v" ;; '?') usage_$SUBCMD "1" >&2 ;; esac done shift $(expr $OPTIND - 1) trap exit_clean INT TERM cmd_$SUBCMD "$@" retcode=$? cleanup exit $retcode ' .L..( isofs.ko.gz V) .L..* jbd2.ko.gz ޟ@> .L..? nfsd.ko.gz :"@@ .L..A nilfs2.ko.gz $*B ...{A7UԐW "S`Gmac-gaelic.ko.gzHmac-greek.ko.gzKmac-roman.ko.gzPnls_cp1251.ko.gzSnls_cp737.ko.gzUnls_cp850.ko.gzVnls_cp852.ko.gzWnls_cp855.ko.gzXnls_cp857.ko.gzYnls_cp860.ko.gzknls_iso8859-2.ko.gzlnls_iso8859-3.ko.gznnls_iso8859-5.ko.gz^nls_cp865.ko.gz2_nls_cp866.ko.gz4anls_cp874.ko.gz.apk.516e4fdba2747111eca0989b1630025024cd0ce4b94a672fi@5.apk.0b2e9299559504cfffa8fd2a0273a392979f1979c59d95a8t RsRnls_cp437.ko.gzc(nls_cp936.ko.gzNnls_ascii.ko.gzg(nls_iso8859-1.ko.gzEmac-croatian.ko.gzhnls_iso8859-13.ko.gzinls_iso8859-14.ko.gzu nls_ucs2_utils.ko.gz ަe`nls_cp869.ko.gze(nls_cp950.ko.gzOnls_cp1250.ko.gz[nls_cp862.ko.gz\nls_cp863.ko.gz]nls_cp864.ko.gzjnls_iso8859-15.ko.gzmnls_iso8859-4.ko.gzonls_iso8859-6.ko.gzqnls_iso8859-9.ko.gzs0nls_koi8-ru.ko.gzJmac-inuit.ko.gztnls_koi8-u.ko.gzDmac-centeuro.ko.gzzW@b ,@@`4@5P@A7p@)8@>edJ@]T@UtT[0@~^@d%c@Isi`@4 -Mmac-turkish.ko.gzTnls_cp775.ko.gzZnls_cp861.ko.gzdnls_cp949.ko.gzfnls_euc-jp.ko.gzImac-iceland.ko.gz :#}bnls_cp932.ko.gzpnls_iso8859-7.ko.gzrnls_koi8-r.ko.gzvnls_utf8.ko.gzCmac-celtic.ko.gzFmac-cyrillic.ko.gzLmac-romanian.ko.gzQnls_cp1255.ko.gzNk@. @C@zW@b , @H|{3@`4@50@A7@@ra7@)8p@Bt>edJ`@4N !x2 elxiscsi_tcp.ko.gzlibiscsi.ko.gzlibiscsi_tcp.ko.gzraid_class.ko.gzscsi_common.ko.gzlibsasmpi3mr$scsi_transport_iscsi.ko.gz scsi_transport_srp.ko.gz<virtio_scsi.ko.gzhv_storvsc.ko.gzscsi_mod.ko.gz scsi_transport_sas.ko.gzxscsi_transport_spi.ko.gz@5.apk.d5350458738ee124614d073cd3cc527e29a108fec050fb42@5.apk.a1780712fdfa46706d2ef6c41b99587228c8c8c28621fa78@5.apk.60c69c02c4128b5fe580833a75babb0677b0126933508976 ?c scsi_transport_fc.ko.gz sd_mod.ko.gzsg.ko.gz sr_mod.ko.gz  .aL..target_core_mod.ko.gz ޔ TU .aL..hisi_thermal.ko.gz iʙ .a .. hisilicon Hwu ... ޙg ...  .L..hi6220_reset.ko.gz ބ3root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin adm:x:4:root,daemon tty:x:5: disk:x:6:root lp:x:7:lp kmem:x:9: wheel:x:10:root floppy:x:11:root mail:x:12:mail news:x:13:news uucp:x:14:uucp cron:x:16:cron audio:x:18: cdrom:x:19: dialout:x:20:root ftp:x:21: sshd:x:22: input:x:23: tape:x:26:root video:x:27:root netdev:x:28: kvm:x:34:kvm games:x:35: shadow:x:42: www-data:x:82: users:x:100:games ntp:x:123: abuild:x:300: utmp:x:406: ping:x:999: nogroup:x:65533: nobody:x:65534: klogd:x:101:klogd chrony:x:102:chrony dhcpcd:x:103: root:x:0:0:root:/root:/bin/sh bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/mail:/sbin/nologin news:x:9:13:news:/usr/lib/news:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin cron:x:16:16:cron:/var/spool/cron:/sbin/nologin ftp:x:21:21::/var/lib/ftp:/sbin/nologin sshd:x:22:22:sshd:/dev/null:/sbin/nologin games:x:35:35:games:/usr/games:/sbin/nologin ntp:x:123:123:NTP:/var/empty:/sbin/nologin guest:x:405:100:guest:/dev/null:/sbin/nologin nobody:x:65534:65534:nobody:/:/sbin/nologin klogd:x:100:101:klogd:/dev/null:/sbin/nologin chrony:x:101:102:chrony:/dev/null:/sbin/nologin dhcpcd:x:102:103:dhcpcd:/var/lib/dhcpcd:/sbin/nologin root:::0::::: bin:!::0::::: daemon:!::0::::: lp:!::0::::: sync:!::0::::: shutdown:!::0::::: halt:!::0::::: mail:!::0::::: news:!::0::::: uucp:!::0::::: cron:!::0::::: ftp:!::0::::: sshd:!::0::::: games:!::0::::: ntp:!::0::::: guest:!::0::::: nobody:!::0::::: klogd:!:20620:0:99999:7::: chrony:!:20620:0:99999:7::: dhcpcd:!:20620:0:99999:7::: root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin adm:x:4:root,daemon tty:x:5: disk:x:6:root lp:x:7:lp kmem:x:9: wheel:x:10:root floppy:x:11:root mail:x:12:mail news:x:13:news uucp:x:14:uucp cron:x:16:cron audio:x:18: cdrom:x:19: dialout:x:20:root ftp:x:21: sshd:x:22: input:x:23: tape:x:26:root video:x:27:root netdev:x:28: kvm:x:34:kvm games:x:35: shadow:x:42: www-data:x:82: users:x:100:games ntp:x:123: abuild:x:300: utmp:x:406: ping:x:999: nogroup:x:65533: nobody:x:65534: klogd:x:101:klogd chrony:x:102:chrony dhcpcd:x:103:dhcpcd https://dl-cdn.alpinelinux.org/alpine/v3.24/main https://dl-cdn.alpinelinux.org/alpine/v3.24/community #https://dl-cdn.alpinelinux.org/alpine/v3.24/testing -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3v8/ye/V/t5xf4JiXLXa hWFRozsnmn3hobON20GdmkrzKzO/eUqPOKTpg2GtvBhK30fu5oY5uN2ORiv2Y2ht eLiZ9HVz3XP8Fm9frha60B7KNu66FO5P2o3i+E+DWTPqqPcCG6t4Znk2BypILcit wiPKTsgbBQR2qo/cO01eLLdt6oOzAaF94NH0656kvRewdo6HG4urbO46tCAizvCR CA7KGFMyad8WdKkTjxh8YLDLoOCtoZmXmQAiwfRe9pKXRH/XXGop8SYptLqyVVQ+ tegOD9wRs2tOlgcLx4F/uMzHN7uoho6okBPiifRX+Pf38Vx+ozXh056tjmdZkCaV aQIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0 XkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ piM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46 xLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP ODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM EyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr DzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+ f53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF HwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk Ok9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6 9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT JZDr++FjKrnnijbyNF8b98UCAwEAAQ== -----END PUBLIC KEY----- Running `apk --root /mnt --initdb --no-cache add alpine-base linux-virt chrony e2fsprogs openssh tzdata doas dhcpcd mount nvme-cli dosfstools tiny-cloud` at 2026-06-16 21:16:29 apk-tools 3.0.6-r0, compiled for aarch64. ( 1/77) Installing alpine-baselayout-data (3.7.2-r1) ( 2/77) Installing musl (1.2.6-r2) ( 3/77) Installing busybox (1.37.0-r31) Executing busybox-1.37.0-r31.post-install ( 4/77) Installing busybox-binsh (1.37.0-r31) ( 5/77) Installing alpine-baselayout (3.7.2-r1) Executing alpine-baselayout-3.7.2-r1.pre-install Executing alpine-baselayout-3.7.2-r1.post-install ( 6/77) Installing bridge (1.5-r5) ( 7/77) Installing ifupdown-ng (0.13.0-r0) ( 8/77) Installing openrc-user (0.63.2-r0) ( 9/77) Installing libcap2 (2.78-r0) (10/77) Installing openrc (0.63.2-r0) Executing openrc-0.63.2-r0.post-install (11/77) Installing mdev-conf (4.10-r0) (12/77) Installing busybox-mdev-openrc (1.37.0-r31) (13/77) Installing alpine-conf (3.22.0-r0) (14/77) Installing alpine-keys (2.6-r0) (15/77) Installing alpine-release (3.24.1-r0) (16/77) Installing libcrypto3 (3.5.7-r0) (17/77) Installing libssl3 (3.5.7-r0) (18/77) Installing ssl_client (1.37.0-r31) (19/77) Installing zlib (1.3.2-r0) (20/77) Installing libapk (3.0.6-r0) (21/77) Installing ca-certificates-bundle (20260611-r0) (22/77) Installing apk-tools (3.0.6-r0) (23/77) Installing busybox-openrc (1.37.0-r31) (24/77) Installing busybox-suid (1.37.0-r31) (25/77) Installing scanelf (1.3.9-r1) (26/77) Installing musl-utils (1.2.6-r2) (27/77) Installing alpine-base (3.24.1-r0) (28/77) Installing chrony-common (4.8-r7) Executing chrony-common-4.8-r7.pre-install (29/77) Installing libseccomp (2.6.0-r2) (30/77) Installing chrony (4.8-r7) (31/77) Installing chrony-openrc (4.8-r7) (32/77) Installing dhcpcd (10.3.2-r0) Executing dhcpcd-10.3.2-r0.pre-install (33/77) Installing dhcpcd-openrc (10.3.2-r0) (34/77) Installing doas (6.8.2-r8) (35/77) Installing dosfstools (4.2-r2) (36/77) Installing libeconf (0.8.3-r0) (37/77) Installing libblkid (2.42-r0) (38/77) Installing libcom_err (1.47.4-r0) (39/77) Installing e2fsprogs-libs (1.47.4-r0) (40/77) Installing libuuid (2.42-r0) (41/77) Installing e2fsprogs (1.47.4-r0) (42/77) Installing xz-libs (5.8.3-r0) (43/77) Installing zstd-libs (1.5.7-r2) (44/77) Installing kmod (34.2-r1) (45/77) Installing lddtree (1.27-r0) (46/77) Installing device-mapper-libs (2.03.35-r2) (47/77) Installing json-c (0.18-r1) (48/77) Installing cryptsetup-libs (2.8.6-r0) (49/77) Installing kmod-libs (34.2-r1) (50/77) Installing mkinitfs (3.14.0-r0) Executing mkinitfs-3.14.0-r0.post-install (51/77) Installing linux-virt (6.18.35-r0) (52/77) Installing libmount (2.42-r0) (53/77) Installing mount (2.42-r0) (54/77) Installing libnvmemi (1.16.1-r1) (55/77) Installing libnvme (1.16.1-r1) (56/77) Installing nvme-cli (2.16-r1) (57/77) Installing openssh-keygen (10.3_p1-r0) (58/77) Installing ncurses-terminfo-base (6.6_p20260516-r0) (59/77) Installing libncursesw (6.6_p20260516-r0) (60/77) Installing libedit (20260508.3.1-r1) (61/77) Installing openssh-client-/dev/cdrom /media/cdrom iso9660 noauto,ro 0 0 /dev/usbdisk /media/usb vfat noauto,ro 0 0 localhost 127.0.0.1 localhost localhost.localdomain ::1 localhost localhost.localdomain # /etc/inittab ::sysinit:/sbin/openrc sysinit ::sysinit:/sbin/openrc boot ::wait:/sbin/openrc default # Set up a couple of getty's tty1::respawn:/sbin/getty 38400 tty1 tty2::respawn:/sbin/getty 38400 tty2 tty3::respawn:/sbin/getty 38400 tty3 tty4::respawn:/sbin/getty 38400 tty4 tty5::respawn:/sbin/getty 38400 tty5 tty6::respawn:/sbin/getty 38400 tty6 # Put a getty on the serial port #ttyS0::respawn:/sbin/getty -L 115200 ttyS0 vt100 # Stuff to do for the 3-finger salute ::ctrlaltdel:/sbin/reboot # Stuff to do before rebooting ::shutdown:/sbin/openrc shutdown af_packet ipv6 # musl itself does not support NSS, however some third-party DNS # implementations use the nsswitch.conf file to determine what # policy to follow. # Editing this file is not recommended. hosts: files dns export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" export PAGER=less umask 022 # use nicer PS1 for bash and busybox ash if [ -n "$BASH_VERSION" -o "$BB_ASH_VERSION" ]; then PS1='\h:\w\$ ' # use nicer PS1 for zsh elif [ -n "$ZSH_VERSION" ]; then PS1='%m:%~%# ' # set up fallback default PS1 else : "${HOSTNAME:=$(hostname)}" PS1='${HOSTNAME%%.*}:$PWD' [ "$(id -u)" -eq 0 ] && PS1="${PS1}# " || PS1="${PS1}\$ " fi for script in /etc/profile.d/*.sh ; do if [ -r "$script" ] ; then . "$script" fi done unset script # Internet (IP) protocols # # Updated from http://www.iana.org/assignments/protocol-numbers and other # sources. # New protocols will be added on request if they have been officially # assigned by IANA and are not historical. # If you need a huge list of used numbers please install the nmap package. ip 0 IP # internet protocol, pseudo protocol number hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883] icmp 1 ICMP # internet control message protocol igmp 2 IGMP # Internet Group Management ggp 3 GGP # gateway-gateway protocol ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'') st 5 ST # ST datagram mode tcp 6 TCP # transmission control protocol egp 8 EGP # exterior gateway protocol igp 9 IGP # any private interior gateway (Cisco) pup 12 PUP # PARC universal packet protocol udp 17 UDP # user datagram protocol hmp 20 HMP # host monitoring protocol xns-idp 22 XNS-IDP # Xerox NS IDP rdp 27 RDP # "reliable datagram" protocol iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4 [RFC905] dccp 33 DCCP # Datagram Congestion Control Prot. [RFC4340] xtp 36 XTP # Xpress Transfer Protocol ddp 37 DDP # Datagram Delivery Protocol idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport ipv6 41 IPv6 # Internet Protocol, version 6 ipv6-route 43 IPv6-Route # Routing Header for IPv6 ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6 idrp 45 IDRP # Inter-Domain Routing Protocol rsvp 46 RSVP # Reservation Protocol gre 47 GRE # General Routing Encapsulation esp 50 IPSEC-ESP # Encap Security Payload [RFC2406] ah 51 IPSEC-AH # Authentication Header [RFC2402] skip 57 SKIP # SKIP ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6 ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6 ipv6-opts 60 IPv6-Opts # Destination Options for IPv6 rspf 73 RSPF CPHB # Radio Shortest Path First (officially CPHB) vmtp 81 VMTP # Versatile Message Transport eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco) ospf 89 OSPFIGP # Open Shortest Path First IGP ax.25 93 AX.25 # AX.25 frames ipip 94 IPIP # IP-within-IP Encapsulation Protocol etherip 97 ETHERIP # Ethernet-within-IP Encapsulation [RFC3378] encap 98 ENCAP # Yet Another IP encapsulation [RFC1241] # 99 # any private encryption scheme pim 103 PIM # Protocol Independent Multicast ipcomp 108 IPCOMP # IP Payload Compression Protocol vrrp 112 VRRP # Virtual Router Redundancy Protocol [RFC5798] l2tp 115 L2TP # Layer Two Tunneling Protocol [RFC2661] isis 124 ISIS # IS-IS over IPv4 sctp 132 SCTP # Stream Control Transmission Protocol fc 133 FC # Fibre Channel mobility-header 135 Mobility-Header # Mobility Support for IPv6 [RFC3775] udplite 136 UDPLite # UDP-Lite [RFC3828] mpls-in-ip 137 MPLS-in-IP # MPLS-in-IP [RFC4023] manet 138 # MANET Protocols [RFC5498] hip 139 HIP # Host Identity Protocol shim6 140 Shim6 # Shim6 Protocol [RFC5533] wesp 141 WESP # Wrapped Encapsulating Security Payload rohc 142 ROHC # Robust Header Compression ethernet 143 Ethernet # Ethernet encapsulation for SRv6 [RFC8986] # The following entries have not been assigned by IANA but are used # internally by the Linux kernel. mptcp 262 MPTCP # Multipath TCP connection # Network services, Internet style # # Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml . # # New ports will be added on request if they have been officially assigned # by IANA and used in the real-world or are needed by a debian package. # If you need a huge list of used numbers please install the nmap package. tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp-data 20/tcp ftp 21/tcp fsp 21/udp fspd ssh 22/tcp # SSH Remote Login Protocol telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver time 37/udp timserver whois 43/tcp nicname tacacs 49/tcp # Login Host Protocol (TACACS) tacacs 49/udp domain 53/tcp # Domain Name Server domain 53/udp bootps 67/udp bootpc 68/udp tftp 69/udp gopher 70/tcp # Internet Gopher finger 79/tcp http 80/tcp www # WorldWideWeb HTTP kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5 kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5 iso-tsap 102/tcp tsap # part of ISODE acr-nema 104/tcp dicom # Digital Imag. & Comm. 300 pop3 110/tcp pop-3 # POP version 3 sunrpc 111/tcp portmapper # RPC 4.0 portmapper sunrpc 111/udp portmapper auth 113/tcp authentication tap ident nntp 119/tcp readnews untp # USENET News Transfer Protocol ntp 123/udp # Network Time Protocol epmap 135/tcp loc-srv # DCE endpoint resolution netbios-ns 137/udp # NETBIOS Name Service netbios-dgm 138/udp # NETBIOS Datagram Service netbios-ssn 139/tcp # NETBIOS session service imap2 143/tcp imap # Interim Mail Access P 2 and 4 snmp 161/tcp # Simple Net Mgmt Protocol snmp 161/udp snmp-trap 162/tcp snmptrap # Traps for SNMP snmp-trap 162/udp snmptrap cmip-man 163/tcp # ISO mgmt over IP (CMOT) cmip-man 163/udp cmip-agent 164/tcp cmip-agent 164/udp mailq 174/tcp # Mailer transport queue for Zmailer xdmcp 177/udp # X Display Manager Control Protocol bgp 179/tcp # Border Gateway Protocol smux 199/tcp # SNMP Unix Multiplexer qmtp 209/tcp # Quick Mail Transfer Protocol z3950 210/tcp wais # NISO Z39.50 database ipx 213/udp # IPX [RFC1234] ptp-event 319/udp ptp-general 320/udp pawserv 345/tcp # Perf Analysis Workbench zserv 346/tcp # Zebra server rpc2portmap 369/tcp rpc2portmap 369/udp # Coda portmapper codaauth2 370/tcp codaauth2 370/udp # Coda authentication server clearcase 371/udp Clearcase ldap 389/tcp # Lightweight Directory Access Protocol ldap 389/udp svrloc 427/tcp # Server Location svrloc 427/udp https 443/tcp # http protocol over TLS/SSL https 443/udp # HTTP/3 snpp 444/tcp # Simple Network Paging Protocol microsoft-ds 445/tcp # Microsoft Naked CIFS kpasswd 464/tcp kpasswd 464/udp submissions 465/tcp ssmtp smtps urd # Submission over TLS [RFC8314] saft 487/tcp # Simple Asynchronous File Transfer isakmp 500/udp # IPSEC key management rtsp 554/tcp # Real Time Stream Control Protocol rtsp 554/udp nqs 607/tcp # Network Queuing system asf-rmcp 623/udp # ASF Remote Management and Control Protocol qmqp 628/tcp ipp 631/tcp # Internet Printing Protocol ldp 646/tcp # Label Distribution Protocol ldp 646/udp # # UNIX specific services # exec 512/tcp biff 512/udp comsat login 513/tcp who 513/udp whod shell 514/tcp cmd syslog # no passwords used syslog 514/udp printer 515/tcp spooler # line printer spooler talk 517/udp ntalk 518/udp route 520/udp router routed # RIP gdomap 538/tcp # GNUstep distributed objects gdomap 538/udp uucp 540/tcp uucpd # uucp daemon klogin 543/tcp # Kerberized `rlogin' (v5) kshell 544/tcp krcmd # Kerberized `rsh' (v5) dhcpv6-client 546/udp dhcpv6-server 547/udp afpovertcp 548/tcp # AFP over TCP nntps 563/tcp snntp # NNTP over SSL submission 587/tcp # Submission [RFC4409] ldaps 636/tcp # LDAP over SSL ldaps 636/udp tinc 655/tcp # tinc control port tinc 655/udp silc 706/tcp kerberos-adm 749/tcp # Kerberos `kadmin' (v5) # domain-s 853/tcp # DNS over TLS [RFC7858] domain-s 853/udp # DNS over DTLS [RFC8094] rsync 873/tcp ftps-data 989/tcp # FTP over SSL (data) ftps 990/tcp telnets 992/tcp # Telnet over SSL imaps 993/tcp # IMAP over SSL pop3s 995/tcp # POP-3 over SSL # # From ``Assigned Numbers'': # #> The Registered Ports are not controlled by the IANA and on most systems #> can be used by ordinary user processes or programs executed by ordinary #> users. # #> Ports are used in the TCP [45,106] to name the ends of logical #> connections which carry long term conversations. For the purpose of #> providing services to unknown callers, a service contact port is #> defined. This list specifies the port used by the server process as its #> contact port. While the IANA can not control uses of these ports it #> does register or list uses of these ports as a convienence to the #> community. # socks 1080/tcp # socks proxy server proofd 1093/tcp rootd 1094/tcp openvpn 1194/tcp openvpn 1194/udp rmiregistry 1099/tcp # Java RMI Registry lotusnote 1352/tcp lotusnotes # Lotus Note ms-sql-s 1433/tcp # Microsoft SQL Server ms-sql-m 1434/udp # Microsoft SQL Monitor ingreslock 1524/tcp datametrics 1645/tcp old-radius datametrics 1645/udp old-radius sa-msg-port 1646/tcp old-radacct sa-msg-port 1646/udp old-radacct kermit 1649/tcp groupwise 1677/tcp l2f 1701/udp l2tp radius 1812/tcp radius 1812/udp radius-acct 1813/tcp radacct # Radius Accounting radius-acct 1813/udp radacct cisco-sccp 2000/tcp # Cisco SCCP nfs 2049/tcp # Network File System nfs 2049/udp # Network File System gnunet 2086/tcp gnunet 2086/udp rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99 rtcm-sc104 2101/udp gsigatekeeper 2119/tcp gris 2135/tcp # Grid Resource Information Server cvspserver 2401/tcp # CVS client/server operations venus 2430/tcp # codacon port venus 2430/udp # Venus callback/wbc interface venus-se 2431/tcp # tcp side effects venus-se 2431/udp # udp sftp side effect codasrv 2432/tcp # not used codasrv 2432/udp # server port codasrv-se 2433/tcp # tcp side effects codasrv-se 2433/udp # udp sftp side effect mon 2583/tcp # MON traps mon 2583/udp dict 2628/tcp # Dictionary server f5-globalsite 2792/tcp gsiftp 2811/tcp gpsd 2947/tcp gds-db 3050/tcp gds_db # InterBase server icpv2 3130/udp icp # Internet Cache Protocol isns 3205/tcp # iSNS Server Port isns 3205/udp # iSNS Server Port iscsi-target 3260/tcp mysql 3306/tcp ms-wbt-server 3389/tcp nut 3493/tcp # Network UPS Tools nut 3493/udp distcc 3632/tcp # distributed compiler daap 3689/tcp # Digital Audio Access Protocol svn 3690/tcp subversion # Subversion protocol suucp 4031/tcp # UUCP over SSL sysrqd 4094/tcp # sysrq daemon sieve 4190/tcp # ManageSieve Protocol epmd 4369/tcp # Erlang Port Mapper Daemon remctl 4373/tcp # Remote Authenticated Command Service f5-iquery 4353/tcp # F5 iQuery ntske 4460/tcp # Network Time Security Key Establishment ipsec-nat-t 4500/udp # IPsec NAT-Traversal [RFC3947] iax 4569/udp # Inter-Asterisk eXchange mtn 4691/tcp # monotone Netsync Protocol radmin-port 4899/tcp # RAdmin Port sip 5060/tcp # Session Initiation Protocol sip 5060/udp sip-tls 5061/tcp sip-tls 5061/udp xmpp-client 5222/tcp jabber-client # Jabber Client Connection xmpp-server 5269/tcp jabber-server # Jabber Server Connection cfengine 5308/tcp mdns 5353/udp # Multicast DNS postgresql 5432/tcp postgres # PostgreSQL Database freeciv 5556/tcp rptp # Freeciv gameplay amqps 5671/tcp # AMQP protocol over TLS/SSL amqp 5672/tcp amqp 5672/sctp x11 6000/tcp x11-0 # X Window System x11-1 6001/tcp x11-2 6002/tcp x11-3 6003/tcp x11-4 6004/tcp x11-5 6005/tcp x11-6 6006/tcp x11-7 6007/tcp gnutella-svc 6346/tcp # gnutella gnutella-svc 6346/udp gnutella-rtr 6347/tcp # gnutella gnutella-rtr 6347/udp redis 6379/tcp sge-qmaster 6444/tcp sge_qmaster # Grid Engine Qmaster Service sge-execd 6445/tcp sge_execd # Grid Engine Execution Service mysql-proxy 6446/tcp # MySQL Proxy babel 6696/udp # Babel Routing Protocol ircs-u 6697/tcp # Internet Relay Chat via TLS/SSL bbs 7000/tcp afs3-fileserver 7000/udp afs3-callback 7001/udp # callbacks to cache managers afs3-prserver 7002/udp # users & groups database afs3-vlserver 7003/udp # volume location database afs3-kaserver 7004/udp # AFS/Kerberos authentication afs3-volser 7005/udp # volume managment server afs3-bos 7007/udp # basic overseer process afs3-update 7008/udp # server-to-server updater afs3-rmtsys 7009/udp # remote cache manager service font-service 7100/tcp xfs # X Font Service http-alt 8080/tcp webcache # WWW caching service puppet 8140/tcp # The Puppet master service bacula-dir 9101/tcp # Bacula Director bacula-fd 9102/tcp # Bacula File Daemon bacula-sd 9103/tcp # Bacula Storage Daemon xmms2 9667/tcp # Cross-platform Music Multiplexing System nbd 10809/tcp # Linux Network Block Device zabbix-agent 10050/tcp # Zabbix Agent zabbix-trapper 10051/tcp # Zabbix Trapper amanda 10080/tcp # amanda backup services dicom 11112/tcp hkp 11371/tcp # OpenPGP HTTP Keyserver db-lsp 17500/tcp # Dropbox LanSync Protocol dcap 22125/tcp # dCache Access Protocol gsidcap 22128/tcp # GSI dCache Access Protocol wnn6 22273/tcp # wnn6 # # Datagram Delivery Protocol services # rtmp 1/ddp # Routing Table Maintenance Protocol nbp 2/ddp # Name Binding Protocol echo 4/ddp # AppleTalk Echo Protocol zip 6/ddp # Zone Information Protocol #========================================================================= # The remaining port numbers are not as allocated by IANA. #========================================================================= # Kerberos (Project Athena/MIT) services kerberos4 750/udp kerberos-iv kdc # Kerberos (server) kerberos4 750/tcp kerberos-iv kdc kerberos-master 751/udp kerberos_master # Kerberos authentication kerberos-master 751/tcp passwd-server 752/udp passwd_server # Kerberos passwd server krb-prop 754/tcp krb_prop krb5_prop hprop # Kerberos slave propagation zephyr-srv 2102/udp # Zephyr server zephyr-clt 2103/udp # Zephyr serv-hm connection zephyr-hm 2104/udp # Zephyr hostmanager iprop 2121/tcp # incremental propagation supfilesrv 871/tcp # Software Upgrade Protocol server supfiledbg 1127/tcp # Software Upgrade Protocol debugging # # Services added for the Debian GNU/Linux distribution # poppassd 106/tcp # Eudora moira-db 775/tcp moira_db # Moira database moira-update 777/tcp moira_update # Moira update protocol moira-ureg 779/udp moira_ureg # Moira user registration spamd 783/tcp # spamassassin daemon skkserv 1178/tcp # skk jisho server port predict 1210/udp # predict -- satellite tracking rmtcfg 1236/tcp # Gracilis Packeten remote config server xtel 1313/tcp # french minitel xtelw 1314/tcp # french minitel zebrasrv 2600/tcp # zebra service zebra 2601/tcp # zebra vty ripd 2602/tcp # ripd vty (zebra) ripngd 2603/tcp # ripngd vty (zebra) ospfd 2604/tcp # ospfd vty (zebra) bgpd 2605/tcp # bgpd vty (zebra) ospf6d 2606/tcp # ospf6d vty (zebra) ospfapi 2607/tcp # OSPF-API isisd 2608/tcp # ISISd vty (zebra) fax 4557/tcp # FAX transmission service (old) hylafax 4559/tcp # HylaFAX client-server protocol (new) munin 4949/tcp lrrd # Munin rplay 5555/udp # RPlay audio service nrpe 5666/tcp # Nagios Remote Plugin Executor nsca 5667/tcp # Nagios Agent - NSCA canna 5680/tcp # cannaserver syslog-tls 6514/tcp # Syslog over TLS [RFC5425] sane-port 6566/tcp sane saned # SANE network scanner daemon ircd 6667/tcp # Internet Relay Chat zope-ftp 8021/tcp # zope management by ftp tproxy 8081/tcp # Transparent Proxy omniorb 8088/tcp # OmniORB clc-build-daemon 8990/tcp # Common lisp build daemon xinetd 9098/tcp git 9418/tcp # Git Version Control System zope 9673/tcp # zope server webmin 10000/tcp kamanda 10081/tcp # amanda backup services (Kerberos) amandaidx 10082/tcp # amanda backup services amidxtape 10083/tcp # amanda backup services sgi-cmsd 17001/udp # Cluster membership services daemon sgi-crsd 17002/udp sgi-gcd 17003/udp # SGI Group membership daemon sgi-cad 17004/tcp # Cluster Admin daemon binkp 24554/tcp # binkp fidonet protocol asp 27374/tcp # Address Search Protocol asp 27374/udp csync2 30865/tcp # cluster synchronization tool dircproxy 57000/tcp # Detachable IRC Proxy tfido 60177/tcp # fidonet EMSI over telnet fido 60179/tcp # fidonet EMSI over TCP # Local services # valid login shells /bin/sh /bin/ash # content of this file will override /etc/sysctl.d/* usr/bin/[ usr/bin/[[ sbin/acpid usr/sbin/add-shell usr/sbin/addgroup usr/sbin/adduser sbin/adjtimex bin/arch sbin/arp usr/sbin/arping bin/ash usr/bin/awk bin/base64 usr/bin/basename bin/bbconfig usr/bin/bc usr/bin/beep sbin/blkdiscard sbin/blkid sbin/blockdev usr/sbin/brctl usr/bin/bunzip2 usr/bin/bzcat usr/bin/bzip2 usr/bin/cal bin/cat bin/chattr bin/chgrp bin/chmod bin/chown usr/sbin/chpasswd usr/sbin/chroot usr/bin/chvt usr/bin/cksum usr/bin/clear usr/bin/cmp usr/bin/comm bin/cp usr/bin/cpio usr/sbin/crond usr/bin/crontab usr/bin/cryptpw usr/bin/cut bin/date usr/bin/dc bin/dd usr/bin/deallocvt usr/sbin/delgroup usr/sbin/deluser sbin/depmod bin/df usr/bin/diff usr/bin/dirname bin/dmesg bin/dnsdomainname usr/bin/dos2unix usr/bin/du bin/dumpkmap bin/echo bin/egrep usr/bin/eject usr/bin/env usr/sbin/ether-wake usr/bin/expand usr/bin/expr usr/bin/factor usr/bin/fallocate bin/false bin/fatattr usr/sbin/fbset sbin/fbsplash bin/fdflush sbin/fdisk bin/fgrep usr/bin/find sbin/findfs usr/bin/flock usr/bin/fold usr/bin/free sbin/fsck sbin/fstrim bin/fsync usr/bin/fuser bin/getopt sbin/getty bin/grep usr/bin/groups bin/gunzip bin/gzip sbin/halt usr/bin/hd usr/bin/head usr/bin/hexdump usr/bin/hostid bin/hostname sbin/hwclock usr/bin/id sbin/ifconfig sbin/ifdown sbin/ifenslave sbin/ifup sbin/init sbin/inotifyd sbin/insmod usr/bin/install bin/ionice bin/iostat sbin/ip sbin/ipaddr bin/ipcalc usr/bin/ipcrm usr/bin/ipcs sbin/iplink sbin/ipneigh sbin/iproute sbin/iprule sbin/iptunnel bin/kbd_mode bin/kill usr/bin/killall usr/sbin/killall5 sbin/klogd usr/bin/last usr/bin/less bin/link bin/linux32 bin/linux64 bin/ln usr/sbin/loadfont sbin/loadkmap usr/bin/logger bin/login sbin/logread sbin/losetup bin/ls bin/lsattr sbin/lsmod usr/bin/lsof usr/bin/lsusb usr/bin/lzcat usr/bin/lzma bin/lzop usr/bin/lzopcat bin/makemime usr/bin/md5sum sbin/mdev usr/bin/mesg usr/bin/microcom bin/mkdir sbin/mkdosfs usr/bin/mkfifo sbin/mkfs.vfat bin/mknod usr/bin/mkpasswd sbin/mkswap bin/mktemp sbin/modinfo sbin/modprobe bin/more bin/mount bin/mountpoint bin/mpstat bin/mv sbin/nameif usr/sbin/nanddump usr/sbin/nandwrite usr/sbin/nbd-client usr/bin/nc bin/netstat bin/nice usr/bin/nl usr/bin/nmeter usr/bin/nohup sbin/nologin usr/bin/nproc usr/bin/nsenter usr/bin/nslookup usr/sbin/ntpd usr/bin/od usr/bin/openvt usr/sbin/partprobe usr/bin/passwd usr/bin/paste usr/bin/pgrep bin/pidof bin/ping bin/ping6 bin/pipe_progress sbin/pivot_root usr/bin/pkill usr/bin/pmap sbin/poweroff bin/printenv usr/bin/printf bin/ps usr/bin/pscan usr/bin/pstree bin/pwd usr/bin/pwdx sbin/raidautorun usr/sbin/rdate usr/sbin/rdev usr/sbin/readahead usr/bin/readlink usr/bin/realpath sbin/reboot bin/reformime usr/sbin/remove-shell usr/bin/renice usr/bin/reset usr/bin/resize bin/rev usr/sbin/rfkill bin/rm bin/rmdir sbin/rmmod sbin/route bin/run-parts bin/sed usr/sbin/sendmail usr/bin/seq sbin/setconsole usr/sbin/setfont usr/bin/setkeycodes usr/sbin/setlogcons bin/setpriv bin/setserial usr/bin/setsid bin/sh usr/bin/sha1sum usr/bin/sha256sum usr/bin/sha3sum usr/bin/sha512sum usr/bin/showkey usr/bin/shred usr/bin/shuf sbin/slattach bin/sleep usr/bin/sort usr/bin/split bin/stat usr/bin/strings bin/stty bin/su usr/bin/sum sbin/swapoff sbin/swapon sbin/switch_root bin/sync sbin/sysctl sbin/syslogd usr/bin/tac usr/bin/tail bin/tar usr/bin/tee usr/bin/test usr/bin/time usr/bin/timeout usr/bin/top bin/touch usr/bin/tr usr/bin/traceroute usr/bin/traceroute6 usr/bin/tree bin/true usr/bin/truncate usr/bin/tty usr/bin/ttysize sbin/tunctl sbin/udhcpc usr/bin/udhcpc6 bin/umount bin/uname usr/bin/unexpand usr/bin/uniq usr/bin/unix2dos usr/bin/unlink usr/bin/unlzma usr/bin/unlzop usr/bin/unshare usr/bin/unxz usr/bin/unzip usr/bin/uptime bin/usleep usr/bin/uudecode usr/bin/uuencode sbin/vconfig usr/bin/vi usr/bin/vlock usr/bin/volname bin/watch sbin/watchdog usr/bin/wc usr/bin/wget usr/bin/which usr/bin/who usr/bin/whoami usr/bin/whois usr/bin/xargs usr/bin/xxd usr/bin/xzcat usr/bin/yes bin/zcat sbin/zcip /var/log/acpid.log { missingok notifempty sharedscripts postrotate /etc/init.d/acpid --quiet --ifstarted restart || true endscript } #!/bin/sh # Block ifup until DAD completion # Copyright (c) 2016-2018 Kaarle Ritvanen has_flag() { ip address show dev $IFACE up | grep -q " $1 " } counter=100 while [ "$counter" -gt 0 ] && has_flag tentative && ! has_flag dadfailed; do sleep 0.2 counter=$((counter - 1)) done console tty0 tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 tty9 tty10 tty11 hvc0 ttyS0 ttyS1 ttyS2 ttyGS0 ttyAMA0 ttyAMA1 ttyTCU0 ttyTHS0 ttyTHS1 ttymxc0 ttymxc2 # Do not overwrite /etc/resolv.conf #RESOLV_CONF="no" # Use alternative path for resolv.conf #RESOLV_CONF="/tmp/resolv.conf" # Prevent overwriting of resolv.conf on a per-interface basis #NO_DNS="eth1 wlan1" # List of interfaces where DHCP routes are ignored #NO_GATEWAY="eth1 wlan1" #!/bin/sh # script for udhcpc # Copyright (c) 2008 Natanael Copa UDHCPC="/etc/udhcpc" UDHCPC_CONF="$UDHCPC/udhcpc.conf" RESOLV_CONF="/etc/resolv.conf" [ -f "$UDHCPC_CONF" ] && . "$UDHCPC_CONF" export RESOLV_CONF export broadcast export dns export domain export interface export ip export mask export metric export staticroutes export router export subnet export PATH=/usr/bin:/bin:/usr/sbin:/sbin run_scripts() { local dir="$1" local script if [ -d "$dir" ]; then for script in "$dir"/*; do if [ -f "$script" ] && [ -x "$script" ]; then "$script" fi done fi } deconfig() { ip -4 addr flush dev $interface } is_wifi() { test -e /sys/class/net/$interface/phy80211 } if_index() { if [ -e /sys/class/net/$interface/ifindex ]; then cat /sys/class/net/$interface/ifindex else ip -4 link show dev $interface | head -n1 | cut -d: -f1 fi } calc_metric() { local base= if is_wifi; then base=300 else base=200 fi echo $(( base + $(if_index) )) } route_add() { local to=$1 gw=$2 num=$3 # special case for /32 subnets: # /32 instructs kernel to always use routing for all outgoing packets # (they can never be sent to local subnet - there is no local subnet for /32). # Used in datacenters, avoids the need for private ip-addresses between two hops. if [ "$subnet" = "255.255.255.255" ]; then ip -4 route add $gw dev $interface fi ip -4 route add $to via $gw dev $interface \ metric $(( $num + ${IF_METRIC:-$(calc_metric)} )) } routes() { [ -z "$router" ] && [ -z "$staticroutes" ] && return local iface= for iface in $NO_GATEWAY; do [ "$iface" = "$interface" ] && return done while ip -4 route del default via dev $interface 2>/dev/null; do : done local num=0 # RFC3442: # If the DHCP server returns both a Classless Static Routes option # and a Router option, the DHCP client MUST ignore the Router option. if [ -n "$staticroutes" ]; then # static routes format: dest1/mask gw1 ... destn/mask gwn set -- $staticroutes while [ -n "$1" ] && [ -n "$2" ]; do local dest="$1" gw="$2" if [ "$gw" != "0.0.0.0" ]; then route_add $dest $gw $num && num=$(( num + 1)) fi shift 2 done else local gw= for gw in $router; do route_add 0.0.0.0/0 $gw $num && num=$(( num + 1 )) done fi } resolv_conf() { local i [ -n "$IF_PEER_DNS" ] && [ "$IF_PEER_DNS" != "yes" ] && return if [ "$RESOLV_CONF" = "no" ] || [ "$RESOLV_CONF" = "NO" ] \ || [ -z "$RESOLV_CONF" ] || [ -z "$dns" ]; then return fi for i in $NO_DNS; do [ "$i" = "$interface" ] && return done echo -n > "$RESOLV_CONF.$$" if [ -n "$search" ]; then echo "search $search" >> "$RESOLV_CONF.$$" elif [ -n "$domain" ]; then echo "search $domain" >> "$RESOLV_CONF.$$" fi for i in $dns; do echo "nameserver $i" >> "$RESOLV_CONF.$$" done chmod a+r "$RESOLV_CONF.$$" if grep -q "^# Generated by resolvconf" "$RESOLV_CONF" 2>/dev/null \ && [ -x "$(command -v resolvconf)" ]; then resolvconf -a "udhcpc" < "$RESOLV_CONF.$$" rm "$RESOLV_CONF.$$" else mv -f "$RESOLV_CONF.$$" "$RESOLV_CONF" fi } bound() { ip -4 addr add $ip/$mask ${broadcast:+broadcast $broadcast} dev $interface ip -4 link set dev $interface up routes resolv_conf } renew() { if ! ip -4 addr show dev $interface | grep $ip/$mask; then ip -4 addr flush dev $interface ip -4 addr add $ip/$mask ${broadcast:+broadcast $broadcast} dev $interface fi local i for i in $router; do if ! ip -4 route show | grep ^default | grep $i; then routes break fi done if ! grep "^search $domain"; then resolv_conf return fi for i in $dns; do if ! grep "^nameserver $i"; then resolv_conf return fi done } case "$1" in deconfig|renew|bound) run_scripts "$UDHCPC/pre-$1" $1 run_scripts "$UDHCPC/post-$1" ;; leasefail) echo "udhcpc failed to get a DHCP lease" >&2 ;; nak) echo "udhcpc received DHCP NAK" >&2 ;; *) echo "Error: this script should be called from udhcpc" >&2 exit 1 ;; esac exit 0 # do daily/weekly/monthly maintenance # min hour day month weekday command */15 * * * * run-parts /etc/periodic/15min 0 * * * * run-parts /etc/periodic/hourly 0 2 * * * run-parts /etc/periodic/daily 0 3 * * 6 run-parts /etc/periodic/weekly 0 5 1 * * run-parts /etc/periodic/monthly # Aliases to tell insmod/modprobe which modules to use # Uncomment the network protocols you don't want loaded: # alias net-pf-1 off # Unix # alias net-pf-2 off # IPv4 # alias net-pf-3 off # Amateur Radio AX.25 # alias net-pf-4 off # IPX # alias net-pf-5 off # DDP / appletalk # alias net-pf-6 off # Amateur Radio NET/ROM # alias net-pf-9 off # X.25 # alias net-pf-10 off # IPv6 # alias net-pf-11 off # ROSE / Amateur Radio X.25 PLP # alias net-pf-19 off # Acorn Econet alias char-major-10-175 agpgart alias char-major-10-200 tun alias char-major-81 bttv alias char-major-108 ppp_generic alias /dev/ppp ppp_generic alias tty-ldisc-3 ppp_async alias tty-ldisc-14 ppp_synctty alias ppp-compress-21 bsd_comp alias ppp-compress-24 ppp_deflate alias ppp-compress-26 ppp_deflate # Crypto modules (see http://www.kerneli.org/) alias loop-xfer-gen-0 loop_gen alias loop-xfer-3 loop_fish2 alias loop-xfer-gen-10 loop_gen alias cipher-2 des alias cipher-3 fish2 alias cipher-4 blowfish alias cipher-6 idea alias cipher-7 serp6f alias cipher-8 mars6 alias cipher-11 rc62 alias cipher-15 dfc2 alias cipher-16 rijndael alias cipher-17 rc5 # Support for i2c and lm_sensors alias char-major-89 i2c-dev # xfrm alias xfrm-type-2-4 xfrm4_tunnel alias xfrm-type-2-50 esp4 alias xfrm-type-2-51 ah4 alias xfrm-type-2-108 ipcomp alias xfrm-type-10-41 xfrm6_tunnel alias xfrm-type-10-50 esp6 alias xfrm-type-10-51 ah6 alias xfrm-type-10-108 ipcomp6 alias sha1 sha1-generic # change to aes-i586 to boost performance alias aes aes-generic # # Listing a module here prevents the hotplug scripts from loading it. # Usually that'd be so that some other driver will bind it instead, # no matter which driver happens to get probed first. Sometimes user # mode tools can also control driver binding. # tulip ... de4x5, xircom_tulip_cb, dmfe (...) handle same devices blacklist de4x5 # At least 2.4.3 and later xircom_tulip doesn't have that conflict # xircom_tulip_cb blacklist dmfe # Intel E810+x722 RDMA driver, should be loaded explicitly and may # lead to stability issues blacklist irdma #evbug is a debug tool and should be loaded explicitly blacklist evbug # Alternate 8139 driver. Some 8139 cards need this specific driver, # though... # blacklist 8139cp # Ethernet over IEEE1394 module. In too many cases this will load # when there's no eth1394 device present (just an IEEE1394 port) blacklist eth1394 # This module causes many Intel motherboards to crash and reboot. blacklist i8xx-tco # The kernel lists this as "experimental", but for now it's "broken" blacklist via-ircc # ALSA modules to support sound modems. These should be loaded manually # if needed. For most people they just break sound support... blacklist snd-atiixp-modem blacklist snd-intel8x0m blacklist snd-via82xx-modem # we don't want use the pc speaker blacklist snd-pcsp # Alternative module to Orinoco Wireless Cards. blacklist hostap blacklist hostap_cs # framebuffer drivers blacklist aty128fb blacklist atyfb blacklist radeonfb blacklist i810fb blacklist cirrusfb blacklist intelfb blacklist kyrofb blacklist i2c-matroxfb blacklist hgafb blacklist nvidiafb blacklist rivafb blacklist savagefb blacklist sstfb blacklist neofb blacklist tridentfb blacklist tdfxfb blacklist viafb blacklist virgefb blacklist vga16fb blacklist matroxfb_base blacklist vt8623fb # blacklist 1394 drivers blacklist ohci1394 blacklist video1394 blacklist dv1394 # blacklist mISDN dirver by default as we prefer dahdi drivers blacklist hfcmulti blacklist hfcpci blacklist hfcsusb # blacklist C7 cpu freq. use acpi-cpufreq instead blacklist e_powersaver blacklist microcode # needs init config, not compatible with acpid # https://gitlab.alpinelinux.org/alpine/aports/-/issues/12999 blacklist tiny_power_button alias parport_lowlevel parport_pc alias char-major-10-144 nvram alias binfmt-0064 binfmt_aout alias char-major-10-135 rtc Welcome to Alpine! The Alpine Wiki contains a large amount of how-to guides and general information about administrating Alpine systems. See . You can setup the system with the command: setup-alpine You may change this message by editing /etc/motd. export CHARSET=${CHARSET:-UTF-8} export LANG=${LANG:-C.UTF-8} export LC_COLLATE=${LC_COLLATE:-C} This directory should contain shell scripts configuring system-wide environment on users' shells. Files with the .sh extension found in this directory are evaluated by Bourne-compatible shells (like ash, bash or zsh) when started as a login shell. # Setup a red prompt for root and a green one for users. # Symlink this file to color_prompt.sh to actually enable it. _normal=$'\e[0m' if [ "$USER" = root ]; then _color=$'\e[1;31m' _symbol='#' else _color=$'\e[1;32m' _symbol='$' fi if [ -n "$ZSH_VERSION" ]; then PS1="%{$_color%}%m [%{$_normal%}%~%{$_color%}]$_symbol %{$_normal%}" else PS1="\[$_color\]\h [\[$_normal\]\w\[$_color\]]$_symbol \[$_normal\]" fi unset _normal _color _symbol # Prevents SYN DOS attacks. Applies to ipv6 as well, despite name. net.ipv4.tcp_syncookies = 1 # Prevents ip spoofing. net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 # Only groups within this id range can use ping. net.ipv4.ping_group_range=999 59999 # Redirects can potentially be used to maliciously alter hosts # routing tables. net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 1 net.ipv6.conf.all.accept_redirects = 0 # The source routing feature includes some known vulnerabilities. net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 # See RFC 1337 net.ipv4.tcp_rfc1337 = 1 ## Enable IPv6 Privacy Extensions (see RFC4941 and RFC3041) net.ipv6.conf.default.use_tempaddr = 2 net.ipv6.conf.all.use_tempaddr = 2 # Restarts computer after 120 seconds after kernel panic kernel.panic = 120 # Users should not be able to create soft or hard links to files # which they do not own. This mitigates several privilege # escalation vulnerabilities. fs.protected_hardlinks = 1 fs.protected_symlinks = 1 # Disable unprivileged use of the bpf(2) syscall. # Allowing unprivileged use of the bpf(2) syscall may allow a # malicious user to compromise the machine. kernel.unprivileged_bpf_disabled = 1 #!/bin/sh # Copyright (C) 2012 Natanael Copa # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 as published # by the Free Software Foundation. See http://www.gnu.org/ for details. all_ports_exist() { local i= for i in "$@"; do [ -d /sys/class/net/$i ] || return 1 done return 0 } wait_ports() { local timeout= waitports= [ -z "$IF_BRIDGE_WAITPORT" ] && return 0 set -- $IF_BRIDGE_WAITPORT timeout="$1" shift waitports="$@" [ -z "$waitports" ] && waitports="$PORTS" while ! all_ports_exist $waitports; do [ "$timeout" -eq 0 ] && return 0 timeout=$(($timeout - 1)) sleep 1 done } all_ports() { local i= for i in /sys/class/net/*/ifindex; do i=${i%/*} i=${i##*/} case "$i" in lo|$IFACE) continue;; *) echo $i;; esac done } add_ports() { local port= for port in $PORTS; do if [ -x /etc/network/if-pre-up.d/vlan ]; then env IFACE=$port /etc/network/if-pre-up.d/vlan fi if [ -n "$IF_BRIDGE_HW" ]; then ip link set dev $port addr $IF_BRIDGE_HW fi brctl addif $IFACE $port && ip link set dev $port up done } del_ports() { local port= for port in $PORTS; do ip link set dev $port down brctl delif $IFACE $port if [ -x /etc/network/ip-post-down.d/vlan ]; then env IFACE=$port /etc/network/if-post-down.d/vlan fi done } set_bridge_opts() { [ -n "$IF_BRIDGE_AGEING" ] \ && brctl setageing $IFACE $IF_BRIDGE_AGEING [ -n "$IF_BRIDGE_BRIDGEPRIO" ] \ && brctl setbridgeprio $IFACE $IF_BRIDGE_BRIDGEPRIO [ -n "$IF_BRIDGE_FD" ] \ && brctl setfd $IFACE $IF_BRIDGE_FD [ -n "$IF_BRIDGE_GCINT" ] \ && brctl setgcint $IFACE $IF_BRIDGE_GCINT [ -n "$IF_BRIDGE_HELLO" ] \ && brctl sethello $IFACE $IF_BRIDGE_HELLO [ -n "$IF_BRIDGE_MAXAGE" ] \ && brctl setmaxage $IFACE $IF_BRIDGE_MAXAGE [ -n "$IF_BRIDGE_PATHCOST" ] \ && brctl setpathcost $IFACE $IF_BRIDGE_PATHCOST [ -n "$IF_BRIDGE_PORTPRIO" ] \ && brctl setportprio $IFACE $IF_BRIDGE_PORTPRIO [ -n "$IF_BRIDGE_STP" ] \ && brctl stp $IFACE $IF_BRIDGE_STP } all_ports_ready() { local port= for port in $PORTS; do case $(cat /sys/class/net/$IFACE/brif/$port/state) in ""|0|3) ;; # 0 = disabled, 3 = forwarding [12]) return 1;; esac done return 0 } find_maxwait() { awk '{printf("%.f\n", 2 * $0 / 100); }' \ /sys/class/net/$IFACE/bridge/forward_delay } wait_bridge() { local timeout=$IF_BRIDGE_MAXWAIT if [ -z "$timeout" ]; then timeout=$(find_maxwait) fi ip link set dev $IFACE up while ! all_ports_ready; do [ $timeout -eq 0 ] && break timeout=$(($timeout - 1)) sleep 1 done } case "$IF_BRIDGE_PORTS" in "") ;; none) PORTS="";; all) PORTS=$(all_ports);; *) PORTS="$IF_BRIDGE_PORTS";; esac [ -z "$PORTS" ] && ! env | grep -q "^IF_BRIDGE" && exit case "$MODE" in start) brctl addbr $IFACE || exit 1 wait_ports set_bridge_opts add_ports wait_bridge ;; stop) del_ports ip link set dev $IFACE down brctl delbr $IFACE || exit 1 ;; esac #!/bin/sh [ -z "$IF_BOND_MEMBERS" ] && IF_BOND_MEMBERS="$IF_BOND_SLAVES" case "$PHASE" in depend) echo "$IF_BOND_MEMBERS" ;; esac #!/bin/sh if ! [ -x /etc/network/if-pre-up.d/bridge ] && [ -e /etc/alpine-release ]; then echo 'bridge support requires "apk add bridge"' 1>&2 exit 1 fi case "$PHASE" in depend) if [ "$IF_BRIDGE_PORTS" != "none" ]; then echo "$IF_BRIDGE_PORTS" fi ;; esac #!/bin/sh # some users provide a shell fragment for the hostname property. [ -n "$IF_DHCP_HOSTNAME" ] && IF_DHCP_HOSTNAME=$(eval echo $IF_DHCP_HOSTNAME) determine_implementation() { [ -n "$IF_DHCP_PROGRAM" ] && echo "$IF_DHCP_PROGRAM" && return [ -x /sbin/dhcpcd ] && echo "dhcpcd" && return [ -x /usr/sbin/dhclient ] && echo "dhclient" && return [ -x /sbin/udhcpc ] && echo "udhcpc" && return echo "could not find a supported DHCP implementation" exit 1 } start() { case "$1" in dhcpcd) optargs=$(eval echo $IF_DHCP_OPTS) [ -n "$IF_DHCP_HOSTNAME" ] && optargs="$optargs -h $IF_DHCP_HOSTNAME" [ -n "$IF_DHCP_VENDOR" ] && optargs="$optargs -i $IF_DHCP_VENDOR" [ -n "$IF_DHCP_CLIENT_ID" ] && optargs="$optargs -I $IF_DHCP_CLIENT_ID" [ -n "$IF_DHCP_LEASETIME" ] && optargs="$optargs -l $IF_DHCP_LEASETIME" [ -n "$IF_DHCP_CONFIG" ] && optargs="$optargs -f $IF_DHCP_CONFIG" [ -n "$IF_DHCP_SCRIPT" ] && optargs="$optargs -c $IF_DHCP_SCRIPT" ${MOCK} /sbin/dhcpcd $optargs $IFACE ;; dhclient) optargs=$(eval echo $IF_DHCP_OPTS) [ -n "$IF_DHCP_CONFIG" ] && optargs="$optargs -cf $IF_DHCP_CONFIG" [ -n "$IF_DHCP_SCRIPT" ] && optargs="$optargs -sf $IF_DHCP_SCRIPT" ${MOCK} /usr/sbin/dhclient -pf /var/run/dhclient.$IFACE.pid $optargs $IFACE ;; udhcpc) optargs=$(eval echo $IF_UDHCPC_OPTS $IF_DHCP_OPTS) [ -n "$IF_DHCP_HOSTNAME" ] && optargs="$optargs -x hostname:${IF_DHCP_HOSTNAME}" [ -n "$IF_DHCP_VENDOR" ] && optargs="$optargs -V $IF_DHCP_VENDOR" [ -n "$IF_DHCP_CLIENT_ID" ] && optargs="$optargs -x 0x3d:${IF_DHCP_CLIENT_ID}" [ -n "$IF_DHCP_LEASETIME" ] && optargs="$optargs -x lease:${IF_DHCP_LEASETIME}" [ -n "$IF_DHCP_SCRIPT" ] && optargs="$optargs -s $IF_DHCP_SCRIPT" ${MOCK} /sbin/udhcpc -b -R -p /var/run/udhcpc.$IFACE.pid -i $IFACE $optargs ;; *) ;; esac } stop() { case "$1" in dhcpcd) ${MOCK} /sbin/dhcpcd -k $IFACE ;; dhclient) ${MOCK} kill -9 $(cat /var/run/dhclient.$IFACE.pid) 2>/dev/null ;; udhcpc) ${MOCK} kill $(cat /var/run/udhcpc.$IFACE.pid) ;; *) ;; esac } impl=$(determine_implementation) [ -z "$VERBOSE" ] || set -x case "$PHASE" in up) start $impl ;; down) stop $impl || true ;; *) ;; esac #!/bin/sh yesno() { case "$1" in yes|1) echo 1 ;; *) echo 0 ;; esac } [ "$PHASE" != "up" ] && exit 0 [ -z "$VERBOSE" ] || set -x [ -n "$IF_FORWARD_IPV4" ] && ${MOCK} /bin/sh -c "echo $(yesno $IF_FORWARD_IPV4) > /proc/sys/net/ipv4/conf/$IFACE/forwarding" [ -n "$IF_FORWARD_IPV6" ] && ${MOCK} /bin/sh -c "echo $(yesno $IF_FORWARD_IPV6) > /proc/sys/net/ipv6/conf/$IFACE/forwarding" [ -n "$IF_FORWARD_IPV4_MC" ] && ${MOCK} /bin/sh -c "echo $(yesno $IF_FORWARD_IPV4_MC) > /proc/sys/net/ipv4/conf/$IFACE/mc_forwarding" [ -n "$IF_FORWARD_IPV6_MC" ] && ${MOCK} /bin/sh -c "echo $(yesno $IF_FORWARD_IPV6_MC) > /proc/sys/net/ipv6/conf/$IFACE/mc_forwarding" exit 0 #!/bin/sh [ -z "$VERBOSE" ] || set -x : "${PROCFS_ROOT:=/proc}" yesno() { case "$1" in yes|1) echo 1 ;; *) echo 0 ;; esac } case "$PHASE" in up) if [ -n "$IF_IPV6_AUTOCONF" -a -e "$PROCFS_ROOT/sys/net/ipv6/conf/${IFACE}/autoconf" ]; then printf '%s\n' "$(yesno "${IF_IPV6_AUTOCONF}")" > "$PROCFS_ROOT/sys/net/ipv6/conf/${IFACE}/autoconf" fi if [ -n "$IF_IPV6_ACCEPT_RA" -a -e "$PROCFS_ROOT/sys/net/ipv6/conf/${IFACE}/accept_ra" ]; then printf '%s\n' "${IF_IPV6_ACCEPT_RA}" > "$PROCFS_ROOT/sys/net/ipv6/conf/${IFACE}/accept_ra" fi if [ -n "$IF_IPV6_DAD_TRANSMITS" -a -e "$PROCFS_ROOT/sys/net/ipv6/conf/${IFACE}/dad_transmits" ]; then printf '%s\n' "${IF_IPV6_DAD_TRANSMITS}" > "$PROCFS_ROOT/sys/net/ipv6/conf/${IFACE}/dad_transmits" fi if [ -n "$IF_IPV6_OPTIMISTIC_DAD" -a -e "/proc/sys/net/ipv6/conf/${IFACE}/optimistic_dad" ]; then ${MOCK} echo $(yesno ${IF_IPV6_OPTIMISTIC_DAD}) > "/proc/sys/net/ipv6/conf/${IFACE}/optimistic_dad" fi ;; esac #!/bin/sh : "${PROCFS_ROOT:=/proc}" start() { forwarding=$(cat "$PROCFS_ROOT/sys/net/ipv6/conf/$IFACE/forwarding") if [ "$forwarding" = 1 ]; then printf '%s\n' 2 > "$PROCFS_ROOT/sys/net/ipv6/conf/$IFACE/accept_ra" else printf '%s\n' 1 > "$PROCFS_ROOT/sys/net/ipv6/conf/$IFACE/accept_ra" fi } stop() { printf '%s\n' 0 > "$PROCFS_ROOT/sys/net/ipv6/conf/$IFACE/accept_ra" } [ -z "$VERBOSE" ] || set -x case "$PHASE" in up) start $impl ;; down) stop $impl ;; *) ;; esac #!/bin/sh : "${PROCFS_ROOT:=/proc}" start() { printf '%s\n' 2 > "$PROCFS_ROOT/sys/net/ipv6/conf/$IFACE/use_tempaddr" } stop() { printf '%s\n' 0 > "$PROCFS_ROOT/sys/net/ipv6/conf/$IFACE/use_tempaddr" } [ -z "$VERBOSE" ] || set -x case "$PHASE" in pre-up) start $impl ;; pre-down) stop $impl ;; *) ;; esac #!/bin/sh [ -n "$VERBOSE" ] && set -x is_vlan() { case "$IFACE" in *#*) return 1 ;; *:*) return 1 ;; vlan*.*) return 1 ;; vlan*) [ -z "$IF_VLAN_RAW_DEVICE" ] && return 1 IF_VLAN_ID="${IFACE#vlan}" ;; *.*) IF_VLAN_RAW_DEVICE="${IFACE%.*}" IF_VLAN_ID="${IFACE##*.}" ;; *) [ -z "$IF_VLAN_RAW_DEVICE" ] && return 1 [ -z "$IF_VLAN_ID" ] && return 1 ;; esac return 0 } onoff() { case "$1" in on|1) echo on ;; *) echo off ;; esac } case "$PHASE" in depend) # vlan-raw-device if is_vlan; then printf '%s\n' "$IF_VLAN_RAW_DEVICE" # veth-peer-name elif [ "$IF_LINK_TYPE" = 'veth' ] && [ -n "$IF_VETH_PEER_NAME" ]; then printf '%s\n' "$IF_VETH_PEER_NAME" fi ;; create) # Don't complain about an existing interface when creating it # NOTE: Double negation is important so this condition is ignored during tests if ! ${MOCK} [ ! -d /sys/class/net/"$IFACE" ]; then exit 0 fi if [ "$IF_LINK_TYPE" = 'dummy' ]; then if ${MOCK} [ ! -d /sys/module/dummy ]; then printf 'Loading dummy network interface kernel module\n' ${MOCK} modprobe dummy fi ${MOCK} ip link add "$IFACE" type dummy elif [ "$IF_LINK_TYPE" = 'veth' ]; then # Configure peer name if defined ${MOCK} ip link add "$IFACE" type veth ${IF_VETH_PEER_NAME:+peer "$IF_VETH_PEER_NAME"} elif is_vlan; then # NOTE: Early negation is important so this condition is ignored during tests if ! ${MOCK} [ -d /sys/class/net/"$IF_VLAN_RAW_DEVICE" ]; then printf 'Interface %s is missing VLAN raw device %s\n' "$IFACE" "$IF_VLAN_RAW_DEVICE" exit 1 fi if ${MOCK} [ ! -d /proc/net/vlan ]; then printf 'Loading 8021q kernel module for VLAN support\n' ${MOCK} modprobe 8021q fi IF_VLAN_OPTIONS="" if [ -n "$IF_VLAN_REORDER_HDR" ]; then value=$(onoff $IF_VLAN_REORDER_HDR) IF_VLAN_OPTIONS="reorder_hdr $value" fi if [ -n "$IF_VLAN_GVRP" ]; then value=$(onoff $IF_VLAN_GVRP) IF_VLAN_OPTIONS="$IF_VLAN_OPTIONS gvrp $value" fi if [ -n "$IF_VLAN_MVRP" ]; then value=$(onoff $IF_VLAN_MVRP) IF_VLAN_OPTIONS="$IF_VLAN_OPTIONS mvrp $value" fi if [ -n "$IF_VLAN_LOOSE_BINDING" ]; then value=$(onoff $IF_VLAN_LOOSE_BINDING) IF_VLAN_OPTIONS="$IF_VLAN_OPTIONS loose_binding $value" fi if [ -n "$IF_VLAN_BRIDGE_BINDING" ]; then value=$(onoff $IF_VLAN_BRIDGE_BINDING) IF_VLAN_OPTIONS="$IF_VLAN_OPTIONS bridge_binding $value" fi IF_VLAN_PROTOCOL=$(echo $IF_VLAN_PROTOCOL | tr "[:upper:]" "[:lower:]") case "$IF_VLAN_PROTOCOL" in 802.1ad|qinq|q-in-q) ${MOCK} ip link add link "${IF_VLAN_RAW_DEVICE}" name "${IFACE}" ${IF_LINK_OPTIONS} type vlan id "${IF_VLAN_ID}" protocol 802.1ad ${IF_VLAN_OPTIONS} ;; *) ${MOCK} ip link add link "${IF_VLAN_RAW_DEVICE}" name "${IFACE}" type vlan id "${IF_VLAN_ID}" protocol 802.1Q ${IF_VLAN_OPTIONS} ;; esac fi ;; up) # TODO: ? Move this into a function and use `set -- "$@" ...` to manage optional parameters # Configure mtu, hardware address and alias if defined ${MOCK} ip link set up dev "$IFACE" ${IF_MTU:+mtu "$IF_MTU"} ${IF_HWADDRESS:+address "$IF_HWADDRESS"} ${IF_ALIAS:+alias "$IF_ALIAS"} ;; down) # Don't complain about a nonexistent interface when downing it # NOTE: Early negation is important so this condition is ignored during tests if ! ${MOCK} [ -d /sys/class/net/"$IFACE" ]; then exit 0 fi ${MOCK} ip link set down dev "$IFACE" ;; destroy) # Don't complain about a nonexistent interface when destroying it # NOTE: Early negation is important so this condition is ignored during tests if ! ${MOCK} [ -d /sys/class/net/"$IFACE" ]; then exit 0 fi if [ "$IF_LINK_TYPE" = 'dummy' ] || [ "$IF_LINK_TYPE" = 'veth' ] || is_vlan; then ${MOCK} ip link del "$IFACE" fi ;; esac #!/bin/sh [ -z "${VERBOSE}" ] || set -x [ -z "${IF_METRIC}" ] && IF_METRIC="1" [ -n "${IF_VRF_TABLE}" ] && VRF_TABLE="table ${IF_VRF_TABLE}" [ -n "${IF_VRF_MEMBER}" ] && VRF_TABLE="vrf ${IF_VRF_MEMBER}" [ -n "${IF_METRIC}" ] && METRIC="metric ${IF_METRIC}" addr_family() { if [ "$1" != "${1#*[0-9].[0-9]}" ]; then echo "-4" elif [ "$1" != "${1#*:[0-9a-fA-F]}" ]; then echo "-6" else exit 1 fi } configure_addresses() { for addr in ${IF_ADDRESSES}; do addrfam=$(addr_family ${addr}) if [ "${IF_POINT_TO_POINT}" -a "${addrfam}" = "-4" ]; then PEER="peer ${IF_POINT_TO_POINT}" else PEER="" fi ${MOCK} ip "${addrfam}" addr add "${addr}" ${PEER} dev "${IFACE}" done } configure_gateways() { for gw in ${IF_GATEWAYS}; do addrfam=$(addr_family ${gw}) ${MOCK} ip "${addrfam}" route add default via "${gw}" ${VRF_TABLE} ${METRIC} dev "${IFACE}" onlink done } flush() { cmd="addr" arg="dev ${IFACE}" ${MOCK} ip ${cmd} flush ${arg} } case "$PHASE" in up) configure_addresses add configure_gateways add ;; down) flush ;; *) exit 0 ;; esac #!/sbin/openrc-run # Copyright (c) 2017 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. supervisor=supervise-daemon description="starts an openrc session for an user" user="${RC_SVCNAME#*.}" command="/usr/libexec/rc/bin/openrc-user" command_args="$user" notify="fd:3" # If it's rapidly failing, usually due to XDG_RUNTIME_DIR being unset, # we should just quit fast. respawn_max=3 respawn_period=5 respawn_delay=500ms start_pre() { if [ "$user" = "$RC_SVCNAME" ]; then eerror "${RC_SVCNAME} cannot be started directly. You must create" eerror "symbolic links to it for the users you want to start" return 1 fi } # List of /tmp directories we should clean up clean_tmp_dirs="/tmp" # Should we wipe the tmp paths completely or just selectively remove known # locks / files / etc... ? wipe_tmp="NO" # Write the initial dmesg log into /var/log/dmesg after boot # This may be useful if you need the kernel boot log afterwards log_dmesg="YES" # Save the previous dmesg log to dmesg.old # This may be useful if you need to compare the current boot to the # previous one. #previous_dmesg=no # The consolefont service is not activated by default. If you need to # use it, you should run "rc-update add consolefont boot" as root. # # consolefont specifies the default font that you'd like Linux to use on the # console. You can find a good selection of fonts in /usr/share/consolefonts; consolefont="default8x16.psf.gz" # consoletranslation is the charset map file to use. Leave commented to use # the default one. Have a look in /usr/share/consoletrans for a selection of # map files you can use. #consoletranslation="8859-1_to_uni.trans" # OpenRC will attempt each of the following in succession to mount /dev. # # 1. If there is an entry for /dev in fstab, it will be used. # 2. If devtmpfs is defined in the kernel, it will be used. # 3. If tmpfs is defined in the kernel, it will be used. # # Set this to yes if you do not want OpenRC to attempt to mount /dev. # skip_mount_dev="NO" # Sets the level at which logging of messages is done to the # console. See dmesg(1) for more info. dmesg_level="1" # Pass any arguments to fsck. # By default we preen. # Linux systems also force -C0 and -T. # If fsck_args is not specified then Linux systems also use -A # (and -R if / is rw) #fsck_args="-p" # We can also specify the passno in /etc/fstab to check # If you multiplex fsck (ie ln -s fsck /etc/init.d/fsck.late) then you can # do an fsck outside of the normal scope, say for /home. # Here are some examples:- #fsck_passno="=1 =2" #fsck_passno=">1" #fsck_passno="<2" # If passno is not enough granularity, you can also specify mountpoints to # check. This should NOT be used for the default non-multiplexed fsck, or your # system might not be checked. Additionally, it is mutually exclusive with # the fsck_passno setting. #fsck_mnt="" #fsck_mnt="/home" # Most modern fs's don't require a full fsck on boot, but for those that do # it may be advisable to skip this when running on battery. # WARNING: Do not turn this off if you have any JFS partitions. fsck_on_battery="YES" # fsck_shutdown causes fsck to trigger during shutdown as well as startup. # The end result of this is that if any periodic non-root filesystem checks are # scheduled, under normal circumstances the actual check will happen during # shutdown rather than at next boot. # This is useful when periodic filesystem checks are causing undesirable # delays at startup, but such delays at shutdown are acceptable. fsck_shutdown="NO" # fsck_abort_on_errors can be set to no to cause fsck to not abort on # errors. # This is useful when periodic filesystem checks are causing undesirable # aborts. fsck_abort_on_errors="YES" # Set CLOCK to "UTC" if your Hardware Clock is set to UTC (also known as # Greenwich Mean Time). If that clock is set to the local time, then # set CLOCK to "local". Note that if you dual boot with Windows, then # you should set it to "local". clock="UTC" # If you want the hwclock script to set the system time (software clock) # to match the current hardware clock during bootup, leave this # commented out. # However, you can set this to "NO" if you are running a modern kernel # and using NTP to synchronize your system clock. #clock_hctosys="YES" # If you do not want to set the hardware clock to the current system # time (software clock) during shutdown, set this to no. #clock_systohc="YES" # If you wish to pass any other arguments to hwclock during bootup, # you may do so here. Alpha users may wish to use --arc or --srm here. clock_args="" # If you wish to pass any options to kill_all during shutdown, # you should do so here. # # The setting is called killall5_opts because the options here are meant # to be identical to those you could pass to killall5. killall5_opts="" # If you need to delay after each kill attempt during shutdown, set the amount # of time you need to delay here. This gets passed directly to sleep in # the shell. # kill_delay=0 # Stop the unmounting of certain points. # This could be useful for some NFS related work. #no_umounts="/dir1:/var/dir2" # # Mark certain mount points as critical. # This contains a space separated list of mount points which should be # considered critical. If one of these mount points cannot be mounted, # localmount will fail. # By default, this is empty. #critical_mounts="/home /var" # Enable loadable module support when running from RAM # when OverlayFS support is available in the kernel. # 0 means default tmpfs size (50% of physical RAM). # for more information please see kernel documention at: # https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt overlay_size=0 # Linux users can define a list of modules for a specific kernel version, # a released kernel version, a main kernel version or all kernel versions. # The most specific versioned variable will take precedence. # FreeBSD users can only use the modules="foo bar" setting. #modules_2_6_23_gentoo_r5="ieee1394 ohci1394" #modules_2_6_23="tun ieee1394" #modules_2_6="tun" #modules_2="ipv6" #modules="ohci1394" # Linux users can give the modules some arguments if needed, per version # if necessary. # Again, the most specific versioned variable will take precedence. # This is not supported on FreeBSD. #module_ieee1394_args="debug" #module_ieee1394_args_2_6_23_gentoo_r5="debug2" #module_ieee1394_args_2_6_23="debug3" #module_ieee1394_args_2_6="debug4" #module_ieee1394_args_2="debug5" # You should consult your kernel documentation and configuration # for a list of modules and their options. # As far as we are aware, there are no modern linux tools or use cases # which require /etc/mtab to be a separate file from /proc/self/mounts, # so this setting should be commented out. # If it is set to yes, please comment it out and run this command: # # rc-service mtab restart # In the future, the mtab service will be removed since we are not aware # of any need to manipulate /etc/mtab as a separate file from # /proc/self/mounts. # If you have a technical reason we should keep this support, please # open an issue at https://github.com/openrc/openrc/issues and let us # know about your situation. # This setting controls whether /etc/mtab is a file or symbolic link. # mtab_is_file=no # The interfaces setting controls which interfaces the net-online # service considers in deciding whether the network is active. The # default is all interfaces that support ethernet. #interfaces="" # This setting controls whether a ping test is included in the test for # network connectivity after all interfaces are active. #include_ping_test=no # This setting is the host to attempt to ping if the above is yes. # The default is google.com. #ping_test_host=some.host.name # The timeout setting controls how long the net-online service waits # for the network to be configured. # The default is 120 seconds. # if this is set to 0, the wait is infinite. #timeout=120 # You will need to set the dependencies in the netmount script to match # the network configuration tools you are using. This should be done in # this file by following the examples below, and not by changing the # service script itself. # # Each of these examples is meant to be used separately. So, for # example, do not set rc_need to something like "net.eth0 dhcpcd". # # If you are using newnet and configuring your interfaces with static # addresses with the network script, you should use this setting. # #rc_need="network" # # If you are using oldnet, you must list the specific net.* services you # need. # # This example assumes all of your netmounts can be reached on # eth0. # #rc_need="net.eth0" # # This example assumes some of your netmounts are on eth1 and some # are on eth2. # #rc_need="net.eth1 net.eth2" # # If you are using a dynamic network management tool like # NetworkManager, dhcpcd in standalone mode, wicd, badvpn-ncd, etc, to # manage the network interfaces with the routes to your netmounts, you # should list that tool. # #rc_need="NetworkManager" #rc_need="dhcpcd" #rc_need="wicd" # # The default setting is designed to be backward compatible with our # current setup, but you are highly discouraged from using this. In # other words, please change it to be more suited to your system. # rc_need="net" # # Mark certain mount points as critical. # This contains aspace separated list of mount points which should be # considered critical. If one of these mount points cannot be mounted, # netmount will fail. # By default, this is empty. #critical_mounts="/home /var" # The convention in this file is to show the default settings commented out. # # Sometimes you want to have urandom start before "localmount" (say for crypt # swap), so you will need to customize this behavior. If you have /var on a # separate partition, make sure paths under /var are adjusted to point to # locations on your root device. # # Set skip_credit to yes or true if you do not want seed files to actually # credit the random number generator. For example, you should set this if you # plan to replicate the file system image without removing the contents of # ${seed_dir}. # # seed_dir=/var/lib/seedrng # skip_credit=no # Do not use this file to define the default route. # In all settings, multiple routes should be separated using ; or new lines. # Define static routes on Linux using iproute2. See ip(8) for syntax. #staticiproute="192.168.0.0/24 via 10.73.1.1; 192.168.1.0/24 via 10.73.1.1" # Or define static routes on Linux using route (legacy). See route(8) for syntax. #staticroute="net 192.168.0.0 netmask 255.255.255.0 gw 10.73.1.1 #net 192.168.1.0 netmask 255.255.255.0 gw 10.73.1.1" # If you are only using local swap partitions, you should not change # this file. Otherwise, you need to uncomment the below rc_before line # followed by the appropriate rc_need line. #rc_before="!localmount" # # If you are using swap files stored on local file systems, uncomment # this line. #rc_need="localmount" # # If you are using swap files stored on network file systems or swap # partitions stored on network block devices such as iSCSI, uncomment # this line. #rc_need="netmount" # This is the location of the reference file swclock uses to set the # system date and time. # This is the default path. If you are using it, you do not need to # uncomment it. If you are using the default and have /var on its own # file system, you need to add the appropriate rc_after setting. # swclock_file=/var/lib/misc/openrc-shutdowntime #!/sbin/openrc-run # Copyright (c) 2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Register misc binary format handlers" depend() { after clock procfs use modules devfs keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -vserver -wsl } start() { ebegin "Loading custom binary format handlers" "$RC_LIBEXECDIR"/sh/binfmt.sh eend $? return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. depend() { need localmount before logger after clock root sysctl keyword -prefix -timeout -wsl } : "${wipe_tmp:=${WIPE_TMP:-no}}" : "${log_dmesg:=${LOG_DMESG:-yes}}" cleanup_tmp_dir() { local dir="$1" if ! [ -d "$dir" ]; then mkdir -p "$dir" || return $? fi checkpath -W "$dir" || return 1 chmod a+rwt "$dir" 2> /dev/null cd "$dir" || return 1 if yesno $wipe_tmp; then ebegin "Wiping $dir directory" # Faster than raw find if ! rm -rf -- [!ajlq\.]* 2>/dev/null ; then # Blah, too many files find . -maxdepth 1 -name '[!ajlq\.]*' -exec rm -rf -- {} + fi # pam_mktemp creates a .private directory within which # each user gets a private directory with immutable # bit set; remove the immutable bit before trying to # remove it. [ -d /tmp/.private ] && chattr -R -a /tmp/.private 2> /dev/null # Prune the paths that are left find . -maxdepth 1 \ ! -name . \ ! -name lost+found \ ! -name quota.user \ ! -name aquota.user \ ! -name quota.group \ ! -name aquota.group \ ! -name journal \ -exec rm -rf -- {} + eend 0 else ebegin "Cleaning $dir directory" rm -rf -- .X*-lock esrv* kio* \ jpsock.* .fam* .esd* \ orbit-* ssh-* ksocket-* \ .*-unix eend 0 fi } cleanup_var_run_dir() { ebegin "Cleaning /var/run" for x in $(find /var/run ! -type d ! -name utmp \ ! -name random-seed ! -name dev.db \ ! -name ld-elf.so.hints ! -name ld-elf32.so.hints \ ! -name ld.so.hints); do # Clean stale sockets if [ -S "$x" ]; then if command -v fuser >/dev/null 2>&1; then fuser "$x" >/dev/null 2>&1 || rm -- "$x" else rm -- "$x" fi fi [ ! -f "$x" ] && continue # Do not remove pidfiles of already running daemons case "$x" in *.pid) start-stop-daemon --test --quiet \ --stop --pidfile "$x" && continue ;; esac rm -f -- "$x" done eend 0 } mkutmp() { : >"$1" # Not all systems have the utmp group chgrp utmp "$1" 2>/dev/null chmod 0664 "$1" } migrate_to_run() { src="$1" dst="$2" if [ -L $src -a "$(readlink -f $src)" != $dst ]; then ewarn "$src does not point to $dst." ewarn "Setting $src to point to $dst." rm $src elif [ ! -L $src -a -d $src ]; then ebegin "Migrating $src to $dst" if ! rmdir $src 2>/dev/null; then cp -a $src/* $dst/ rm -rf $src fi eend $? fi # If $src doesn't exist at all, just run this if [ ! -e $src ]; then ln -s $dst $src fi } clean_run() { [ "$RC_SYS" = VSERVER -o "$RC_SYS" = LXC ] && return 0 local dir # If / is still read-only due to a problem, this will fail! if ! checkpath -W /; then ewarn "/ is not writable; unable to clean up underlying /run" return 1 fi if ! checkpath -W /tmp; then ewarn "/tmp is not writable; unable to clean up underlying /run" return 1 fi # Now we know that we can modify /tmp and / # if mktemp -d fails, it returns an EMPTY string # STDERR: mktemp: failed to create directory via template ‘/tmp/tmp.XXXXXXXXXX’: Read-only file system # STDOUT: '' rc=0 dir=$(mktemp -d) if [ -n "$dir" -a -d $dir -a -w $dir ]; then mount --bind / $dir && rm -rf $dir/run/* || rc=1 umount $dir && rmdir $dir else rc=1 fi if [ $rc -ne 0 ]; then ewarn "Could not clean up underlying /run on /" return 1 fi } start() { # Remove any added console dirs if checkpath -W "$RC_LIBEXECDIR"; then rm -rf "$RC_LIBEXECDIR"/console/* fi local logw=false runw=false extra= # Ensure that our basic dirs exist if [ "$RC_UNAME" = Linux ]; then # Satisfy Linux FHS extra=/var/lib/misc if [ ! -d /run ]; then extra="/var/run $extra" fi else extra=/var/run fi for x in /var/log /tmp $extra; do if ! [ -d $x ]; then if ! mkdir -p $x; then eend 1 "failed to create needed directory $x" return 1 fi fi done if [ "$RC_UNAME" = Linux -a -d /run ]; then migrate_to_run /var/lock /run/lock migrate_to_run /var/run /run clean_run fi if checkpath -W /var/run; then ebegin "Creating user login records" local xtra= [ "$RC_UNAME" = NetBSD ] && xtra=x for x in "" $xtra; do mkutmp /var/run/utmp$x done [ -e /var/log/wtmp ] || mkutmp /var/log/wtmp eend 0 mountinfo -q -f tmpfs /var/run || cleanup_var_run_dir fi # Clean up /tmp directories local tmp= for tmp in ${clean_tmp_dirs:-${wipe_tmp_dirs-/tmp}}; do mountinfo -q -f tmpfs "$tmp" || cleanup_tmp_dir "$tmp" done if checkpath -W /tmp; then # Make sure our X11 stuff have the correct permissions # Omit the chown as bootmisc is run before network is up # and users may be using lame LDAP auth #139411 rm -rf /tmp/.ICE-unix /tmp/.X11-unix mkdir -p /tmp/.ICE-unix /tmp/.X11-unix chmod 1777 /tmp/.ICE-unix /tmp/.X11-unix if [ -x /sbin/restorecon ]; then restorecon /tmp/.ICE-unix /tmp/.X11-unix fi fi if yesno $log_dmesg; then if $logw || checkpath -W /var/log; then # Create an 'after-boot' dmesg log case "$RC_SYS" in VSERVER|OPENVZ|LXC|SYSTEMD-NSPAWN) ;; *) if yesno ${previous_dmesg:-no} && [ -e /var/log/dmesg ]; then mv /var/log/dmesg /var/log/dmesg.old fi dmesg > /var/log/dmesg chmod 640 /var/log/dmesg ;; esac fi fi return 0 } stop() { # Write a halt record if we're shutting down if [ "$RC_RUNLEVEL" = shutdown ]; then if [ "$RC_UNAME" = Linux ]; then if [ -x /sbin/halt ]; then halt -w else openrc-shutdown -w fi fi if [ "$RC_SYS" = OPENVZ ]; then yesno $RC_REBOOT && printf "" >/reboot fi fi return 0 } # vim: ft=sh #!/sbin/openrc-run # Copyright (c) 2017 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Mount the control groups." : "${cgroup_opts:="nodev,noexec,nosuid"}" depend() { keyword -docker -podman -prefix -systemd-nspawn -vserver -wsl after sysfs } cgroup1_base() { grep -qw cgroup /proc/filesystems || return 0 if ! mountinfo -q /sys/fs/cgroup; then ebegin "Mounting cgroup filesystem" local opts="${cgroup_opts},mode=755,size=${rc_cgroupsize:-10m}" mount -n -t tmpfs -o "${opts}" cgroup_root /sys/fs/cgroup eend $? fi if ! mountinfo -q /sys/fs/cgroup/openrc; then local agent="${RC_LIBEXECDIR}/sh/cgroup-release-agent.sh" mkdir /sys/fs/cgroup/openrc mount -n -t cgroup \ -o none,${cgroup_opts},name=openrc,release_agent="$agent" \ openrc /sys/fs/cgroup/openrc printf 1 > /sys/fs/cgroup/openrc/notify_on_release fi return 0 } cgroup1_controllers() { yesno "${rc_controller_cgroups:-YES}" && [ -e /proc/cgroups ] && grep -qw cgroup /proc/filesystems || return 0 while read -r name _ _ enabled _; do case "${enabled}" in 1) mountinfo -q "/sys/fs/cgroup/${name}" && continue local x for x in $rc_cgroup_controllers; do [ "${name}" = "blkio" ] && [ "${x}" = "io" ] && continue 2 [ "${name}" = "${x}" ] && continue 2 done mkdir "/sys/fs/cgroup/${name}" mount -n -t cgroup -o "${cgroup_opts},${name}" \ "${name}" "/sys/fs/cgroup/${name}" yesno "${rc_cgroup_memory_use_hierarchy:-no}" && [ "${name}" = memory ] && echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy ;; esac done < /proc/cgroups return 0 } cgroup2_base() { grep -qw cgroup2 /proc/filesystems || return 0 local base base="$(cgroup2_find_path)" mkdir -p "${base}" mount -t cgroup2 cgroup2 -o "${cgroup_opts},nsdelegate" "${base}" 2> /dev/null || mount -t cgroup2 cgroup2 -o "${cgroup_opts}" "${base}" return 0 } cgroup2_controllers() { grep -qw cgroup2 /proc/filesystems || return 0 local active cgroup_path x y cgroup_path="$(cgroup2_find_path)" [ -z "${cgroup_path}" ] && return 0 [ ! -e "${cgroup_path}/cgroup.controllers" ] && return 0 [ ! -e "${cgroup_path}/cgroup.subtree_control" ]&& return 0 read -r active < "${cgroup_path}/cgroup.controllers" for x in ${active}; do case "${rc_cgroup_mode:-unified}" in unified) echo "+${x}" > "${cgroup_path}/cgroup.subtree_control" ;; hybrid) for y in ${rc_cgroup_controllers}; do if [ "$x" = "$y" ]; then echo "+${x}" > "${cgroup_path}/cgroup.subtree_control" fi done ;; esac done return 0 } cgroups_hybrid() { cgroup1_base cgroup2_base cgroup2_controllers cgroup1_controllers return 0 } cgroups_legacy() { cgroup1_base cgroup1_controllers return 0 } cgroups_unified() { cgroup2_base cgroup2_controllers return 0 } mount_cgroups() { case "${rc_cgroup_mode:-unified}" in hybrid) cgroups_hybrid ;; legacy) cgroups_legacy ;; unified) cgroups_unified ;; esac return 0 } restorecon_cgroups() { if [ -x /sbin/restorecon ]; then ebegin "Restoring SELinux contexts in /sys/fs/cgroup" restorecon -rF /sys/fs/cgroup >/dev/null 2>&1 eend $? fi return 0 } start() { # set up kernel support for cgroups if [ -d /sys/fs/cgroup ]; then mount_cgroups restorecon_cgroups fi return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Sets a font for the consoles." depend() { need termencoding after hotplug bootmisc modules keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu -wsl } start() { ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} consolefont=${consolefont:-${CONSOLEFONT}} consoletranslation=${consoletranslation:-${CONSOLETRANSLATION}} if [ -z "$consolefont" ]; then ebegin "Using the default console font" eend 0 return 0 fi if [ "$ttyn" = 0 ]; then ebegin "Skipping font setup (rc_tty_number == 0)" eend 0 return 0 fi local x= param= sf_param= retval=0 ttydev=/dev/tty # Get additional parameters if [ -n "$consoletranslation" ]; then param="$param -m $consoletranslation" fi # Set the console font ebegin "Setting console font [$consolefont]" [ -d /dev/vc ] && ttydev=/dev/vc/ x=1 while [ $x -le $ttyn ]; do if ! setfont $consolefont $param -C $ttydev$x >/dev/null; then retval=1 break fi : $(( x += 1 )) done eend $retval # Store the font so we can use it ASAP on boot if [ $retval -eq 0 ] && checkpath -W -m 0755 -d "$RC_CACHEDIR" 2>/dev/null; then mkdir -p "$RC_CACHEDIR"/console zcat "/usr/share/consolefonts/$consolefont" \ > "$RC_CACHEDIR"/console/font fi return $retval } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Set up the /dev directory" depend() { provide dev-mount before dev keyword -docker -podman -prefix -systemd-nspawn -vserver -wsl } mount_dev() { local action conf_d_dir devfstype msg mountopts action=--mount conf_d_dir="${RC_SERVICE%/*/*}/conf.d" msg=Mounting # Some devices require exec, https://bugs.gentoo.org/92921 # Users with such requirements can use an fstab entry for /dev mountopts="noexec,nosuid,mode=0755" if yesno ${skip_mount_dev:-no} ; then einfo "/dev will not be mounted due to user request" return 0 fi if mountinfo -q /dev; then action=--remount mountopts="remount,$mountopts" msg=Remounting fi if fstabinfo -q /dev; then ebegin "$msg /dev according to fstab" fstabinfo -q $action /dev eend $? return 0 fi if grep -q devtmpfs /proc/filesystems; then devfstype=devtmpfs mountopts="$mountopts,size=10M" elif grep -q tmpfs /proc/filesystems; then devfstype=tmpfs mountopts="$mountopts,size=10M" fi if [ -n "$devfstype" ]; then ebegin "$msg $devfstype on /dev" mount -n -t $devfstype -o $mountopts dev /dev eend $? else ewarn "This kernel does not have devtmpfs or tmpfs support, and there" ewarn "is no entry for /dev in fstab." ewarn "This means /dev will not be mounted." ewarn "To avoid this message, set CONFIG_DEVTMPFS or CONFIG_TMPFS to y" ewarn "in your kernel configuration or see ${conf_d_dir}/${RC_SVCNAME}" fi return 0 } seed_dev() { # Seed /dev with some things that we know we need if [ "${RC_SYS}" != LXC ]; then # creating /dev/console, /dev/tty and /dev/tty1 to be able to write # to $CONSOLE with/without bootsplash before udevd creates it [ -c /dev/console ] || mknod -m 600 /dev/console c 5 1 [ -c /dev/tty1 ] || mknod -m 620 /dev/tty1 c 4 1 [ -c /dev/tty ] || mknod -m 666 /dev/tty c 5 0 # udevd will dup its stdin/stdout/stderr to /dev/null # and we do not want a file which gets buffered in ram [ -c /dev/null ] || mknod -m 666 /dev/null c 1 3 # so udev can add its start-message to dmesg [ -c /dev/kmsg ] || mknod -m 660 /dev/kmsg c 1 11 fi # extra symbolic links not provided by default [ -e /dev/fd ] || ln -snf /proc/self/fd /dev/fd [ -e /dev/stdin ] || ln -snf /proc/self/fd/0 /dev/stdin [ -e /dev/stdout ] || ln -snf /proc/self/fd/1 /dev/stdout [ -e /dev/stderr ] || ln -snf /proc/self/fd/2 /dev/stderr [ -e /proc/kcore ] && ln -snf /proc/kcore /dev/core # Mount required directories as user may not have them in /etc/fstab for x in \ "mqueue /dev/mqueue 1777 ,nodev mqueue" \ "devpts /dev/pts 0755 ,gid=5,mode=0620 devpts" \ "tmpfs /dev/shm 1777 ,nodev,mode=1777 shm" \ ; do set -- $x grep -Eq "[[:space:]]+$1$" /proc/filesystems || continue mountinfo -q $2 && continue if [ ! -d $2 ]; then mkdir -m $3 -p $2 >/dev/null 2>&1 || \ ewarn "Could not create $2!" fi if [ -d $2 ]; then ebegin "Mounting $2" if ! fstabinfo --mount $2; then mount -n -t $1 -o noexec,nosuid$4 $5 $2 fi eend $? fi done } restorecon_dev() { if [ -x /sbin/restorecon ]; then ebegin "Restoring SELinux contexts in /dev" restorecon -rF /dev >/dev/null 2>&1 eend $? fi return 0 } start() { mount_dev seed_dev restorecon_dev return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Set the dmesg level for a cleaner boot" depend() { before dev modules keyword -docker -podman -lxc -prefix -systemd-nspawn -vserver -wsl } start() { if [ -n "$dmesg_level" ]; then dmesg -n$dmesg_level fi } #!/sbin/openrc-run # The first boot init service # read kernel options init_KOPT() { eval "set -- $(cat /proc/cmdline 2>/dev/null)" for opt; do case "$opt" in ssh_*=*) eval "KOPT_${opt%%=*}='${opt#*=}'" ;; esac done } start() { rm -f /etc/runlevels/*/$RC_SVCNAME init_KOPT local rc=0 ebegin "Starting ${RC_SVCNAME}" if [ -n "$KOPT_ssh_key" ] && [ ! -f "/root/.ssh/authorized_keys" ]; then einfo "Fetching ssh keys" mkdir -pm 700 /root/.ssh checkpath -fm 0600 /root/.ssh/authorized_keys case "$KOPT_ssh_key" in https://*|ftps://*|http://*) wget -q "$KOPT_ssh_key" -O /root/.ssh/authorized_keys rc=$?;; *) echo "$KOPT_ssh_key" > /root/.ssh/authorized_keys;; esac fi eend $rc } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Check and repair filesystems according to /etc/fstab" _IFS=" " depend() { after clock use dev clock modules keyword -docker -podman -jail -lxc -openvz -prefix -systemd-nspawn -timeout -vserver -uml -wsl } _abort() { yesno ${fsck_abort_on_errors:-yes} && rc-abort return 1 } # We should only reboot when first booting _reboot() { if [ "$RC_RUNLEVEL" = "$RC_BOOTLEVEL" ]; then reboot "$@" _abort || return 1 fi } _forcefsck() { [ -e /forcefsck ] || get_bootparam forcefsck } start() { local fsck_opts= p= check_extra= if [ -e /fastboot ]; then ewarn "Skipping fsck due to /fastboot" return 0 fi if _forcefsck; then fsck_opts="$fsck_opts -f" check_extra="(check forced)" elif ! yesno ${fsck_on_battery:-YES} && ! on_ac_power; then ewarn "Skipping fsck due to not being on AC power" return 0 fi if [ -n "$fsck_passno" ]; then check_extra="[passno $fsck_passno] $check_extra" if [ -n "$fsck_mnt" ]; then eerror "Only 1 of fsck_passno and fsck_mnt must be set!" return 1 fi fi ebegin "Checking local filesystems $check_extra" # Append passno mounts for p in $fsck_passno; do local IFS="$_IFS" case "$p" in [0-9]*) p="=$p";; esac set -- "$@" $(fstabinfo --passno "$p") unset IFS done # Append custom mounts for m in $fsck_mnt ; do local IFS="$_IFS" set -- "$@" "$m" unset IFS done if [ "$RC_UNAME" = Linux ]; then local skiptypes skiptypes=$(printf 'no%s,' ${net_fs_list} ${extra_net_fs_list}) [ "${skiptypes}" = "no," ] && skiptypes="" fsck_opts="$fsck_opts -T -t ${skiptypes}noopts=_netdev" if [ -z "$fsck_passno" -a -z "$fsck_mnt" ]; then fsck_args=${fsck_args:--A -p} if echo 2>/dev/null >/.test.$$; then rm -f /.test.$$ fsck_opts="$fsck_opts -R" fi fi fi trap : INT QUIT fsck ${fsck_args:--p} $fsck_opts "$@" case $? in 0) eend 0; return 0;; 1) ewend 1 "Filesystems repaired"; return 0;; 2|3) if [ "$RC_UNAME" = Linux ]; then ewend 1 "Filesystems repaired, but reboot needed" _reboot -f else ewend 1 "Filesystems still have errors;" \ "manual fsck required" _abort fi;; 4) if [ "$RC_UNAME" = Linux ]; then ewend 1 "Filesystem errors left uncorrected, aborting" _abort else ewend 1 "Filesystems repaired, but reboot needed" _reboot fi;; 8) ewend 1 "Operational error"; return 0;; 12) ewend 1 "fsck interrupted";; *) eend 2 "Filesystems couldn't be fixed";; esac _abort || return 1 } stop() { # Fake function so we always shutdown correctly. _abort() { return 0; } _reboot() { return 0; } _forcefsck() { return 1; } yesno $fsck_shutdown && start return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Sets the hostname of the machine." depend() { after clock keyword -docker -podman -lxc -prefix -systemd-nspawn -wsl } start() { local h source if read -r h _ 2> /dev/null < /etc/hostname; then source="/etc/hostname" elif [ -n "${hostname}" ]; then h=${hostname} source="/etc/conf.d/${RC_SVCNAME}" fi if [ -z "$h" ]; then einfo "Using default system hostname" return 0 fi ebegin "Setting hostname to $h from $source" hostname "$h" eend $? "Failed to set the hostname" } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. extra_commands="save show" description="Sets the local clock to UTC or Local Time." description_save="Saves the current time in the BIOS." description_show="Displays the current time in the BIOS." : "${clock_adjfile:=${CLOCK_ADJFILE}}" : "${clock_args:=${CLOCK_OPTS}}" : "${clock_systohc:=${CLOCK_SYSTOHC}}" : "${clock:=${CLOCK:-UTC}}" if [ "$clock" = "UTC" ]; then utc="UTC" utc_cmd="--utc" else utc="Local Time" utc_cmd="--localtime" fi depend() { provide clock want modules if yesno $clock_adjfile; then use root fi keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu -wsl } setupopts() { case "$(uname -m)" in s390*) utc="s390" ;; *) if [ -e /proc/devices ] && \ grep -q " cobd$" /proc/devices then utc="coLinux" fi ;; esac case "$utc" in UTC|Local" "Time);; *) unset utc_cmd;; esac } # hwclock doesn't always return non zero on error _hwclock() { local err="$(hwclock "$@" 2>&1 >/dev/null)" [ -z "$err" ] && return 0 echo "${err}" >&2 return 1 } get_noadjfile() { if ! yesno $clock_adjfile; then # Some implementations don't handle adjustments if LC_ALL=C hwclock --help 2>&1 | grep -q -e "--noadjfile"; then echo --noadjfile fi fi } rtc_exists() { local rtc= for rtc in /dev/rtc /dev/rtc[0-9]*; do [ -e "$rtc" ] && break done [ -e "$rtc" ] } start() { local retval=0 errstr="" modname setupopts if [ -z "$utc_cmd" ]; then ewarn "Not setting clock for $utc system" return 0 fi ebegin "Setting system clock using the hardware clock [$utc]" if [ -e /proc/modules ]; then if ! rtc_exists; then for x in rtc-cmos rtc genrtc; do modprobe -q $x && rtc_exists && modname="$x" && break done [ -n "$modname" ] && ewarn "The $modname module needs to be configured in" \ "${RC_SERVICE%/*/*}/conf.d/modules or built in." fi fi # Always set the kernel's time zone. _hwclock --systz $utc_cmd $(get_noadjfile) $clock_args : $(( retval += $? )) if [ -e /etc/adjtime ] && yesno $clock_adjfile; then _hwclock --adjust $utc_cmd $(get_noadjfile) : $(( retval += $? )) fi if yesno ${clock_hctosys:-YES}; then _hwclock --hctosys $utc_cmd $(get_noadjfile) $clock_args : $(( retval += $? )) fi eend $retval "Failed to set the system clock" return 0 } stop() { # Don't tweak the hardware clock on LiveCD halt. [ -n "$CDBOOT" ] && return 0 yesno ${clock_systohc:-YES} || return 0 local retval=0 errstr="" setupopts [ -z "$utc_cmd" ] && return 0 ebegin "Setting hardware clock using the system clock" "[$utc]" _hwclock --systohc $utc_cmd $(get_noadjfile) $clock_args retval=$? eend $retval "Failed to sync clocks" } save() { clock_systohc=yes stop } show() { setupopts hwclock --show "$utc_cmd" $(get_noadjfile) $clock_args } #!/sbin/openrc-run # Copyright (c) Natanael Copa # This code is licensed under BSD-2-Clause depend() { need sysfs dev before checkfs fsck after modloop keyword -vserver -lxc } # Load hardware drivers start() { # check for boot option "nocoldplug" if get_bootparam noautodetect; then ewarn "Autodetection of hardware disabled from boot cmdline" return 0 fi ebegin "Loading hardware drivers" find /sys/devices -name modalias -type f -print0 2> /dev/null | xargs -0 sort -u \ | xargs modprobe -b -a 2> /dev/null # we run it twice so we detect all devices find /sys/devices -name modalias -type f -print0 2> /dev/null | xargs -0 sort -u \ | xargs modprobe -b -a 2> /dev/null # check if framebuffer drivers got pulled in if [ -e /dev/fb0 ] && ! [ -e /sys/module/fbcon ]; then modprobe -b -q fbcon fi eend 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Kill all processes so we can unmount disks cleanly." depend() { keyword -prefix } start() { ebegin "Terminating remaining processes" kill_all 15 ${killall5_opts} sleep ${kill_delay:-0} eend 0 ebegin "Killing remaining processes" sleep ${kill_delay:-0} kill_all 9 ${killall5_opts} eend 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. conf_d_dir="${RC_SERVICE%/*/*}/conf.d" local_d_dir="${RC_SERVICE%/*/*}/local.d" description="Executes user programs in ${local_d_dir}" depend() { after * keyword -timeout } start() { local file has_errors redirect retval has_errors=0 yesno $rc_verbose || redirect='> /dev/null 2>&1' ebegin "Starting local" eindent for file in "${local_d_dir}"/*.start; do if [ -x "${file}" ]; then vebegin "Executing \"${file}\"" eval "${file}" $redirect retval=$? if [ ${retval} -ne 0 ]; then has_errors=1 fi veend ${retval} "Execution of \"${file}\" failed." fi done eoutdent if command -v local_start >/dev/null 2>&1; then ewarn "\"${conf_d_dir}/local\" should be removed." ewarn "Please move the code from the local_start function" ewarn "to executable scripts with an .start extension" ewarn "in \"${local_d_dir}\"" local_start fi eend ${has_errors} # We have to end with a zero exit code, because a failed execution # of an executable ${local_d_dir}/*.start file shouldn't result in # marking the local service as failed. Otherwise we are unable to # execute any executable ${local_d_dir}/*.stop file, because a failed # marked service cannot be stopped (and the stop function would # actually call the executable ${local_d_dir}/*.stop file(s)). return 0 } stop() { local file has_errors redirect retval has_errors=0 yesno $rc_verbose || redirect='> /dev/null 2>&1' ebegin "Stopping local" eindent for file in "${local_d_dir}"/*.stop; do if [ -x "${file}" ]; then vebegin "Executing \"${file}\"" eval "${file}" $redirect retval=$? if [ ${retval} -ne 0 ]; then has_errors=1 fi veend ${retval} "Execution of \"${file}\" failed." fi done eoutdent if command -v local_stop >/dev/null 2>&1; then ewarn "\"${conf_d_dir}/local\" should be removed." ewarn "Please move the code from the local_stop function" ewarn "to executable scripts with an .stop extension" ewarn "in \"${local_d_dir}\"" local_stop fi eend ${has_errors} # An executable ${local_d_dir}/*.stop file which failed with a # non-zero exit status is not a reason to mark this service # as failed, therefore we have to end with a zero exit code. return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Mounts disks and swap according to /etc/fstab." depend() { need fsck root use lvm modules after clock lvm modules keyword -docker -podman -jail -lxc -prefix -systemd-nspawn -vserver -wsl } start() { [ -x /sbin/mkmntdirs ] && mkmntdirs # Mount local filesystems in /etc/fstab. # The types variable must start with no, and must be a type local critical= types="noproc" x= no_netdev= rc= for x in $net_fs_list $extra_net_fs_list; do types="${types},${x}" done if [ "$RC_UNAME" = Linux ]; then no_netdev="-O no_netdev" if mountinfo -q /usr; then touch "$RC_SVCDIR"/usr_premounted fi fi ebegin "Mounting local filesystems" mount -at "$types" $no_netdev eend $? "Some local filesystem failed to mount" rc=$? if [ -z "$critical_mounts" ]; then rc=0 else for x in ${critical_mounts}; do fstabinfo -q $x || continue if ! mountinfo -q $x; then critical=x eerror "Failed to mount $x" fi done [ -z "$critical" ] && rc=0 fi return $rc } stop() { yesno $RC_GOINGDOWN || return 0 # We never unmount / or /dev or $RC_SVCDIR # Bug 381783 local rc_svcdir=$(printf '%s\n' "$RC_SVCDIR" | sed 's:/lib\(32\|64\)\?/:/lib(32|64)?/:g') local x= no_umounts_r="/|/dev|/dev/.*|/etc|/etc/.*|${rc_svcdir}" no_umounts_r="${no_umounts_r}|/bin|/sbin|/lib(32|64)?|/libexec" # RC_NO_UMOUNTS is an env var that can be set by plugins local IFS="$IFS:" for x in $no_umounts $RC_NO_UMOUNTS; do no_umounts_r="$no_umounts_r|$x" done if [ "$RC_UNAME" = Linux ]; then no_umounts_r="$no_umounts_r|/proc|/proc/.*|/run|/sys|/sys/.*" if [ -e "$rc_svcdir"/usr_premounted ]; then no_umounts_r="$no_umounts_r|/usr" fi fi no_umounts_r="^($no_umounts_r)$" # Flush all pending disk writes now sync . "$RC_LIBEXECDIR"/sh/rc-mount.sh if [ "$RC_UNAME" = Linux ] && [ -d /sys/fs/aufs ] ; then #if / is aufs we remount it noxino during shutdown if mountinfo -q -f '^aufs$' / ; then mount -o remount,noxino,rw / sync fi local aufs_branch aufs_mount_point aufs_si_id aufs_br_id branches for aufs_si_dir in /sys/fs/aufs/si*; do [ -d "${aufs_si_dir}" ] || continue aufs_si_id="si=${aufs_si_dir#/sys/fs/aufs/si_}" aufs_mount_point="$(mountinfo -o ${aufs_si_id})" branches="$aufs_si_dir/br[0-9] $aufs_si_dir/br[0-9][0-9] $aufs_si_dir/br[0-9][0-9][0-9]" for x in $branches; do [ -e "${x}" ] || continue aufs_branch=$(sed 's/=.*//g' $x) eindent if ! mount -o "remount,del:$aufs_branch" "$aufs_mount_point" > /dev/null 2>&1; then ewarn "Failed to remove branch $aufs_branch from aufs" \ "$aufs_mount_point" fi eoutdent sync done done fi # Umount loop devices einfo "Unmounting loop devices" eindent do_unmount "umount -d" --skip-point-regex "$no_umounts_r" \ --node-regex "^/dev/loop" eoutdent # Now everything else, except network filesystems as the # network should be down by this point. einfo "Unmounting filesystems" eindent local fs= for x in $net_fs_list $extra_net_fs_list; do fs="$fs${fs:+|}$x" done [ -n "$fs" ] && fs="^($fs)$" do_unmount umount --skip-point-regex "$no_umounts_r" \ "${fs:+--skip-fstype-regex}" $fs --nonetdev eoutdent return 0 } #!/sbin/openrc-run # Copyright (c) 2013-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Configures the loopback interface." depend() { after clock keyword -jail -prefix -systemd-nspawn -vserver } start() { if [ "$RC_UNAME" = Linux ]; then ebegin "Bringing up network interface lo" if command -v ip > /dev/null 2>&1; then ip addr add 127.0.0.1/8 dev lo brd + ip link set lo up else ifconfig lo 127.0.0.1 netmask 255.0.0.0 fi else ebegin "Bringing up network interface lo0" ifconfig lo0 127.0.0.1 netmask 255.0.0.0 fi eend $? } #!/sbin/openrc-run # Copyright (c) Natanael Copa # This code is licensed under BSD-2-Clause description="Generate machine-id if needed" depend() { need root dev } start() { if [ -s /etc/machine-id ] ; then return 0 fi ebegin "Generating machine-id" dd if=/dev/urandom status=none bs=16 count=1 \ | md5sum | cut -d' ' -f1 > /etc/machine-id eend $? } #!/sbin/openrc-run # Copyright (c) Natanael Copa # This code is licensed under BSD-2-Clause # script that will mount image with modules depend() { after dev-mount before checkfs fsck hwdrivers modules hwclock dev sysfs keyword -vserver -lxc } # read kernel options init_KOPT() { for opt in $(cat /proc/cmdline 2>/dev/null); do case "$opt" in modloop=*|modloop_verify=*) eval "KOPT_${opt%%=*}='${opt#*=}'" ;; esac done } mountdirs() { awk '$2 !~ /^\/(sys|proc|dev|run)/ && $2 != "/" {print $2}' /proc/mounts } find_modloop() { local dir="$1" local kver=$(uname -r) local oifs="$IFS" IFS=$'\n' set -- $(blkid "$dir"/boot/* "$dir"/*) IFS="$oifs" for line; do img=${line%%:*} verify_modloop "$img" || eerror "Failed to verify signature of $img!" mount "$img" -o loop,ro /.modloop || continue if [ -d /.modloop/modules/$kver ]; then return 0 fi umount /.modloop done return 1 } verify_modloop() { local modloop=$1 key= if ! yesno "${KOPT_modloop_verify:=yes}"; then return 0 fi for key in /etc/apk/keys/*.pub; do local sig=/var/cache/misc/${modloop##*/}.SIGN.RSA.${key##*/} if [ -f "$sig" ]; then if ! command -v openssl > /dev/null; then ewarn "Missing openssl. Modloop verification disabled!" return 0 fi einfo "Verifying modloop" openssl dgst -sha1 -verify "$key" -signature "$sig" "$modloop" \ >/dev/null 2>&1 || return 1 fi done } find_backing_file() { local dir="$1" local dev=$(df -P "$dir" | tail -1 | awk '{print $1}') cat /sys/block/${dev#/dev/}/loop/backing_file 2>/dev/null } start() { local modloop= mount_opts= modloop_dldir="/lib" init_KOPT case "$KOPT_modloop" in none) return 0;; http://*|https://*|ftp://*) modloop=$modloop_dldir/${KOPT_modloop##*/} if [ ! -f "$modloop" ]; then mkdir -p "$modloop_dldir" wget -P "$modloop_dldir" "$KOPT_modloop" || eend 1 fi ;; *) for dir in $(mountdirs); do if [ -f "$dir"/$KOPT_modloop ]; then modloop="$dir/${KOPT_modloop##/}" alpine_mnt="$dir" break fi done ;; esac ebegin "Mounting modloop $modloop" mkdir -p /.modloop if [ -n "$modloop" ]; then verify_modloop "$modloop" || eerror "Failed to verify signature of $img!" mount -o loop,ro $modloop /.modloop eend $? || return 1 else for dir in $(mountdirs); do if find_modloop "$dir"; then alpine_mnt="$dir" break fi done if [ -d /.modloop/modules/$(uname -r) ]; then eend 0 else eend 1 || return 1 fi fi #use overlayfs if available and configured if grep -q -w "overlay$" /proc/filesystems && [ ! -z ${unionfs_size+x} ]; then ewarn "Use of unionfs_size is deprecated use overlay_size instead" overlay_size="$unionfs_size" fi if grep -q -w "overlay$" /proc/filesystems && [ -n "$overlay_size" ]; then ebegin "OverlayFS detected, mounting modloop rw" [ "$overlay_size" != 0 ] && mount_ops="-o size=$overlay_size" mkdir -p /.modoverlayfs /lib/modules mount -t tmpfs $mount_ops tmpfs /.modoverlayfs mkdir -p /.modoverlayfs/modules /.modoverlayfs/work mount -t overlay -o upperdir=/.modoverlayfs/modules,lowerdir=/lib/modules:/.modloop/modules,workdir=/.modoverlayfs/work overlay /lib/modules depmod -A eend $? || return 1 else rm -rf /lib/modules && ln -sf /.modloop/modules /lib/ fi # copy firmware if there are any if [ -d $alpine_mnt/firmware ]; then ebegin "Copying firmware from $alpine_mnt/firmware" cp -R -a $alpine_mnt/firmware /lib/ eend $? elif [ -d /lib/modules/firmware ]; then rmdir /lib/firmware 2>/dev/null \ && ln -s /lib/modules/firmware /lib/ fi return 0 } stop() { local ret=0 local mnt; for mnt in /lib/modules /.modoverlayfs /.modloop; do if mountinfo --quiet "$mnt"; then ebegin "Unmounting $mnt" umount -d "$mnt" || ret=1 fi done eend $ret || return 1 } #!/sbin/openrc-run # Copyright (c) Natanael Copa # This code is licensed under BSD-2-Clause description="Loads a user defined list of kernel modules." depend() { before hwclock hwdrivers keyword -openvz -prefix -vserver -lxc } start() { yesno $rc_verbose && verbose=yes ebegin "Loading modules" eindent for f in /lib/modules-load.d/*.conf \ /usr/lib/modules-load.d/*.conf; do if ! [ -f "$f" ]; then continue fi if [ -f /etc/modules-load.d/"${f##*/}" ]; then veinfo "Ignoring $f due to /etc/modules-load.d/${f##*/}" continue fi if [ -f /run/modules-load.d/"${f##*/}" ]; then veinfo "Ignoring $f due to /run/modules-load.d/${f##*/}" continue fi veinfo "Processing $f" sed -e 's/\#.*//g' -e '/^[[:space:]]*$/d' < "$f" \ | while read module args; do modprobe -q $module $args done done if [ -f /etc/modules ]; then veinfo "Processing /etc/modules" sed -e 's/\#.*//g' -e '/^[[:space:]]*$/d' < /etc/modules \ | while read module args; do modprobe -q $module $args done fi for f in /etc/modules-load.d/*.conf; do if [ ! -f "$f" ]; then continue fi if [ -f /run/modules-load.d/"${f##*/}" ]; then veinfo "Ignoring $f due to /run/modules-load.d/${f##*/}" continue fi veinfo "Processing $f" sed -e 's/\#.*//g' -e '/^[[:space:]]*$/d' < "$f" \ | while read module args; do modprobe -q $module $args done done for f in /run/modules-load.d/*.conf; do if [ ! -f "$f" ]; then continue fi veinfo "Processing $f" sed -e 's/\#.*//g' -e '/^[[:space:]]*$/d' < "$f" \ | while read module args; do modprobe -q $module $args done done eoutdent eend $? } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Re-mount filesystems read-only for a clean reboot." depend() { after killprocs savecache keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -vserver -wsl } start() { local ret=0 # Flush all pending disk writes now sync ebegin "Remounting remaining filesystems read-only" # We need the do_unmount function . "$RC_LIBEXECDIR"/sh/rc-mount.sh eindent # Bug 381783 local rc_svcdir=$(echo $RC_SVCDIR | sed 's:/lib\(32\|64\)\?/:/lib(32|64)?/:g') local m="/dev|/dev/.*|/proc|/proc.*|/sys|/sys/.*|/run|${rc_svcdir}" x= fs= m="$m|/bin|/sbin|/lib(32|64)?|/libexec" if [ -e "$rc_svcdir"/usr_premounted ]; then m="$m|/usr" fi # RC_NO_UMOUNTS is an env var that can be set by plugins local IFS="$IFS:" for x in $no_umounts $RC_NO_UMOUNTS; do m="$m|$x" done m="^($m)$" fs= for x in $net_fs_list $extra_net_fs_list; do fs="$fs${fs:+|}$x" done [ -n "$fs" ] && fs="^($fs)$" do_unmount "umount -r" \ --skip-point-regex "$m" \ "${fs:+--skip-fstype-regex}" $fs --nonetdev ret=$? eoutdent eend $ret } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Update /etc/mtab to match what the kernel knows about" depend() { after clock before localmount need root keyword -prefix -systemd-nspawn } start() { local rc=0 ebegin "Updating /etc/mtab" if ! checkpath -W /etc; then rc=1 elif ! yesno ${mtab_is_file:-no}; then [ ! -L /etc/mtab ] && [ -f /etc/mtab ] && ewarn "Removing /etc/mtab file" einfo "Creating mtab symbolic link" ln -snf /proc/self/mounts /etc/mtab else ewarn "The ${RC_SVCNAME} service will be removed in the future." ewarn "Please change the mtab_is_file setting to no and run" ewarn "# rc-service mtab restart" ewarn "to create the mtab symbolic link." [ -L /etc/mtab ] && ewarn "Removing /etc/mtab symbolic link" rm -f /etc/mtab einfo "Creating mtab file" # With / as tmpfs we cannot umount -at tmpfs in localmount as that # makes / readonly and dismounts all tmpfs even if in use which is # not good. Luckily, umount uses /etc/mtab instead of /proc/mounts # which allows this hack to work. grep -v "^[! ]* / tmpfs " /proc/mounts > /etc/mtab # Remove stale backups rm -f /etc/mtab~ /etc/mtab~~ fi eend $rc "/etc is not writable; unable to create /etc/mtab" return 0 } #!/sbin/openrc-run # Copyright (c) 2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Delays until the network is online or a specific timeout" depend() { after modules net need sysfs provide network-online keyword -docker -podman -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver -wsl } get_interfaces() { local ifname iftype for ifname in /sys/class/net/*; do [ -h "${ifname}" ] || continue read iftype < ${ifname}/type [ "$iftype" = "1" ] && printf "%s " ${ifname##*/} done } start () { local carriers configured dev gateway ifcount infinite local carrier operstate rc ebegin "Checking to see if the network is online" rc=0 interfaces=${interfaces:-$(get_interfaces)} timeout=${timeout:-120} [ $timeout -eq 0 ] && infinite=true || infinite=false while $infinite || [ $timeout -gt 0 ]; do carriers=0 configured=0 ifcount=0 for dev in ${interfaces}; do : $((ifcount += 1)) read carrier 2> /dev/null < /sys/class/net/$dev/carrier || carrier= [ "$carrier" = 1 ] && : $((carriers += 1)) read operstate 2> /dev/null < /sys/class/net/$dev/operstate || operstate= [ -e /sys/class/net/$dev/tun_flags ] && operstate=up [ "$operstate" = up ] && : $((configured += 1)) done [ $configured -eq $ifcount ] && [ $carriers -ge 1 ] && break sleep 1 : $((timeout -= 1)) done ! $infinite && [ $timeout -eq 0 ] && rc=1 include_ping_test=${include_ping_test:-${ping_default_gateway}} if [ -n "${ping_default_gateway}" ]; then ewarn "ping_default_gateway is deprecated, please use include_ping_test" fi if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then ping_test_host="${ping_test_host:-google.com}" if [ -n "$ping_test_host" ]; then while $infinite || [ $timeout -gt 0 ]; do ping -n -c 1 $ping_test_host > /dev/null 2>&1 rc=$? [ $rc -eq 0 ] && break sleep 1 : $((timeout -= 1)) done fi fi eend $rc "The network is offline" } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Mounts network shares according to /etc/fstab." depend() { local opts mywant="" for opts in $(fstabinfo -o -t nfs,nfs4); do case $opts in noauto) ;; *) mywant="$mywant nfsclient"; break ;; esac done after root config /etc/fstab want $mywant use afc-client amd openvpn use dns use root keyword -docker -podman -jail -lxc -prefix -systemd-nspawn -vserver -wsl } start() { local x= fs= rc= for x in $net_fs_list $extra_net_fs_list; do fs="$fs${fs:+,}$x" done ebegin "Mounting network filesystems" mount -at $fs rc=$? if [ "$RC_UNAME" = Linux ] && [ $rc = 0 ]; then mount -a -O _netdev rc=$? fi ewend $rc "Could not mount all network filesystems" if [ -z "$critical_mounts" ]; then rc=0 else for x in ${critical_mounts}; do fstabinfo -q $x || continue if ! mountinfo -q $x; then critical=x eerror "Failed to mount $x" fi done [ -z "$critical" ] && rc=0 fi return $rc } stop() { local x= fs= ebegin "Unmounting network filesystems" . "$RC_LIBEXECDIR"/sh/rc-mount.sh for x in $net_fs_list $extra_net_fs_list; do fs="$fs${fs:+,}$x" done if [ -n "$fs" ]; then umount -at $fs || eerror "Failed to simply unmount filesystems" fi eindent fs= for x in $net_fs_list $extra_net_fs_list; do fs="$fs${fs:+|}$x" done [ -n "$fs" ] && fs="^($fs)$" do_unmount umount ${fs:+--fstype-regex} $fs --netdev retval=$? eoutdent if [ "$RC_UNAME" = Linux ] && [ $retval = 0 ]; then umount -a -O _netdev retval=$? fi eend $retval "Failed to unmount network filesystems" } #!/sbin/openrc-run # Copyright (c) Natanael Copa # This code is licensed under BSD-2-Clause # # note that the spoofprotect, syncoockies and ip_forward options are set in # /etc/sysctl.conf : ${cfgfile:="/etc/network/interfaces"} : ${ifquery:="ifquery"} : ${ifstate:="/run/ifstate"} single_iface="${RC_SVCNAME#*.}" if [ "$single_iface" = "$RC_SVCNAME" ]; then single_iface= fi depend() { need localmount hostname want dev-settle after bootmisc hwdrivers modules provide net keyword -jail -prefix -vserver -docker } # find interfaces we want to start find_ifaces() { if [ -n "$single_iface" ]; then echo $single_iface return 0 fi if command -v "$ifquery" >/dev/null; then $ifquery -i "$cfgfile" --list -a return fi # fallback in case ifquery does not exist awk '$1 == "auto" {for (i = 2; i <= NF; i = i + 1) printf("%s ", $i)}' "$cfgfile" } # return the list of interfaces we should try stop find_running_ifaces() { if [ -n "$single_iface" ]; then echo $single_iface return 0 fi if command -v "$ifquery" >/dev/null; then $ifquery --state-file $ifstate -i "$cfgfile" --running return fi # fallback awk -F= '{print $2}' $ifstate } start() { local iface= ret=1 ebegin "Starting networking" eindent for iface in $(find_ifaces); do local r=0 ebegin "$iface" if ! ifup -i "$cfgfile" $iface >/dev/null; then ifdown -i "$cfgfile" $iface >/dev/null 2>&1 r=1 fi # atleast one interface needs to be started for action # to be success eend $r && ret=0 done eoutdent return $ret } stop() { local iface= # Don't stop the network at shutdown. yesno ${keep_network:-YES} && yesno $RC_GOINGDOWN && return 0 ebegin "Stopping networking" eindent for iface in $(find_running_ifaces); do ebegin "$iface" ifdown -i "$cfgfile" -f $iface >/dev/null eend $? done eoutdent return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Turns numlock on for the consoles." ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} depend() { keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -vserver -wsl } _setleds() { [ -z "$1" ] && return 1 local dev=/dev/tty t= i=1 retval=0 [ -d /dev/vc ] && dev=/dev/vc/ while [ $i -le $ttyn ]; do setleds -D "$1"num < $dev$i || retval=1 : $(( i += 1 )) done return $retval } start() { ebegin "Enabling numlock on ttys" _setleds + eend $? "Failed to enable numlock" } stop() { yesno $RC_GOINGDOWN && return 0 ebegin "Disabling numlock on ttys" _setleds - eend $? "Failed to disable numlock" } #!/sbin/openrc-run # Copyright (c) 2014-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. # Can be used on OSs that take care of the clock. description="Provides clock" depend() { provide clock } start() { # This stub function is required to avoid OpenRC warning at boot: # # * The command variable is undefined. # * There is nothing for osclock to start. # * If this is what you intend, please write a start function. # * This will become a failure in a future release. # return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Mounts misc filesystems in /proc." depend() { after clock use devfs want modules keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -vserver -wsl } start() { # Setup Kernel Support for miscellaneous Binary Formats if [ -d /proc/sys/fs/binfmt_misc ] && [ ! -e /proc/sys/fs/binfmt_misc/register ]; then if ! grep -qs binfmt_misc /proc/filesystems && modprobe -q binfmt-misc; then ewarn "The binfmt-misc module needs to be loaded by" \ "the modules service or built in." fi if grep -qs binfmt_misc /proc/filesystems; then ebegin "Mounting misc binary format filesystem" mount -t binfmt_misc -o nodev,noexec,nosuid \ binfmt_misc /proc/sys/fs/binfmt_misc eend $? fi fi return 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Mount the root fs read/write" depend() { after clock need fsck keyword -docker -podman -jail -lxc -openvz -prefix -systemd-nspawn -vserver -wsl } start() { local root_opts=",$(fstabinfo -o /)," case "$root_opts" in *,ro,*) ;; *) # Check if the rootfs isn't already writable. if checkpath -W /; then rm -f /fastboot /forcefsck else ebegin "Remounting root filesystem read/write" case "$RC_UNAME" in Linux) mount -n -o remount,rw / ;; *) mount -u -o rw / ;; esac eend $? "Root filesystem could not be mounted read/write" if [ $? -eq 0 ]; then rm -f /fastboot /forcefsck fi fi ;; esac case "$root_opts" in *,shared,*|*,rshared,*) ebegin "Making root filesystem shared" case "$RC_UNAME" in Linux) mount --make-rshared / ;; *) ewarn "Ignoring 'shared' option for / on non-linux" ;; esac eend $? "Root filesystem could not be made shared" ;; esac ebegin "Remounting filesystems" local mountpoint for mountpoint in $(fstabinfo); do case "${mountpoint}" in /*) # Don't remount swap etc. mountinfo -q "${mountpoint}" && \ fstabinfo --remount "${mountpoint}" ;; esac done eend 0 } #!/sbin/openrc-run # Copyright (c) 2016 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. supervisor=supervise-daemon command=/usr/bin/runsvdir pidfile="/var/run/${RC_SVCNAME}.pid" command_args="-P $RC_SVCDIR/sv 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'" start_pre() { checkpath -m 0755 -o root:root -d ${RC_SVCDIR}/sv } #!/sbin/openrc-run # Copyright (c) 2025 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. # We currently start the s6 supervision tree as an # openrc service. It's using ssd for now; we may # switch to supervise-daemon later. command="${RC_LIBEXECDIR}/sh/s6-svscanboot.sh" command_args="$RC_SVCDIR" command_background=yes pidfile=/var/run/s6-svscan.pid umask=022 notify=fd:4 depend() { need localmount } _stop_and_crop() { if s6-svok "$1" 2>/dev/null ; then s6-svc -dwD -kx -- "$1" fi rm -rf -- "$1/supervise" "$1/event" } stop_post() { local scandir="$RC_SVCDIR/s6-scan" servicedirs="$RC_SVCDIR/s6-services" rm -rf -- "$scandir" if test -d "$servicedirs" ; then ebegin "Cleaning stray supervised processes" for i in `ls -1 "$servicedirs"` ; do _stop_and_crop "$servicedirs/$i" & if test -d "$servicedirs/$i/log" ; then _stop_and_crop "$servicedirs/$i/log" & fi done wait eend 0 if test -d "$RC_CACHEDIR" ; then ebegin "Storing service directories in cache" rm -rf -- "$RC_CACHEDIR/s6-services" cp -pPR -- "$servicedirs" "$RC_CACHEDIR/" eend $? fi fi } #!/sbin/openrc-run # Copyright (c) 2018 Sony Interactive Entertainment, Inc. # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Save the keymap for use as early as possible" depend() { need termencoding after bootmisc clock keymaps keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu -wsl } start() { # Save the keymapping for use immediately at boot ebegin "Saving key mapping" if checkpath -W "$RC_LIBEXECDIR"; then mkdir -p "$RC_LIBEXECDIR"/console dumpkeys >"$RC_LIBEXECDIR"/console/keymap fi eend $? "Unable to save keymapping" } #!/sbin/openrc-run # Copyright (c) 2018 Sony Interactive Entertainment, Inc. # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Configures terminal encoding." ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} : "${unicode:=${UNICODE}}" depend() { keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu -wsl use root after bootmisc clock termencoding } start() { ebegin "Saving terminal encoding" # Save the encoding for use immediately at boot if checkpath -W -m 0755 -d "$RC_CACHEDIR" 2>/dev/null; then mkdir -p "$RC_CACHEDIR"/console if yesno ${unicode:-yes}; then echo "" > "$RC_CACHEDIR"/console/unicode else rm -f "$RC_CACHEDIR"/console/unicode fi fi eend 0 } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Saves the caches OpenRC uses to non volatile storage" start() { if [ -e "$RC_SVCDIR"/clock-skewed ]; then ewarn "Clock skew detected!" if ! yesno "${RC_GOINGDOWN}"; then eerror "Not saving deptree cache" return 1 fi fi if ! checkpath -W -m 0755 -d "$RC_CACHEDIR" 2>/dev/null; then eerror "Unable to save dependency cache" if yesno "${RC_GOINGDOWN}"; then return 0 fi return 1 fi ebegin "Saving dependency cache" local rc=0 save= for x in depconfig deptree rc.log shutdowntime init.d conf.d; do [ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x" done if [ -n "$save" ]; then cp -pr $save "$RC_CACHEDIR" rc=$? fi eend $rc "Unable to save dependency cache" if yesno "${RC_GOINGDOWN}"; then return 0 fi } #!/sbin/openrc-run # Copyright (c) 2007-2022 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Initializes the random number generator." depend() { after clock need localmount keyword -docker -podman -jail -lxc -openvz -prefix -systemd-nspawn -wsl provide urandom } seedrng_with_options() { set -- [ -n "${seed_dir}" ] && set -- "$@" --seed-dir "${seed_dir}" yesno "${skip_credit}" && set -- "$@" --skip-credit seedrng "$@" } start() { ebegin "Seeding random number generator" seedrng_with_options eend $? "Error seeding random number generator" return 0 } stop() { ebegin "Saving random number generator seed" seedrng_with_options eend $? "Error saving random number generator seed" return 0 } #!/sbin/openrc-run # Copyright (c) 2009-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. # This script was inspired by the equivalent rc.d staticroute from NetBSD. description="Configures static routes." __nl=" " depend() { after clock provide net use network keyword -jail -prefix -vserver } pre_flight_checks() { route=route [ -s /etc/route.conf ] && return 0 if [ -n "$staticiproute" ]; then route="ip route" staticroute="$staticiproute" fi } dump_args() { # Route configuration file, as used by the NetBSD RC system if [ -s /etc/route.conf ]; then cat /etc/route.conf return $? fi case "$staticroute" in *"$__nl"*) echo "$staticroute" ;; *) ( set -o noglob IFS=';'; set -- $staticroute IFS="$__nl"; echo "$*" ) ;; esac } do_routes() { local xtra= family= [ "$RC_UNAME" != Linux ] && xtra=-q ebegin "$1 static routes" eindent pre_flight_checks dump_args | while read args; do [ -z "$args" ] && continue case "$args" in "#"*) ;; "+"*) [ $2 = "add" ] && eval ${args#*+} ;; "-"*) [ $2 = "del" -o $2 = "delete" ] && eval ${args#*-} ;; *) veinfo "$args" case "$route" in "ip route") ip route $2 $args ;; *) # Linux route does cannot work it out ... if [ "$RC_UNAME" = Linux ]; then case "$args" in *:*) family="-A inet6";; *) family=;; esac fi route $family $xtra $2 -$args ;; esac veend $? esac done eoutdent eend 0 } start() { do_routes "Adding" "add" } stop() { local cmd="delete" [ "$RC_UNAME" = Linux ] && cmd="del" do_routes "Deleting" "$cmd" } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. depend() { after clock root before localmount keyword -docker -podman -jail -lxc -openvz -prefix -systemd-nspawn -vserver -wsl } start() { ebegin "Activating swap devices" case "$RC_UNAME" in NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;; *) swapon -a >/dev/null;; esac eend 0 # If swapon has nothing todo it errors, so always return 0 } stop() { ebegin "Deactivating swap devices" case "$RC_UNAME" in NetBSD|OpenBSD) swapctl -U -t noblk >/dev/null;; *) swapoff -a >/dev/null;; esac eend 0 } #!/sbin/openrc-run # Copyright (c) 2009-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Sets the local clock to the mtime of a given file." swclock_file="${swclock_file:-/var/lib/misc/openrc-shutdowntime}" depend() { provide clock keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu -wsl } # swclock is an OpenRC built in start() { ebegin "Setting the local clock based on last shutdown time" if ! swclock "${swclock_file}" 2> /dev/null; then swclock --warn /sbin/openrc-run fi eend $? } stop() { ebegin "Saving the shutdown time" swclock --save "${swclock_file}" eend $? } #!/sbin/openrc-run depend() { after clock before bootmisc logger keyword -prefix -systemd-nspawn -vserver } start() { local quiet retval=0 status ebegin "Configuring kernel parameters" yesno $rc_verbose || quiet=-q eindent for f in /lib/sysctl.d/*.conf \ /usr/lib/sysctl.d/*.conf; do if [ -f /etc/sysctl.d/"${f##*/}" ]; then veinfo "Ignoring $f due to /etc/sysctl.d/${f##*/}" continue fi if [ -f /run/sysctl.d/"${f##*/}" ]; then veinfo "Ignoring $f due to /run/sysctl.d/${f##*/}" continue fi if [ -f "$f" ]; then vebegin "applying $f" sysctl $quiet -p "$f" status=$? if [ $status -gt 0 ]; then # Don't change retval= since we expect some package/distro provided # sysctl configurations to break, so just warn when the user wants # verbose messages vewarn "Unable to configure kernel parameters from $f" fi fi done for f in /etc/sysctl.d/*.conf; do if [ -f /run/sysctl.d/"${f##*/}" ]; then veinfo "Ignoring $f due to /run/sysctl.d/${f##*/}" continue fi if [ -f "$f" ]; then vebegin "applying $f" sysctl $quiet -p "$f" status=$? if [ $status -gt 0 ]; then retval=$(( $retval + $status )) eerror "Unable to configure kernel parameters from $f" fi fi done if [ -f /etc/sysctl.conf ]; then vebegin "applying /etc/sysctl.conf" sysctl $quiet -p /etc/sysctl.conf status=$? if [ $status -gt 0 ]; then retval=$(( $retval + $status )) eerror "Unable to configure kernel parameters from /etc/sysctl.conf" fi fi for f in /run/sysctl.d/*.conf; do if [ -f "$f" ]; then vebegin "applying $f" sysctl $quiet -p "$f" status=$? if [ $status -gt 0 ]; then retval=$(( $retval + $status )) eerror "Unable to configure kernel parameters from $f" fi fi done eoutdent eend $retval } #!/sbin/openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Mount the sys filesystem." sysfs_opts=nodev,noexec,nosuid depend() { keyword -docker -podman -lxc -prefix -systemd-nspawn -vserver -wsl } mount_sys() { grep -Eq "[[:space:]]+sysfs$" /proc/filesystems || return 1 mountinfo -q /sys && return 0 if [ ! -d /sys ]; then if ! mkdir -m 0755 /sys; then ewarn "Could not create /sys!" return 1 fi fi ebegin "Mounting /sys" if ! fstabinfo --mount /sys; then mount -n -t sysfs -o ${sysfs_opts} sysfs /sys fi eend $? } mount_misc() { # Setup Kernel Support for securityfs if [ -d /sys/kernel/security ] && \ ! mountinfo -q /sys/kernel/security; then if grep -qs securityfs /proc/filesystems; then ebegin "Mounting security filesystem" mount -n -t securityfs -o ${sysfs_opts} \ securityfs /sys/kernel/security eend $? fi fi # Setup Kernel Support for debugfs if [ -d /sys/kernel/debug ] && ! mountinfo -q /sys/kernel/debug; then if grep -qs debugfs /proc/filesystems; then ebegin "Mounting debug filesystem" mount -n -t debugfs -o ${sysfs_opts} debugfs /sys/kernel/debug eend $? fi fi # Setup Kernel Support for tracefs if [ -d /sys/kernel/tracing ] && ! mountinfo -q /sys/kernel/tracing; then if grep -qs tracefs /proc/filesystems; then ebegin "Mounting trace filesystem" mount -n -t tracefs -o ${sysfs_opts} tracefs /sys/kernel/tracing eend $? fi fi # Setup Kernel Support for configfs if [ -d /sys/kernel/config ] && ! mountinfo -q /sys/kernel/config; then if grep -qs configfs /proc/filesystems; then ebegin "Mounting config filesystem" mount -n -t configfs -o ${sysfs_opts} configfs /sys/kernel/config eend $? fi fi # set up kernel support for fusectl if [ -d /sys/fs/fuse/connections ] \ && ! mountinfo -q /sys/fs/fuse/connections; then if grep -qs fusectl /proc/filesystems; then ebegin "Mounting fuse control filesystem" mount -n -t fusectl -o ${sysfs_opts} \ fusectl /sys/fs/fuse/connections eend $? fi fi # Setup Kernel Support for SELinux if [ -d /sys/fs/selinux ] && ! mountinfo -q /sys/fs/selinux; then if grep -qs selinuxfs /proc/filesystems; then ebegin "Mounting SELinux filesystem" mount -t selinuxfs selinuxfs /sys/fs/selinux eend $? fi fi # Setup Kernel Support for persistent storage if [ -d /sys/fs/pstore ] && ! mountinfo -q /sys/fs/pstore; then if grep -qs 'pstore$' /proc/filesystems; then ebegin "Mounting persistent storage (pstore) filesystem" mount -t pstore pstore -o ${sysfs_opts} /sys/fs/pstore eend $? fi fi # set up kernel support for efivarfs if [ -d /sys/firmware/efi/efivars ] && ! mountinfo -q /sys/firmware/efi/efivars; then ebegin "Mounting efivarfs filesystem" mount -n -t efivarfs -o ${sysfs_opts} \ efivarfs /sys/firmware/efi/efivars 2> /dev/null eend 0 fi # set up kernel support for bpf filesystem if [ -d /sys/fs/bpf ] && ! mountinfo -q /sys/fs/bpf; then if grep -qs 'bpf$' /proc/filesystems; then ebegin "Mounting bpf filesystem" mount -n -t bpf -o ${sysfs_opts} bpf /sys/fs/bpf eend $? fi fi } restorecon_sys() { if [ -x /sbin/restorecon ]; then ebegin "Restoring SELinux contexts in /sys" restorecon -F /sys/devices/system/cpu/online >/dev/null 2>&1 eend $? fi } start() { mount_sys mount_misc restorecon_sys return 0 } #!/sbin/openrc-run description="Set sysfs variables from /etc/sysfs.conf and /etc/sysfs.d/*.conf" conffile=/etc/sysfs.conf confdir=/etc/sysfs.d depend() { need sysfs } setval() { local value="$1" attrib="$2" # Some fields need a terminating newline, others # need the terminating newline to be absent :-( echo -n "$value" > "$attrib" 2>/dev/null \ || echo "$value" > "$attrib" } load_conffile() { local file="$1" while read line; do local line=${line%%#*} local cmd= attrib= value= set -- $line if [ $# -eq 0 ]; then continue fi case "$1$3" in mode=) cmd=chmod attrib="$2" value="$4" ;; owner=) cmd=chown attrib="$2" value="$4" ;; *) if [ "$2" = "=" ]; then cmd=setval attrib="$1" value="$3" fi ;; esac if ! [ -e "/sys/$attrib" ]; then eerror "$attrib: unknown attribute" continue fi if [ -z "$attrib" ] || [ -z "$value" ]; then eerror "syntax error in $file: '$line'" continue fi $cmd "$value" "/sys/$attrib" done < "$file" } start() { [ -r "$conffile" -o -d "$confdir" ] || return 0 ebegin "Setting sysfs variables" for file in $confdir/*.conf $conffile; do [ -r "$file" ] || continue load_conffile "$file" || return 1 done eend 0 } #!/sbin/openrc-run # Copyright (c) 2008-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. description="Configures terminal encoding." ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} : "${unicode:=${UNICODE}}" depend() { keyword -docker -podman -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu -wsl after devfs } start() { local ttydev=/dev/tty n= [ -d /dev/vc ] && ttydev=/dev/vc/ # Set terminal encoding to either ASCII or UNICODE. # See utf-8(7) for more information. local termencoding="%@" termmsg="ASCII" if yesno ${unicode:-yes}; then termencoding="%G" termmsg="UTF-8" fi ebegin "Setting terminal encoding [$termmsg]" n=1 while [ ${n} -le "$ttyn" ]; do printf "\033%s" "$termencoding" >$ttydev$n : $(( n += 1 )) done # Save the encoding for use immediately at boot if checkpath -W -m 0755 -d "$RC_CACHEDIR"; then mkdir -p "$RC_CACHEDIR"/console if yesno ${unicode:-yes}; then echo "" > "$RC_CACHEDIR"/console/unicode else rm -f "$RC_CACHEDIR"/console/unicode fi fi eend 0 } This directory should contain programs or scripts which are to be run when the local service is started or stopped. If a file in this directory is executable and it has a .start extension, it will be run when the local service is started. If a file is executable and it has a .stop extension, it will be run when the local service is stopped. All files are processed in lexical order. Keep in mind that files in this directory are processed sequentially, and the local service is not considered started or stopped until everything is processed, so if you have a process which takes a long time to run, it can delay your boot or shutdown processing. /var/log/rc.log { missingok notifempty } # Global OpenRC configuration settings # Set to "YES" if you want the rc system to try and start services # in parallel for a slight speed improvement. When running in parallel we # prefix the service output with its name as the output will get # jumbled up. # WARNING: whilst we have improved parallel, it can still potentially lock # the boot process. Don't file bugs about this unless you can supply # patches that fix it without breaking other things! #rc_parallel="NO" # Set rc_interactive to "YES" and you'll be able to press the I key during # boot so you can choose to start specific services. Set to "NO" to disable # this feature. This feature is automatically disabled if rc_parallel is # set to YES. #rc_interactive="YES" # Set to "NO" if you don't want pam_openrc autostarting user services. This # effectively disables the pam module, without the need of removing it from # the pam configuration files. #rc_autostart_user="YES" # If we need to drop to a shell, you can specify it here. # If not specified we use $SHELL, otherwise the one specified in /etc/passwd, # otherwise /bin/sh # Linux users could specify /sbin/sulogin #rc_shell=/bin/sh # Do we allow any started service in the runlevel to satisfy the dependency # or do we want all of them regardless of state? For example, if net.eth0 # and net.eth1 are in the default runlevel then with rc_depend_strict="NO" # both will be started, but services that depend on 'net' will work if either # one comes up. With rc_depend_strict="YES" we would require them both to # come up. #rc_depend_strict="YES" # rc_hotplug controls which services we allow to be hotplugged. # A hotplugged service is one started by a dynamic dev manager when a matching # hardware device is found. # Hotplugged services appear in the "hotplugged" runlevel. # If rc_hotplug is set to any value, we compare the name of this service # to every pattern in the value, from left to right, and we allow the # service to be hotplugged if it matches a pattern, or if it matches no # patterns. Patterns can include shell wildcards. # To disable services from being hotplugged, prefix patterns with "!". #If rc_hotplug is not set or is empty, all hotplugging is disabled. # Example - rc_hotplug="net.wlan !net.*" # This allows net.wlan and any service not matching net.* to be hotplugged. # Example - rc_hotplug="!net.*" # This allows services that do not match "net.*" to be hotplugged. # rc_logger launches a logging daemon to log the entire rc process to # /var/log/rc.log # NOTE: Linux systems require the devfs service to be started before # logging can take place and as such cannot log the sysinit runlevel. #rc_logger="NO" # Through rc_log_path you can specify a custom log file. # The default value is: /var/log/rc.log #rc_log_path="/var/log/rc.log" # If you want verbose output for OpenRC, set this to yes. If you want # verbose output for service foo only, set it to yes in /etc/conf.d/foo. #rc_verbose=no # By default we filter the environment for our running scripts. To allow other # variables through, add them here. Use a * to allow all variables through. #rc_env_allow="VAR1 VAR2" # By default we assume that all daemons will start correctly. # However, some do not - a classic example is that they fork and return 0 AND # then child barfs on a configuration error. Or the daemon has a bug and the # child crashes. You can set the number of milliseconds start-stop-daemon # waits to check that the daemon is still running after starting here. # The default is 0 - no checking. #rc_start_wait=100 # rc_nostop is a list of services which will not stop when changing runlevels. # This still allows the service itself to be stopped when called directly. #rc_nostop="" # rc will attempt to start crashed services by default. # However, it will not stop them by default as that could bring down other # critical services. #rc_crashed_stop=NO #rc_crashed_start=YES # Set rc_nocolor to yes if you do not want colors displayed in OpenRC # output. #rc_nocolor=NO ############################################################################## # MISC CONFIGURATION VARIABLES # There variables are shared between many init scripts # Set unicode to NO to turn off unicode support for keyboards and screens. #unicode="YES" # This is how long fuser should wait for a remote server to respond. The # default is 60 seconds, but it can be adjusted here. #rc_fuser_timeout=60 # Below is the default list of network fstypes. # # afs ceph cifs coda davfs fuse fuse.glusterfs fuse.sshfs gfs glusterfs lustre # ncpfs nfs nfs4 ocfs2 shfs smbfs # # If you would like to add to this list, you can do so by adding your # own fstypes to the following variable. #extra_net_fs_list="" ############################################################################## # SERVICE CONFIGURATION VARIABLES # These variables are documented here, but should be configured in # /etc/conf.d/foo for service foo and NOT enabled here unless you # really want them to work on a global basis. # If your service has characters in its name which are not legal in # shell variable names and you configure the variables for it in this # file, those characters should be replaced with underscores in the # variable names as shown below. # Some daemons are started and stopped via start-stop-daemon. # We can set some things on a per service basis, like the nicelevel. # These need to be exported #export SSD_NICELEVEL="0" # Or the ionice level. The format is class[:data] , just like the # --ionice start-stop-daemon parameter. #export SSD_IONICELEVEL="0:0" # Or the OOM score adjustment. #export SSD_OOM_SCORE_ADJ="0" # Pass ulimit parameters # If you are using bash in POSIX mode for your shell, note that the # ulimit command uses a block size of 512 bytes for the -c and -f # options #rc_ulimit="-u 30" # It's possible to define extra dependencies for services like so #rc_config="/etc/foo" #rc_need="openvpn" #rc_use="net.eth0" #rc_after="clock" #rc_before="local" #rc_provide="!net" # You can also enable the above commands here for each service. Below is an # example for service foo. #rc_foo_config="/etc/foo" #rc_foo_need="openvpn" #rc_foo_after="clock" # Below is an example for service foo-bar. Note that the '-' is illegal # in a shell variable name, so we convert it to an underscore. # example for service foo-bar. #rc_foo_bar_config="/etc/foo-bar" #rc_foo_bar_need="openvpn" #rc_foo_bar_after="clock" # You can also remove dependencies. # This is mainly used for saying which services do NOT provide net. #rc_net_tap0_provide="!net" # This is the subsystem type. # It is used to match against keywords set by the keyword call in the # depend function of service scripts. # # It should be set to the value representing the environment this file is # PRESENTLY in, not the virtualization the environment is capable of. # If it is commented out, automatic detection will be used. # # The list below shows all possible settings as well as the host # operating systems where they can be used and autodetected. # # "" - nothing special # "docker" - Docker container manager (Linux) # "podman" - Podman container manager (Linux) # "jail" - Jail (DragonflyBSD or FreeBSD) # "lxc" - Linux Containers # "openvz" - Linux OpenVZ # "prefix" - Prefix # "rkt" - CoreOS container management system (Linux) # "subhurd" - Hurd subhurds (to be checked) # "systemd-nspawn" - Container created by systemd-nspawn (Linux) # "uml" - Usermode Linux # "vserver" - Linux vserver # "xen0" - Xen0 Domain (Linux and NetBSD) # "xenU" - XenU Domain (Linux and NetBSD) #rc_sys="" # if you use openrc-init, which is currently only available on Linux, # this is the default runlevel to activate after "sysinit" and "boot" # when booting. #rc_default_runlevel="default" # on Linux and Hurd, this is the number of ttys allocated for logins # It is used in the consolefont, keymaps, numlock and termencoding # service scripts. rc_tty_number=12 ############################################################################## # LINUX CGROUPS RESOURCE MANAGEMENT # This sets the mode used to mount cgroups. # "hybrid" mounts cgroups version 2 on /sys/fs/cgroup/unified and # cgroups version 1 on /sys/fs/cgroup. # "legacy" mounts cgroups version 1 on /sys/fs/cgroup # "unified" mounts cgroups version 2 on /sys/fs/cgroup #rc_cgroup_mode="unified" # This is a list of controllers which should be enabled for cgroups version 2 # when hybrid mode is being used. # Controllers listed here will not be available for cgroups version 1. #rc_cgroup_controllers="" # This variable contains the cgroups version 2 settings for your services. # If this is set in this file, the settings will apply to all services. # If you want different settings for each service, place the settings in # /etc/conf.d/foo for service foo. # The format is to specify the setting and value followed by a newline. # Multiple settings and values can be specified. # For example, you would use this to set the maximum memory and maximum # number of pids for a service. #rc_cgroup_settings=" #memory.max 10485760 #pids.max max #" # # For more information about the adjustments that can be made with # cgroups version 2, see Documentation/cgroups-v2.txt in the linux kernel # source tree. #rc_cgroup_settings="" # This switch controls whether or not cgroups version 1 controllers are # individually mounted under # /sys/fs/cgroup in hybrid or legacy mode. #rc_controller_cgroups="YES" # The following setting turns on the memory.use_hierarchy setting in the # root memory cgroup for cgroups v1. # It must be set to yes in this file if you want this functionality. #rc_cgroup_memory_use_hierarchy="NO" # The following settings allow you to set up values for the cgroups version 1 # controllers for your services. # They can be set in this file;, however, if you do this, the settings # will apply to all of your services. # If you want different settings for each service, place the settings in # /etc/conf.d/foo for service foo. # The format is to specify the names of the settings followed by their # values. Each variable can hold multiple settings. # For example, you would use this to set the cpu.shares setting in the # cpu controller to 512 for your service. # rc_cgroup_cpu=" # cpu.shares 512 # " # # For more information about the adjustments that can be made with # cgroups version 1, see Documentation/cgroups-v1/* in the linux kernel # source tree. # Set the blkio controller settings for this service. #rc_cgroup_blkio="" # Set the cpu controller settings for this service. #rc_cgroup_cpu="" # Add this service to the cpuacct controller (any value means yes). #rc_cgroup_cpuacct="" # Set the cpuset controller settings for this service. #rc_cgroup_cpuset="" # Set the devices controller settings for this service. #rc_cgroup_devices="" # Set the hugetlb controller settings for this service. #rc_cgroup_hugetlb="" # Set the memory controller settings for this service. #rc_cgroup_memory="" # Set the net_cls controller settings for this service. #rc_cgroup_net_cls="" # Set the net_prio controller settings for this service. #rc_cgroup_net_prio="" # Set the pids controller settings for this service. #rc_cgroup_pids="" # Set this to YES if you want all of the processes in a service's cgroup # killed when the service is stopped or restarted. # Be aware that setting this to yes means all of a service's # child processes will be killed. Keep this in mind if you set this to # yes here instead of for the individual services in # /etc/conf.d/. # To perform this cleanup manually for a stopped service, you can # execute cgroup_cleanup with /etc/init.d/ cgroup_cleanup or # rc-service cgroup_cleanup. # If the kernel includes support for cgroup2's cgroup.kill, this is used # to reliably teardown the cgroup. # If this fails, the process followed in this cleanup is the following: # 1. send stopsig (sigterm if it isn't set) to all processes left in the # cgroup immediately followed by sigcont. # 2. Send sighup to all processes in the cgroup if rc_send_sighup is # yes. # 3. delay for rc_timeout_stopsec seconds. # 4. send sigkill to all processes in the cgroup unless disabled by # setting rc_send_sigkill to no. # rc_cgroup_cleanup="NO" # If this is yes, we will send sighup to the processes in the cgroup # immediately after stopsig and sigcont. #rc_send_sighup="NO" # This is the amount of time in seconds that we delay after sending sigcont # and optionally sighup, before we optionally send sigkill to all # processes in the # cgroup. # The default is 90 seconds. #rc_timeout_stopsec="90" # If this is set to no, we do not send sigkill to all processes in the # cgroup. #rc_send_sigkill="YES" ############################################################################## # SUPERVISE DAEMON CONFIGURATION VARIABLES # These variables sets more reasonable defaults for supervise-daemon(8). # They may be overriden on a per service basis. # Wait this number of seconds before restarting a daemon after it crashes. respawn_delay=2 # Sets the maximum number of times a daemon will be respawned during a respawn # period. If a daemon dies more than this number of times during a respawn # period, supervise-daemon(8) will give up trying to respawn it and exit. # 0 means unlimited. respawn_max=5 # Sets the length in seconds of a respawn period. respawn_period=1800 Kernel system variables configuration files Files found under the /etc/sysctl.d directory that end with .conf are parsed within sysctl(8) at boot time. If you want to set kernel variables you can either edit /etc/sysctl.conf or make a new file. The filename isn't important, but don't make it a package name as it may clash with something the package builder needs later. The file name must end with .conf, or it will not be read. The recommended location for local system settings is /etc/sysctl.d/local.conf but as long as you follow the rules for the name of the file, anything will work. see the sysctl.conf(5) man page for details of the format. This manpage can be found in the `procps-doc` package. #!/bin/sh # Copyright (c) 2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. # Define variables scandir="/run/openrc/s6-scan" statfile=/dev/shm/s6-svstat.${USER} color_red='\E[01;31m' color_green='\E[32m' color_yellow='\E[01;33m' # Time Modules uptimeModules() { # Given a single integer argument representing seconds of uptime... # convert uptime to a friendly human readable string: '2d 16h 58m 46s' # define a variable to keep track of the longest length uptime string uSec=${1:-0} uDay=$(( $uSec / 86400 )) uSec=$(( $uSec % 86400 )) uHour=$(( $uSec / 3600 )) uSec=$(( $uSec % 3600 )) uMin=$(( $uSec / 60 )) uSec=$(( $uSec % 60 )) [ $uDay -ne 0 ] && pDay="${uDay}d " || pDay="" [ $uHour -ne 0 ] && pHour="${uHour}h " || pHour="" [ $uMin -ne 0 ] && pMin="${uMin}m " || pMin="" [ $uSec -ne 0 ] && pSec="${uSec}s " || pSec="" parsedUptime="$( echo ${pDay}${pHour}${pMin}${pSec} | sed 's#[ \t]*$##' )" uCharCount=${#parsedUptime} } # Make sure we are running as root if [ $(id -u) != 0 ]; then printf "This command must be run as root\n" exit 1 fi # Make sure scandir exists if [ ! -d $scandir ]; then printf "%s\n" "$scandir does not exist" exit 1 fi # Make sure s6-svscan is running if ! pgrep s6-svscan >/dev/null ; then printf "s6-svscan is not running\n" exit 1 fi # If TERM is undefined (launching sstat through an ssh command) then make it vt100 if [ -z $TERM -o $TERM = "dumb" ]; then export TERM=vt100 fi # Gather list of candidate services s6-supervise may be supervising # filter for folders and symlinks at /run/openrc/s6-scan/* omitting output starting with '.' services="$(find $scandir -maxdepth 1 -mindepth 1 \( -type d -or -type l \) | awk -F'/' '{ if ( $NF !~ "^\\." ) print $NF}')" if [ -z "$services" ]; then printf "s6 found no services configured for supervision\n" exit 1 fi # Gather status for each service from s6-svstat # write to tmp file in memory for non I/O bound repetitive access rm -f $statfile 2>/dev/null for service in $services ; do echo "$service $(s6-svstat ${scandir}/${service})" >> $statfile done # Define longest string from parsed uptime (default to 7 to match string length of 'Up Time') timeStringLength=7 for uptime in $(awk '$2 == "up" {print $5}' $statfile | sort -run) do uptimeModules $uptime [ ${uCharCount} -gt $timeStringLength ] && timeStringLength=$uCharCount done # Print the status header like so... # Service Name State PID Up Time Start Time #---------------------------- ----- ----- -------------- ------------------- printf "\n" printf "%28s %5s %5s %${timeStringLength}s %19s\n" "Service Name" "State" "PID" "Up Time" "Start Time" for dashes in 28 5 5 $timeStringLength 19 ; do printf "%0.s-" $(seq 1 $dashes) ; echo -n ' ' done && printf "\n" # sshd up (pid 26300) 80373 seconds cat $statfile | \ while read line do set $line service=$1 state=$2 pid=${4/)/} time=$5 # call function to convert time in seconds and define additional variables uptimeModules $time if [ "$state" = up ]; then if [ $time -lt 30 ]; then # uptime < 30 seconds, color the whole line yellow echo -en "$color_yellow" # 1st 4 columns are printed with printf for space padding printf "%28s %5s %5s %${timeStringLength}s" $service $state $pid "$parsedUptime" # 4th column is output from date -d echo -e " $(date -d "${time} seconds ago" "+%F %T")" # reset terminal colors tput sgr0 else printf "%28s" $service # uptime > 30 seconds, color just the "state" value green echo -en "$color_green" printf " %5s" $state # reset terminal colors tput sgr0 printf " %5s" $pid printf " %${timeStringLength}s" "$parsedUptime" echo -e " $(date -d "${time} seconds ago" "+%F %T")" fi else printf "%28s" $service echo -en "$color_red" printf " %5s" $state tput sgr0 echo "" fi done # Cleanup rm -f $statfile 2>/dev/null printf "\n\n" rc-status #!/bin/sh # Detect AC power or not in a portable way # Exit 0 if on AC power, 1 if not and 255 if we don't know how to work it out # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. if [ -f /proc/acpi/ac_adapter/*/state ]; then cat /proc/acpi/ac_adapter/*/state | while read line; do case "$line" in "state:"*"off-line") exit 128;; esac done elif [ -d /sys/class/power_supply ]; then for dir in /sys/class/power_supply/*/; do [ "$(cat "${dir}/type")" != "Mains" ] && continue [ "$(cat "${dir}/online")" = 0 ] && exit 128 done elif [ -f /proc/pmu/info ]; then cat /proc/pmu/info | while read line; do case "$line" in "AC Power"*": 0") exit 128;; esac done elif command -v envstat >/dev/null 2>&1; then # NetBSD has envstat envstat -d acpiacad0 2>/dev/null | while read line; do case "$line" in "connected:"*"OFF") exit 128;; esac done elif sysctl -q hw.acpi.acline >/dev/null 2>/dev/null; then case $(sysctl -n hw.acpi.acline) in 0) exit 1;; *) exit 0;; esac else exit 255 fi [ $? != 128 ] #!/bin/sh # This is a reimplementation of the systemd binfmt.d code to register # misc binary formats with the kernel. # # See the binfmt.d manpage as well: # http://0pointer.de/public/systemd-man/binfmt.d.html # This script should match the manpage as of 2015/03/31 # Copyright (c) 2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. apply_file() { [ $# -lt 1 ] && return 0 FILE="$1" LINENUM=0 ### FILE FORMAT ### # See https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html while read -r line; do LINENUM=$(( LINENUM+1 )) case $line in \#*) continue ;; \;*) continue ;; '') continue ;; esac local reg=${line#*:} [ -e /proc/sys/fs/binfmt_misc/${reg%%:*} ] && echo -1 > /proc/sys/fs/binfmt_misc/${reg%%:*} echo "${line}" > /proc/sys/fs/binfmt_misc/register rc=$? if [ $rc -ne 0 ]; then printf "binfmt: invalid entry on line %d of \`%s'\n" \ "$LINENUM" "$FILE" >&2 error=1 fi done <$FILE return $rc } [ -e /proc/sys/fs/binfmt_misc/register ] || exit 0 error=0 if [ $# -gt 0 ]; then while [ $# -gt 0 ]; do apply_file "$1" shift done else # The hardcoding of these paths is intentional; we are following the # systemd spec. binfmt_dirs='/usr/lib/binfmt.d/ /usr/local/lib/binfmt.d/ /run/binfmt.d/ /etc/binfmt.d/' binfmt_basenames='' binfmt_d='' # Build a list of sorted unique basenames # directories declared later in the binfmt_d list will override earlier # directories, on a per file basename basis. # `/run/binfmt.d/foo.conf' supersedes `/usr/lib/binfmt.d/foo.conf'. # `/run/binfmt.d/foo.conf' will always be read after `/etc/binfmt.d/bar.conf' for d in ${binfmt_dirs} ; do [ -d $d ] && for f in ${d}/*.conf ; do case "${f##*/}" in systemd.conf|systemd-*.conf) continue;; esac [ -e $f ] && binfmt_basenames="${binfmt_basenames}\n${f##*/}" done # for f in ${d} done # for d in ${binfmt_dirs} binfmt_basenames="$(printf "${binfmt_basenames}\n" | sort -u )" for b in $binfmt_basenames ; do real_f='' for d in $binfmt_dirs ; do f=${d}/${b} [ -e "${f}" ] && real_f=$f done [ -e "${real_f}" ] && binfmt_d="${binfmt_d} ${real_f}" done # loop through the gathered fragments, sorted globally by filename. # `/run/binfmt.d/foo.conf' will always be read after `/etc/binfmt.d/bar.conf' for FILE in $binfmt_d ; do apply_file "$FILE" done fi exit $error # vim: set ts=2 sw=2 sts=2 noet ft=sh: #!/bin/sh # This is run by the kernel after the last task is removed from a # control group in the openrc hierarchy. # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. cgroup=/sys/fs/cgroup/openrc PATH=/bin:/usr/bin:/sbin:/usr/sbin if [ -d ${cgroup}/"$1" ]; then rmdir ${cgroup}/"$1" fi # Allow any sh script to work with einfo functions and friends # We also provide a few helpful functions for other programs to use # Copyright (c) 2007-2025 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. RC_GOT_FUNCTIONS="yes" eindent() { : $(( EINFO_INDENT = ${EINFO_INDENT:-0} + 2 )) export EINFO_INDENT } eoutdent() { : $(( EINFO_INDENT = ${EINFO_INDENT:-0} - 2 )) [ "$EINFO_INDENT" -lt 0 ] && EINFO_INDENT=0 return 0 } yesno() { [ -z "$1" ] && return 1 # Check the value directly so people can do: # yesno ${VAR} case "$1" in [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) return 0;; [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) return 1;; esac # Check the value of the var so people can do: # yesno VAR # Note: this breaks when the var contains a double quote. local value= eval value=\"\$$1\" case "$value" in [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) return 0;; [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) return 1;; *) vewarn "\$$1 is not set properly"; return 2;; esac } rc_runlevel() { rc-status --runlevel } _sanitize_path() { local IFS=":" p= path= for p in $PATH; do case "$p" in /usr/libexec/rc/bin|/usr/libexec/rc/sbin);; /bin|/sbin|/usr/bin|/usr/sbin);; /usr/bin|/usr/sbin);; /usr/local/bin|/usr/local/sbin);; *) path="$path${path:+:}$p";; esac done echo "$path" } # Allow our scripts to support zsh if [ -n "$ZSH_VERSION" ]; then emulate sh NULLCMD=: alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi # Make a sane PATH _PKG_PREFIX=/usr _LOCAL_PREFIX=/usr/local _LOCAL_PREFIX=${_LOCAL_PREFIX:-/usr/local} _PATH="/usr/libexec/rc/bin:/bin:/sbin:/usr/bin:/usr/sbin" if [ -n "$_PKG_PREFIX" ]; then _PATH="$_PATH:$_PKG_PREFIX/bin:$_PKG_PREFIX/sbin" fi if [ -n "$_LOCAL_PREFIX" ]; then _PATH="$_PATH:$_LOCAL_PREFIX/bin:$_LOCAL_PREFIX/sbin" fi _path="$(_sanitize_path "$PATH")" PATH="$_PATH${_path:+:}$_path" ; export PATH unset _sanitize_path _PREFIX _PKG_PREFIX _LOCAL_PREFIX _PATH _path for arg; do case "$arg" in --nocolor|--nocolour|-C) EINFO_COLOR="NO" ; export EINFO_COLOR ;; esac done if [ -t 1 ] && yesno "${EINFO_COLOR:-YES}"; then if [ -z "$GOOD" ]; then eval $(eval_ecolors) fi else # We need to have shell stub functions so our init scripts can remember # the last ecmd for _e in ebegin eend error errorn einfo einfon ewarn ewarnn ewend \ vebegin veend veinfo vewarn vewend; do eval "$_e() { local _r; command $_e \"\$@\"; _r=\$?; \ EINFO_LASTCMD=$_e; export EINFO_LASTCMD ; return \$_r; }" done unset _e fi #!/bin/sh # Shell wrapper to list our dependencies # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. . /usr/libexec/rc/sh/functions.sh . /usr/libexec/rc/sh/rc-functions.sh config() { [ -n "$*" ] && echo "$RC_SVCNAME config $*" >&3 } need() { [ -n "$*" ] && echo "$RC_SVCNAME ineed $*" >&3 } use() { [ -n "$*" ] && echo "$RC_SVCNAME iuse $*" >&3 } want() { [ -n "$*" ] && echo "$RC_SVCNAME iwant $*" >&3 } before() { [ -n "$*" ] && echo "$RC_SVCNAME ibefore $*" >&3 } after() { [ -n "$*" ] && echo "$RC_SVCNAME iafter $*" >&3 } provide() { [ -n "$*" ] && echo "$RC_SVCNAME iprovide $*" >&3 } keyword() { local c x set -- $* while [ -n "$*" ]; do case "$1" in -containers) x="$(_get_containers)" ;; !-containers) x="$(_get_containers_remove)" ;; *) x=$1 ;; esac c="${c}${x} " shift done [ -n "$c" ] && echo "$RC_SVCNAME keyword $c" >&3 } depend() { : } _done_dirs= for _dir in $RC_SCRIPTDIRS do _dir="$_dir/init.d" [ -d "$_dir" ] || continue # Don't do the same dir twice for _d in $_done_dirs; do [ "$_d" = "$_dir" ] && continue 2 done unset _d _done_dirs="$_done_dirs $_dir" cd "$_dir" for RC_SERVICE in *; do [ -x "$RC_SERVICE" -a -f "$RC_SERVICE" ] || continue # Only generate dependencies for OpenRC scripts read one two three <"$RC_SERVICE" case "$one" in \#*/openrc-run) ;; \#*/runscript) ;; \#!) case "$two" in */openrc-run) ;; */runscript) ;; *) continue ;; esac ;; *) continue ;; esac unset one two three RC_SVCNAME=${RC_SERVICE##*/} ; export RC_SVCNAME # Compat SVCNAME=$RC_SVCNAME ; export SVCNAME ( # Save stdout in fd3, then remap it to stderr exec 3>&1 1>&2 _rc_c=${RC_SVCNAME%%.*} if [ -n "$_rc_c" -a "$_rc_c" != "$RC_SVCNAME" ]; then if [ -e "$_dir/../conf.d/$_rc_c" ]; then . "$_dir/../conf.d/$_rc_c" fi fi unset _rc_c if [ -e "$_dir/../conf.d/$RC_SVCNAME" ]; then . "$_dir/../conf.d/$RC_SVCNAME" fi [ -e /etc/rc.conf ] && . /etc/rc.conf if [ -d "/etc/rc.conf.d" ]; then for _f in "/etc"/rc.conf.d/*.conf; do [ -e "$_f" ] && . "$_f" done fi if . "$_dir/$RC_SVCNAME"; then echo "$RC_SVCNAME" >&3 if [ -n "$supervisor" ] && [ "$supervisor" = s6 ]; then need s6-svscan fi _depend fi ) done done #!/bin/sh # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. : ${CONSOLE:=/dev/console} : ${RC_LIBEXECDIR:=/usr/libexec/rc} : ${RC_CACHEDIR:=/var/cache/rc} service_present() { local p="/etc/runlevels/$1/$2" # fail if the file doesn't exist [ ! -e "$p" ] && return 1 # succeed if $RC_SYS empty, can't check further, assume script will run [ -z "$RC_SYS" ] && return 0 # fail if file contains "-$RC_SYS", because then it won't run grep -Eqi "^[[:space:]]*keyword[[:space:]].*-$RC_SYS([[:space:]]|$)" "$p" && return 1 # succeed otherwise return 0 } if [ -e "$RC_CACHEDIR"/console/unicode ]; then termencoding="%G" kmode="-u" else termencoding="(K" kmode="-a" fi # Set the SELinux label on console before everything so we dont lose output [ -x /sbin/restorecon ] && /sbin/restorecon -F /dev/console # Try and set a font and as early as we can if service_present "$RC_DEFAULTLEVEL" consolefont || service_present "$RC_BOOTLEVEL" consolefont; then printf "\033%s" "$termencoding" >"$CONSOLE" 2>/dev/null if [ -r "$RC_CACHEDIR"/console/font ] && \ command -v setfont > /dev/null 2>&1; then [ -c "$CONSOLE" ] && cons="-C $CONSOLE" setfont $cons "$RC_CACHEDIR"/console/font 2>/dev/null fi fi # Try and set a keyboard map as early as possible if service_present "$RC_DEFAULTLEVEL" loadkeys || service_present "$RC_BOOTLEVEL" loadkeys; then kbd_mode $kmode -C "$CONSOLE" 2>/dev/null if [ -r "$RC_CACHEDIR"/console/keymap ]; then loadkeys -q "$RC_CACHEDIR"/console/keymap 2>/dev/null fi fi # Ensure we exit 0 so the boot continues exit 0 #!/bin/sh # Copyright (c) 1999-2007 Gentoo Foundation # Copyright (c) 2007-2009 Roy Marples # Released under the 2-clause BSD license. . "$RC_LIBEXECDIR"/sh/functions.sh [ -r "/etc/rc.conf" ] && . "/etc/rc.conf" if [ -d "/etc/rc.conf.d" ]; then for _f in "/etc"/rc.conf.d/*.conf; do [ -e "$_f" ] && . "$_f" done fi # check for md5sum, and probably /usr too if command -v md5sum >/dev/null; then got_md5sum=true else eerror "md5sum is missing, which suggests /usr is not mounted" eerror "If you have separate /usr, it must be mounted by initramfs" eerror "If not, you should check coreutils is installed correctly" got_md5sum=false fi # By default VServer already has /proc mounted, but OpenVZ does not! # However, some of our users have an old proc image in /proc # NFC how they managed that, but the end result means we have to test if # /proc actually works or not. We do this by comparing two reads of # /proc/self/environ for which we have set the variable VAR to two # different values. If the comparison comes back equal, we know that # /proc is not working. mountproc=true f=/proc/self/environ if [ -e $f ]; then if $got_md5sum && [ "$(VAR=a md5sum $f)" = "$(VAR=b md5sum $f)" ]; then eerror "You have cruft in /proc that should be deleted" else # If they don't have md5sum, this will fail in pretty ways if # /proc isn't really mounted. Oh well, their system is busted # anyway, and they get to keep the pieces. einfo "/proc is already mounted" mountproc=false fi fi unset f if $mountproc; then ebegin "Mounting /proc" if ! fstabinfo --mount /proc; then mount -n -t proc -o noexec,nosuid,nodev proc /proc fi eend $? fi # /run is a new directory for storing volatile runtime data. # Read more about /run at https://lwn.net/Articles/436012 sys="$(openrc --sys)" if [ ! -d /run ]; then if [ "$sys" = VSERVER ]; then if [ -e /run ]; then rm -rf /run fi mkdir /run else eerror "The /run directory does not exist. Unable to continue." return 1 fi fi if [ "$sys" = VSERVER ]; then rm -rf /run/* elif ! mountinfo -q /run; then ebegin "Mounting /run" run_mount_opts="mode=0755,nosuid,nodev,nr_inodes=800k,size=20%,strictatime" if ! fstabinfo --mount /run; then if ! mount -t tmpfs -o ${run_mount_opts} tmpfs /run; then eerror "Unable to mount tmpfs on /run." eerror "Can't continue." exit 1 fi fi eend fi checkpath -d "$RC_SVCDIR" checkpath -d -m 0775 -o root:uucp /run/lock # Try to mount xenfs as early as possible, otherwise rc_sys() will always # return RC_SYS_XENU and will think that we are in a domU while it's not. if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then ebegin "Mounting xenfs" if ! fstabinfo --mount /proc/xen; then mount -n -t xenfs xenfs /proc/xen -o nosuid,nodev,noexec fi eend $? fi if [ -d "$RC_CACHEDIR" ]; then cp -pr "$RC_CACHEDIR"/* "$RC_SVCDIR" 2>/dev/null fi echo sysinit >"$RC_SVCDIR"/softlevel [ -x /sbin/restorecon ] && /sbin/restorecon -rF /run exit 0 #!/bin/sh # Shell wrapper for openrc-run # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. verify_boot() { if [ ! -e ${RC_SVCDIR}/softlevel ]; then eerror "You are attempting to run an openrc service on a" eerror "system which openrc did not boot." eerror "You may be inside a chroot or you may have used" eerror "another initialization system to boot this system." eerror "In this situation, you will get unpredictable results!" eerror eerror "If you really want to do this, issue the following command:" eerror "touch ${RC_SVCDIR}/softlevel" exit 1 fi return 0 } sourcex() { if [ "$1" = "-e" ]; then shift [ -e "$1" ] || return 1 fi if ! . "$1"; then eerror "$RC_SVCNAME: error loading $1" exit 1 fi } apply_ulimits() { if [ $(( $# % 2 )) -eq 1 ]; then eerror "${RC_SVCNAME}: Invalid RC_ULIMIT setting" return 1 fi while [ $# -gt 0 ] ; do if ! ulimit "${1}" "${2}"; then eerror "${RC_SVCNAME}: unable to apply RC_ULIMIT settings" fi shift 2 done } sourcex "/usr/libexec/rc/sh/functions.sh" sourcex "/usr/libexec/rc/sh/rc-functions.sh" case $RC_SYS in PREFIX|SYSTEMD-NSPAWN) ;; *) yesno "$RC_USER_SERVICES" || sourcex -e "/usr/libexec/rc/sh/rc-cgroup.sh";; esac # Support LiveCD foo if sourcex -e "/sbin/livecd-functions.sh"; then livecd_read_commandline fi if [ $# != 2 ]; then eerror "$RC_SVCNAME: invalid arguments" exit 1 fi # So daemons know where to recall us if needed RC_SERVICE="$1" ; export RC_SERVICE shift # Compat SVCNAME=$RC_SVCNAME ; export SVCNAME # Dependency function config() { [ -n "$*" ] && echo "config $*" } need() { [ -n "$*" ] && echo "need $*" } use() { [ -n "$*" ] && echo "use $*" } want() { [ -n "$*" ] && echo "want $*" } before() { [ -n "$*" ] && echo "before $*" } after() { [ -n "$*" ] && echo "after $*" } provide() { [ -n "$*" ] && echo "provide $*" } keyword() { local c x set -- $* while [ -n "$*" ]; do case "$1" in -containers) x="$(_get_containers)" ;; !-containers) x="$(_get_containers_remove)" ;; *) x=$1 ;; esac c="${c}${x} " shift done [ -n "$c" ] && echo "keyword $c" } # Describe the init script to the user describe() { if [ -n "$description" ]; then einfo "$description" else ewarn "No description for $RC_SVCNAME" fi local svc= desc= for svc in ${extra_commands:-$opts} $extra_started_commands \ $extra_stopped_commands; do eval desc=\$description_$svc if [ -n "$desc" ]; then einfo "$HILITE$svc$NORMAL: $desc" else ewarn "$HILITE$svc$NORMAL: no description" fi done } # Report status _status() { if service_stopping; then ewarn "status: stopping" return 4 elif service_starting; then ewarn "status: starting" return 8 elif service_inactive; then ewarn "status: inactive" return 16 elif service_crashed; then eerror "status: crashed" return 32 elif service_started; then einfo "status: started" return 0 else einfo "status: stopped" return 3 fi } # These functions select the appropriate function to call from the # supervisor modules default_start() { local func=ssd_start case "$supervisor" in runit) func=runit_start ;; s6) func=s6_start ;; supervise-daemon) func=supervise_start ;; ?*) ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" ;; esac $func } default_stop() { local func=ssd_stop case "$supervisor" in runit) func=runit_stop ;; s6) func=s6_stop ;; supervise-daemon) func=supervise_stop ;; ?*) ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" ;; esac $func } default_status() { local func=ssd_status case "$supervisor" in runit) func=runit_status ;; s6) func=s6_status ;; supervise-daemon) func=supervise_status ;; ?*) ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" ;; esac $func } default_reload() { case "$supervisor" in s6) s6_reload ;; ?*) eerror "$RC_SVCNAME: undefined function 'reload'" exit 1 ;; esac } # Template start / stop / status functions # package init scripts may override these, but the bodies are as minimal as # possible, so that the init scripts can creatively wrap default_* # functions. start() { default_start } stop() { default_stop } status() { default_status } reload() { default_reload } # Start debug output yesno $RC_DEBUG && set -x # Load configuration settings. First the global ones, then any # service-specific settings. sourcex -e "/etc/rc.conf" if [ -d "/etc/rc.conf.d" ]; then for _f in "/etc"/rc.conf.d/*.conf; do sourcex -e "$_f" done fi _usr_conf=${XDG_CONFIG_HOME:-${HOME}/.config}/rc if yesno "$RC_USER_SERVICES"; then sourcex -e "$_usr_conf/rc.conf" if [ -d "$_usr_conf/rc.conf.d" ]; then for _f in "$_usr_conf"/rc.conf.d/*.conf; do sourcex -e "$_f" done fi fi _conf_d=${RC_SERVICE%/*}/../conf.d # If we're net.eth0 or openvpn.work then load net or openvpn config _c=${RC_SVCNAME%%.*} if [ -n "$_c" -a "$_c" != "$RC_SVCNAME" ]; then if ! sourcex -e "$_conf_d/$_c.$RC_RUNLEVEL"; then sourcex -e "$_conf_d/$_c" fi fi unset _c # Overlay with our specific config if ! sourcex -e "$_conf_d/$RC_SVCNAME.$RC_RUNLEVEL"; then sourcex -e "$_conf_d/$RC_SVCNAME" fi unset _conf_d # If we are configured to run in a VRF, provide a hint for that RC_VRF_EXEC="" if [ -n "$vrf" ]; then RC_VRF_EXEC="ip vrf exec $vrf" fi # Add ip netns if configured to run in a netns (netns+vrf may stack) if [ -n "$netns" ]; then RC_VRF_EXEC="ip netns exec $netns $RC_VRF_EXEC" fi if yesno "$RC_USER_SERVICES" && [ "$_usr_conf/init.d" != "${RC_SERVICE%/*}" ]; then if ! sourcex -e "$_usr_conf/conf.d/$RC_SVCNAME.$RC_RUNLEVEL"; then sourcex -e "$_usr_conf/conf.d/$RC_SVCNAME" fi fi unset _usr_conf # load service supervisor functions sourcex "/usr/libexec/rc/sh/runit.sh" sourcex "/usr/libexec/rc/sh/s6.sh" sourcex "/usr/libexec/rc/sh/start-stop-daemon.sh" sourcex "/usr/libexec/rc/sh/supervise-daemon.sh" # Load our script sourcex "$RC_SERVICE" # Set verbose mode if yesno "${rc_verbose:-$RC_VERBOSE}"; then EINFO_VERBOSE=yes export EINFO_VERBOSE fi _setup_cgroup() { grep -qs /sys/fs/cgroup /proc/1/mountinfo || return [ -w /sys/fs/cgroup ] || { yesno "$RC_USER_SERVICES" || eerror "No permission to apply cgroup settings" return } # Apply cgroups settings if defined [ "$(command -v cgroup_add_service)" = "cgroup_add_service" ] && cgroup_add_service [ "$(command -v cgroup_set_limits)" = "cgroup_set_limits" ] && cgroup_set_limits [ "$(command -v cgroup2_set_limits)" = "cgroup2_set_limits" ] && cgroup2_set_limits } case $1 in status|describe) ;; *) # Apply any ulimit(s) defined [ -n "${rc_ulimit:-$RC_ULIMIT}" ] && apply_ulimits ${rc_ulimit:-$RC_ULIMIT} _setup_cgroup ;; esac eval "printf '%s\n' $required_dirs" | while read _d; do if [ -n "$_d" ] && [ ! -d "$_d" ]; then eerror "$RC_SVCNAME: \`$_d' is not a directory" exit 1 fi done [ $? -ne 0 ] && exit 1 unset _d eval "printf '%s\n' $required_files" | while read _f; do if [ -n "$_f" ] && [ ! -r "$_f" ]; then eerror "$RC_SVCNAME: \`$_f' is not readable" exit 1 fi done [ $? -ne 0 ] && exit 1 unset _f if [ -n "$opts" ]; then ewarn "Use of the opts variable is deprecated and will be" ewarn "removed in the future." ewarn "Please use extra_commands, extra_started_commands or extra_stopped_commands." fi # Special case depend if [ "$1" = depend ]; then shift # Enter the dir of the init script to fix the globbing # bug 412677 cd ${RC_SERVICE%/*} _depend cd / return 0 fi # See if we have the required function and run it for _cmd in describe start stop status ${extra_commands:-$opts} $extra_started_commands $extra_stopped_commands; do [ "$_cmd" = "$1" ] || continue if [ "$(command -v "$1")" != "$1" ]; then case $_cmd in start|stop) exit 0;; *) eerror "$RC_SVCNAME: function '$1' defined but does not exist" exit 1;; esac break fi done # If we're in the background, we may wish to fake some commands. We do this so we can # "start" ourselves from inactive which then triggers other services to start which # depend on us. A good example of this is openvpn. if yesno $IN_BACKGROUND; then for _cmd in $in_background_fake; do if [ "$_cmd" = "$1" ]; then exit 0 fi done fi for _cmd in $extra_started_commands; do [ "$_cmd" = "$1" ] || continue if verify_boot && ! service_started; then eerror "$RC_SVCNAME: cannot '$1' as it has not been started" exit 1 fi done for _cmd in $extra_stopped_commands; do [ "$_cmd" = "$1" ] || continue if verify_boot && ! service_stopped; then eerror "$RC_SVCNAME: cannot '$1' as it has not been stopped" exit 1 fi done unset _cmd case $1 in start|stop|status) verify_boot;; esac [ "$(command -v "$1_pre")" = "$1_pre" ] && { "$1"_pre || exit $?; } "$1" || exit $? [ "$(command -v "$1_post")" = "$1_post" ] && { "$1"_post || exit $?; } [ "$(command -v cgroup_cleanup)" = cgroup_cleanup ] && [ "$1" = stop ] && yesno "${rc_cgroup_cleanup}" && cgroup_cleanup [ "$(command -v cgroup2_remove)" = cgroup2_remove ] && { [ "$1" = stop ] || [ -z "${command}" ]; } && cgroup2_remove exit 0 #!/bin/sh . /usr/libexec/rc/sh/functions.sh exec 3>&1 >&2 if [ -z "${XDG_RUNTIME_DIR}" ]; then logger -p daemon.err "XDG_RUNTIME_DIR unset, user services cannot start." exit 1 fi sysconfdir="${XDG_CONFIG_HOME:-${HOME}/.config}/rc" cachedir="${XDG_CACHE_HOME:-${HOME}/.cache}/rc" svcdir="${XDG_RUNTIME_DIR?}/openrc" for config in "/etc/rc.conf" "$sysconfdir/rc.conf"; do if [ -e "$config" ] && ! . "$config"; then logger -p daemon.err "openrc-user: Failed loading $config" exit 1 fi done mkdir -p "$svcdir" mkdir -p "$cachedir" for runlevel in boot "${rc_default_runlevel:-default}" shutdown; do mkdir -p "$sysconfdir/runlevels/$runlevel" done case $1 in start) cp -pr "$cachedir"/* "$svcdir" 2>/dev/null openrc --user boot || exit 1 printf '\n' >&3 exec openrc --user "${rc_default_runlevel:-default}" ;; stop) cp -pr "$svcdir"/dep* "$svcdir/init.d" "$svcdir/conf.d" "$cachedir" 2>/dev/null exec openrc --user shutdown ;; *) logger -p daemon.err "no argument given to $0" && exit 1 esac # Copyright (c) 2012-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. extra_stopped_commands="${extra_stopped_commands} cgroup_cleanup" description_cgroup_cleanup="Kill all processes in the cgroup" cgroup_find_path() { local OIFS name dir result [ -n "$1" ] || return 0 OIFS="$IFS" IFS=":" while read -r _ name dir; do [ "$name" = "$1" ] && result="$dir" done < /proc/1/cgroup IFS="$OIFS" printf "%s" "${result}" } # This extracts all pids in a cgroup and puts them in the cgroup_pids # variable. # It is done this way to avoid subshells so we don't have to worry about # locating the pid of the subshell in the cgroup. # https://github.com/openrc/openrc/issues/396 cgroup_get_pids() { local cgroup_procs p cgroup_pids= cgroup_procs="$(cgroup2_find_path)" if [ -n "${cgroup_procs}" ]; then cgroup_procs="${cgroup_procs}/openrc.${RC_SVCNAME}/cgroup.procs" else cgroup_procs="/sys/fs/cgroup/openrc/${RC_SVCNAME}/tasks" fi [ -f "${cgroup_procs}" ] || return 0 while read -r p; do [ "$p" -eq $$ ] && continue cgroup_pids="${cgroup_pids} ${p}" done < "${cgroup_procs}" return 0 } cgroup_running() { [ -d "/sys/fs/cgroup/unified/${RC_SVCNAME}" ] || [ -d "/sys/fs/cgroup/${RC_SVCNAME}" ] || [ -d "/sys/fs/cgroup/openrc/${RC_SVCNAME}" ] } cgroup_set_values() { [ -n "$1" ] && [ -n "$2" ] && [ -d "/sys/fs/cgroup/$1" ] || return 0 local controller h controller="$1" h=$(cgroup_find_path "$1") cgroup="/sys/fs/cgroup/${1}${h}openrc_${RC_SVCNAME}" [ -d "$cgroup" ] || mkdir -p "$cgroup" set -- $2 local name val while [ -n "$1" ] && [ "$controller" != "cpuacct" ]; do case "$1" in $controller.*) if [ -n "${name}" ] && [ -w "${cgroup}/${name}" ] && [ -n "${val}" ]; then veinfo "$RC_SVCNAME: Setting $cgroup/$name to $val" printf "%s" "$val" > "$cgroup/$name" fi name=$1 val= ;; *) [ -n "$val" ] && val="$val $1" || val="$1" ;; esac shift done if [ -n "${name}" ] && [ -w "${cgroup}/${name}" ] && [ -n "${val}" ]; then veinfo "$RC_SVCNAME: Setting $cgroup/$name to $val" printf "%s" "$val" > "$cgroup/$name" fi if [ -w "$cgroup/tasks" ]; then veinfo "$RC_SVCNAME: adding to $cgroup/tasks" printf "%d" 0 > "$cgroup/tasks" fi return 0 } cgroup_add_service() { # relocate starting process to the top of the cgroup # it prevents from unwanted inheriting of the user # cgroups. But may lead to a problems where that inheriting # is needed. for d in /sys/fs/cgroup/* ; do [ -w "${d}"/tasks ] && printf "%d" 0 > "${d}"/tasks done openrc_cgroup=/sys/fs/cgroup/openrc if [ -d "$openrc_cgroup" ]; then cgroup="$openrc_cgroup/$RC_SVCNAME" mkdir -p "$cgroup" [ -w "$cgroup/tasks" ] && printf "%d" 0 > "$cgroup/tasks" fi } cgroup_set_limits() { local blkio="${rc_cgroup_blkio:-$RC_CGROUP_BLKIO}" [ -n "$blkio" ] && cgroup_set_values blkio "$blkio" local cpu="${rc_cgroup_cpu:-$RC_CGROUP_CPU}" [ -n "$cpu" ] && cgroup_set_values cpu "$cpu" local cpuacct="${rc_cgroup_cpuacct:-$RC_CGROUP_CPUACCT}" [ -n "$cpuacct" ] && cgroup_set_values cpuacct "$cpuacct" local cpuset="${rc_cgroup_cpuset:-$RC_CGROUP_cpuset}" [ -n "$cpuset" ] && cgroup_set_values cpuset "$cpuset" local devices="${rc_cgroup_devices:-$RC_CGROUP_DEVICES}" [ -n "$devices" ] && cgroup_set_values devices "$devices" local hugetlb="${rc_cgroup_hugetlb:-$RC_CGROUP_HUGETLB}" [ -n "$hugetlb" ] && cgroup_set_values hugetlb "$hugetlb" local memory="${rc_cgroup_memory:-$RC_CGROUP_MEMORY}" [ -n "$memory" ] && cgroup_set_values memory "$memory" local net_cls="${rc_cgroup_net_cls:-$RC_CGROUP_NET_CLS}" [ -n "$net_cls" ] && cgroup_set_values net_cls "$net_cls" local net_prio="${rc_cgroup_net_prio:-$RC_CGROUP_NET_PRIO}" [ -n "$net_prio" ] && cgroup_set_values net_prio "$net_prio" local pids="${rc_cgroup_pids:-$RC_CGROUP_PIDS}" [ -n "$pids" ] && cgroup_set_values pids "$pids" return 0 } cgroup2_find_path() { if grep -qw cgroup2 /proc/filesystems; then case "${rc_cgroup_mode:-unified}" in hybrid) printf "/sys/fs/cgroup/unified" ;; unified) printf "/sys/fs/cgroup" ;; esac fi return 0 } cgroup2_remove() { local cgroup_path rc_cgroup_path cgroup_path="$(cgroup2_find_path)" [ -z "${cgroup_path}" ] && return 0 rc_cgroup_path="${cgroup_path}/openrc.${RC_SVCNAME}" [ ! -d "${rc_cgroup_path}" ] || [ ! -e "${rc_cgroup_path}"/cgroup.events ] && return 0 grep -qx "$$" "${rc_cgroup_path}/cgroup.procs" && printf "%d" 0 > "${cgroup_path}/cgroup.procs" local key populated vvalue while read -r key value; do case "${key}" in populated) populated=${value} ;; *) ;; esac done < "${rc_cgroup_path}/cgroup.events" [ "${populated}" = 1 ] && return 0 rmdir "${rc_cgroup_path}" return 0 } cgroup2_set_limits() { local cgroup_path cgroup_path="$(cgroup2_find_path)" [ -z "${cgroup_path}" ] && return 0 mountinfo -q "${cgroup_path}"|| return 0 rc_cgroup_path="${cgroup_path}/openrc.${RC_SVCNAME}" [ ! -d "${rc_cgroup_path}" ] && mkdir "${rc_cgroup_path}" [ -f "${rc_cgroup_path}"/cgroup.procs ] && printf 0 > "${rc_cgroup_path}"/cgroup.procs [ -z "${rc_cgroup_settings}" ] && return 0 echo "${rc_cgroup_settings}" | while read -r key value; do [ -z "${key}" ] && continue [ -z "${value}" ] && continue [ ! -f "${rc_cgroup_path}/${key}" ] && continue veinfo "${RC_SVCNAME}: cgroups: setting ${key} to ${value}" printf "%s" "${value}" > "${rc_cgroup_path}/${key}" done return 0 } cgroup2_kill_cgroup() { local cgroup_path cgroup_path="$(cgroup2_find_path)" [ -z "${cgroup_path}" ] && return 1 rc_cgroup_path="${cgroup_path}/openrc.${RC_SVCNAME}" if [ -f "${rc_cgroup_path}"/cgroup.kill ]; then printf "%d" 1 > "${rc_cgroup_path}"/cgroup.kill fi return } cgroup_fallback_cleanup() { ebegin "Starting fallback cgroups cleanup" local loops=0 cgroup_get_pids if [ -n "${cgroup_pids}" ]; then kill -s CONT ${cgroup_pids} 2> /dev/null kill -s "${stopsig:-TERM}" ${cgroup_pids} 2> /dev/null yesno "${rc_send_sighup:-no}" && kill -s HUP ${cgroup_pids} 2> /dev/null kill -s "${stopsig:-TERM}" ${cgroup_pids} 2> /dev/null cgroup_get_pids while [ -n "${cgroup_pids}" ] && [ "${loops}" -lt "${rc_timeout_stopsec:-90}" ]; do loops=$((loops+1)) sleep 1 cgroup_get_pids done if [ -n "${cgroup_pids}" ] && yesno "${rc_send_sigkill:-yes}"; then kill -s KILL ${cgroup_pids} 2> /dev/null fi fi eend $? } cgroup_cleanup() { cgroup_running || return 0 ebegin "Starting cgroups cleanup" cgroup2_kill_cgroup || cgroup_fallback_cleanup cgroup2_remove cgroup_get_pids [ -z "${cgroup_pids}" ] eend $? "Unable to stop all processes" return 0 } # Copyright (c) 2007 Gentoo Foundation # Copyright (c) 2007-2009 Roy Marples # Released under the 2-clause BSD license. net_fs_list=" afs ceph cifs coda davfs fuse fuse.glusterfs fuse.sshfs gfs glusterfs lustre ncpfs nfs nfs4 ocfs2 shfs smbfs " is_net_fs() { [ -z "$1" ] && return 1 # Check OS specific flags to see if we're local or net mounted mountinfo --quiet --netdev "$1" && return 0 mountinfo --quiet --nonetdev "$1" && return 1 # Fall back on fs types local t=$(mountinfo --fstype "$1") for x in $net_fs_list $extra_net_fs_list; do [ "$x" = "$t" ] && return 0 done return 1 } is_union_fs() { [ ! -x /sbin/unionctl ] && return 1 unionctl "$1" --list >/dev/null 2>&1 } get_bootparam() { local match="$1" [ -z "$match" -o ! -r /proc/cmdline ] && return 1 set -- $(cat /proc/cmdline) while [ -n "$1" ]; do [ "$1" = "$match" ] && return 0 case "$1" in gentoo=*) local params="${1##*=}" local IFS=, x= for x in $params; do [ "$x" = "$match" ] && return 0 done ;; esac shift done return 1 } get_bootparam_value() { local match="$1" which_value="$2" sep="$3" result value if [ -n "$match" -a -r /proc/cmdline ]; then set -- $(cat /proc/cmdline) while [ -n "$1" ]; do case "$1" in $match=*) value="${1##*=}" case "$which_value" in all) [ -z "$sep" ] && sep=' ' if [ -z "$result" ]; then result="$value" else result="${result}${sep}${value}" fi ;; last) result="$value" ;; *) result="$value" break ;; esac ;; esac shift done fi echo $result } need_if_exists() { for x; do rc-service --exists "${x}" && need "${x}" done } # Called from openrc-run.sh or gendepends.sh _get_containers() { local c case "${RC_UNAME}" in FreeBSD) c="-jail" ;; Linux) c="-docker -podman -lxc -openvz -rkt -systemd-nspawn -uml -vserver -wsl" ;; esac echo $c } _get_containers_remove() { local c for x in $(_get_containers); do c="${c}!${x} " done echo $c } _depend() { depend local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends= # Add any user defined depends for _deptype in config:CONFIG need:NEED use:USE want:WANT \ after:AFTER before:BEFORE \ provide:PROVIDE keyword:KEYWORD; do IFS=: set -- $_deptype unset IFS eval _depends=\$rc_${_rc_svcname}_$1 [ -z "$_depends" ] && eval _depends=\$rc_$1 [ -z "$_depends" ] && eval _depends=\$RC_${_rc_svcname}_$2 [ -z "$_depends" ] && eval _depends=\$RC_$2 $1 $_depends done } # Add our sbin to $PATH case "$PATH" in "$RC_LIBEXECDIR"/sbin|"$RC_LIBEXECDIR"/sbin:*);; *) PATH="$RC_LIBEXECDIR/sbin:$PATH" ; export PATH ;; esac # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. # Declare this here so that no formatting doesn't affect the embedded newline __IFS=" " # Handy function to handle all our unmounting needs # mountinfo is a C program to actually find our mounts on our supported OS's # We rely on fuser being present, so if it's not then don't unmount anything. # This isn't a real issue for the BSD's, but it is for Linux. do_unmount() { local cmd="$1" retval=0 retry= pids=- local f_opts="-m -c" f_kill="-s " mnt= if [ "$RC_UNAME" = "Linux" ]; then f_opts="-m" f_kill="-" fi shift local IFS="$__IFS" set -- $(mountinfo "$@") unset IFS for mnt; do # Unmounting a shared mount can unmount other mounts, so # we need to check the mount is still valid mountinfo --quiet "$mnt" || continue # Ensure we interpret all characters properly. mnt=$(printf "$mnt") case "$cmd" in umount) ebegin "Unmounting $mnt" ;; *) ebegin "Remounting $mnt read only" ;; esac retry=4 # Effectively TERM, sleep 1, TERM, sleep 1, KILL, sleep 1 while ! LC_ALL=C $cmd "$mnt" 2>/dev/null; do if command -v fuser >/dev/null 2>&1; then pids="$(timeout -s KILL "${rc_fuser_timeout:-60}" \ fuser $f_opts "$mnt" 2>/dev/null)" fi case " $pids " in *" $$ "*) eend 1 "failed because we are using" \ "$mnt" retry=0;; " - ") eend 1 retry=0;; " ") eend 1 "in use but fuser finds nothing" retry=0;; *) if [ $retry -le 0 ]; then eend 1 else local sig="TERM" : $(( retry -= 1 )) [ $retry = 1 ] && sig="KILL" fuser $f_kill$sig -k $f_opts \ "$mnt" >/dev/null 2>&1 sleep 1 fi ;; esac [ $retry -le 0 ] && break done if [ $retry -le 0 ]; then retval=1 else eend 0 fi done return $retval } # Copyright (c) 2016 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. # Released under the 2-clause BSD license. runit_start() { local service_path service_link service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}" if [ ! -d "${service_path}" ]; then eerror "Runit service ${service_path} not found" return 1 fi service_link="${RC_SVCDIR}/sv/${service_path##*/}" ebegin "Starting ${name:-$RC_SVCNAME}" ln -snf "${service_path}" "${service_link}" local i=0 retval=1 # it can take upto 5 seconds for runsv to start while [ $i -lt 6 ] ; do if ${RC_VRF_EXEC} sv start "${service_link}" > /dev/null 2>&1; then retval=0 break fi sleep 1 && i=$(expr $i + 1) done if [ $retval -eq 1 ]; then # clean up the link else sv will keep on trying rm "${service_link}" fi eend $retval "Failed to start ${name:-$RC_SVCNAME}" } runit_stop() { local service_path service_link service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}" if [ ! -d "${service_path}" ]; then eerror "Runit service ${service_path} not found" return 1 fi service_link="${RC_SVCDIR}/sv/${service_path##*/}" ebegin "Stopping ${name:-$RC_SVCNAME}" sv stop "${service_link}" > /dev/null 2>&1 && rm "${service_link}" eend $? "Failed to stop ${name:-$RC_SVCNAME}" } runit_status() { local service_path service_link service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}" if [ ! -d "${service_path}" ]; then eerror "Runit service ${service_path} not found" return 1 fi service_link="${RC_SVCDIR}/sv/${service_path##*/}" sv status "${service_link}" } #!/bin/sh -e scandir="$1/s6-scan" logdir="$1/s6-logs" execlineb=`command -v execlineb` mkdir -p "$logdir" mkdir -p -m 02755 "$scandir/s6-svscan-log" echo 3 > "$scandir/s6-svscan-log/notification-fd" mkfifo -m 0600 "$scandir/s6-svscan-log/fifo" 2>/dev/null || : cat > "$scandir/s6-svscan-log/run" </dev/console # Start / stop / status functions for s6 support # Copyright (c) 2015-2025 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. # Variables that the supervisor=s6 backend understands: # command, command_args, command_args_foreground (command will be interpreted by sh) # output_logger, error_logger, output_log, error_log (the former two are mutually exclusive) # input_file, directory, chroot, umask, command_user # notify (only fd), stopsig # # Extra variables: # Timeouts: all in milliseconds, 0 for infinity, undefined for no waiting # timeout_ready: wait for the service to become up, or ready if notify=fd:X # timeout_down: wait for the service to stop # timeout_kill: if not stopped after that amount, send a SIGKILL extra_commands="restart reload ${extra_commands}" # Call this on every entry point, for readability _s6_set_variables() { name="${name:-${RC_SVCNAME}}" _execlineb="$(command -v execlineb)" _scandir="${RC_SVCDIR}/s6-scan" _servicedirs="${RC_SVCDIR}/s6-services" _service="$_scandir/$name" } _s6_available() { s6-svscanctl -- "$_scandir" 2>/dev/null } _execline_available() { test -n "$_execlineb" && "$_execlineb" -Pc 'exit 0' 2>/dev/null } _s6_sanity_checks() { if ! _s6_available ; then eerror "No supervision tree running on $_scandir" return 1 fi if ! _execline_available ; then eerror "No execlineb interpreter accessible" return 1 fi if test -n "$notify" && test "${notify##fd:}" = "$notify" ; then ewarn "Only the notify=fd method is supported - notify setting will be ignored" notify= fi if test -n "$output_logger" && test -n "$error_logger" ; then ewarn "error_logger will be used in priority over output_logger" output_logger= fi if test -n "$output_logger" && test -n "$output_log" ; then ewarn "output_logger will be used in priority over output_log" output_log= fi if test -n "$error_logger" && test -n "$error_log" ; then ewarn "error_logger will be used in priority over error_log" error_log= fi if test "${output_logger}${error_logger}" = auto ; then s6_log_arguments="${s6_log_arguments:-t s1048576 n10}" elif test -n "$s6_log_arguments" ; then ewarn "s6_log_arguments ignored because the logger was not 'auto'" s6_log_arguments= fi return 0 } _s6_force_stop() { s6-svunlink -- "$_scandir" "$name" } _s6_have_legacy_servicedir() { test -z "$command" && test -x "/var/svc.d/$name/run" } _s6_servicedir_creation_needed() { local dir="$_servicedirs/$name" conffile="{$RC_SERVICE%/*}/../conf.d/${RC_SERVICE##*/}" if ! test -e "$dir" ; then return 0 fi if ! test -d "$dir" ; then rm -f -- "$dir" return 0 fi if test "$RC_SERVICE" -nt "$dir" || test -f "$conffile" -a "$conffile" -nt "$dir" ; then _s6_force_stop rm -rf -- "$dir" return 0 fi return 1 } _s6_servicedir_create() { local logger="${output_logger}${error_logger}" dir="$_servicedirs/$name" mkdir -p -m 0700 -- "$dir" if test -n "$notify" && test "${notify##fd:}" != "$notify" ; then echo "${notify##fd:}" > "$dir/notification-fd" fi if test -n "$timeout_kill" ; then echo "$timeout_kill" > "$dir/timeout-kill" fi if test -n "$stopsig" ; then echo "$stopsig" > "$dir/down-signal" fi { # Generating execline code here because it is much easier than generating sh. # The command will still be interpreted by sh in the end. echo "#!$_execlineb -S1" if test -n "$umask" ; then echo "umask \"$umask\"" fi if test -n "$error_logger" ; then echo 'fdmove -c 2 1' elif test -n "$error_log" ; then echo "redirfd -w 2 -- \"$error_log\"" fi if test -n "$output_log" ; then echo "redirfd -w 1 -- \"$output_log\"" fi if test -n "$input_file" ; then echo "redirfd -r 0 -- \"$input_file\"" fi if test -n "$chroot" ; then echo "cd \"$chroot\" chroot ." fi if test -n "$directory" ; then echo "cd \"$directory\"" fi if test -n "$command_user" ; then echo "s6-setuidgid \"$command_user\"" fi echo "sh -c \"exec ${RC_VRF_EXEC} $command $command_args $command_args_foreground\"" } > "$dir/run" chmod 0755 "$dir/run" if test -n "$logger" ; then # TODO: get an unprivileged uid to run the logger as mkdir -m 0755 "$dir/log" mkdir -p -m 02755 "/var/log/$name" if test "$logger" = auto ; then echo 3 > "$dir/log/notification-fd" { echo "#!$_execlineb -S1" echo "s6-log -d3 -- ${s6_log_arguments} /var/log/$name" } > "$dir/log/run" else { echo '#!/bin/sh -e' echo "exec $logger" } > "$dir/log/run" fi chmod 0755 "$dir/log/run" fi chmod 0755 "$dir" } s6_start() { local servicepath r waitcommand waitname _s6_set_variables if ! _s6_sanity_checks ; then eerror "s6 sanity checks failed, cannot start service" return 1 fi servicepath="$_servicedirs/$name" if _s6_have_legacy_servicedir ; then servicepath="/var/svc.d/$name" ebegin "Starting $name (via user-provided service directory)" elif _s6_servicedir_creation_needed ; then ebegin "Starting $name" _s6_servicedir_create else ebegin "Starting $name (using cached service directory)" fi if s6-svlink -- "$_scandir" "$servicepath" ; then : ; else r=$? eend $r "Failed to s6-svlink $servicepath into $_scandir" return $r fi if test -n "$timeout_ready" ; then if test -n "$notify" ; then waitcommand='-U' waitname=ready else waitcommand='-u' waitname=up fi if s6-svwait $waitcommand -t "$timeout_ready" -- "$_service" ; then : ; else r=$? s6-svc -d -- "$_service" eend $r "Failed to become $waitname in $timeout_ready milliseconds" return $r fi fi eend 0 } s6_stop() { _s6_set_variables ebegin "Stopping $name" s6-svunlink ${timeout_down:+-t} $timeout_down -- "$_scandir" "$name" eend $? "Failed to stop $name" } s6_status() { _s6_set_variables if s6-svok "$_service" 2>/dev/null ; then s6-svstat -- "$_service" else _status fi } s6_reload() { _s6_set_variables ebegin "Reloading $name" s6-svc -h -- "$_service" eend $? "s6-svc -h command failed" } # start / stop / status functions for start-stop-daemon # Copyright (c) 2007-2015 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. ssd_start() { if [ -z "$command" ]; then ewarn "The command variable is undefined." ewarn "There is nothing for ${name:-$RC_SVCNAME} to start." ewarn "If this is what you intend, please write a start function." ewarn "This will become a failure in a future release." return 0 fi if [ -n "$ready" ]; then ewarn "Use 'notify=$ready' instead of 'ready=$ready'" notify="$ready" fi local _background= ebegin "Starting ${name:-$RC_SVCNAME}" if yesno "${command_background}"; then if [ -z "${pidfile}" ]; then eend 1 "command_background option used but no pidfile specified" return 1 fi if [ -n "${command_args_background}" ]; then eend 1 "command_background used with command_args_background" return 1 fi _background="--background --make-pidfile" fi if yesno "$start_inactive"; then local _inactive=false service_inactive && _inactive=true mark_service_inactive fi #the eval call is necessary for cases like: # command_args="this \"is a\" test" # to work properly. eval ${RC_VRF_EXEC} start-stop-daemon --start \ --exec $command \ ${chroot:+--chroot} $chroot \ ${directory:+--chdir} $directory \ ${input_file+--stdin} $input_file \ ${output_log+--stdout} $output_log \ ${error_log+--stderr} $error_log \ ${output_logger:+--stdout-logger \"$output_logger\"} \ ${error_logger:+--stderr-logger \"$error_logger\"} \ ${capabilities+--capabilities} "$capabilities" \ ${secbits:+--secbits} "$secbits" \ ${no_new_privs:+--no-new-privs} \ ${procname:+--name} $procname \ ${pidfile:+--pidfile} $pidfile \ ${command_user+--user} $command_user \ ${umask+--umask} $umask \ ${notify+--notify} $notify \ $_background $start_stop_daemon_args \ -- $command_args $command_args_background if eend $? "Failed to start ${name:-$RC_SVCNAME}"; then service_set_value "command" "${command}" [ -n "${chroot}" ] && service_set_value "chroot" "${chroot}" [ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}" [ -n "${procname}" ] && service_set_value "procname" "${procname}" return 0 fi if yesno "$start_inactive"; then if ! $_inactive; then mark_service_stopped fi fi return 1 } ssd_stop() { local _progress= local startcommand="$(service_get_value "command")" local startchroot="$(service_get_value "chroot")" local startpidfile="$(service_get_value "pidfile")" local startprocname="$(service_get_value "procname")" command="${startcommand:-$command}" chroot="${startchroot:-$chroot}" pidfile="${startpidfile:-$pidfile}" procname="${startprocname:-$procname}" [ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0 yesno "${command_progress}" && _progress=--progress ebegin "Stopping ${name:-$RC_SVCNAME}" start-stop-daemon --stop \ ${retry:+--retry} $retry \ ${command:+--exec} $command \ ${procname:+--name} $procname \ ${pidfile:+--pidfile} $chroot$pidfile \ ${stopsig:+--signal} $stopsig \ ${_progress} eend $? "Failed to stop ${name:-$RC_SVCNAME}" } ssd_status() { _status } # start / stop / status functions for supervise-daemon # Copyright (c) 2016 The OpenRC Authors. # See the Authors file at the top-level directory of this distribution and # https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS # # This file is part of OpenRC. It is subject to the license terms in # the LICENSE file found in the top-level directory of this # distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE # This file may not be copied, modified, propagated, or distributed # except according to the terms contained in the LICENSE file. extra_commands="healthcheck unhealthy ${extra_commands}" supervise_start() { if [ -z "$command" ]; then ewarn "The command variable is undefined." ewarn "There is nothing for ${name:-$RC_SVCNAME} to start." return 1 fi if [ -n "$ready" ]; then ewarn "Use 'notify=$ready' instead of 'ready=$ready'" notify="$ready" fi ebegin "Starting ${name:-$RC_SVCNAME}" # The eval call is necessary for cases like: # command_args="this \"is a\" test" # to work properly. eval ${RC_VRF_EXEC} supervise-daemon "${RC_SVCNAME}" --start \ ${retry:+--retry} $retry \ ${directory:+--chdir} $directory \ ${chroot:+--chroot} $chroot \ ${input_file+--stdin} $input_file \ ${output_log+--stdout} ${output_log} \ ${error_log+--stderr} $error_log \ ${output_logger:+--stdout-logger \"$output_logger\"} \ ${error_logger:+--stderr-logger \"$error_logger\"} \ ${pidfile:+--pidfile} $pidfile \ ${respawn_delay:+--respawn-delay} $respawn_delay \ ${respawn_max:+--respawn-max} $respawn_max \ ${respawn_period:+--respawn-period} $respawn_period \ ${healthcheck_delay:+--healthcheck-delay} $healthcheck_delay \ ${healthcheck_timer:+--healthcheck-timer} $healthcheck_timer \ ${capabilities+--capabilities} "$capabilities" \ ${secbits:+--secbits} "$secbits" \ ${no_new_privs:+--no-new-privs} \ ${command_user+--user} $command_user \ ${umask+--umask} $umask \ ${notify+--notify} $notify \ ${supervise_daemon_args-${start_stop_daemon_args}} \ $command \ -- $command_args $command_args_foreground rc=$? if [ $rc = 0 ]; then [ -n "${chroot}" ] && service_set_value "chroot" "${chroot}" [ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}" fi eend $rc "failed to start ${name:-$RC_SVCNAME}" } supervise_stop() { local startchroot="$(service_get_value "chroot")" local startpidfile="$(service_get_value "pidfile")" chroot="${startchroot:-$chroot}" pidfile="${startpidfile:-$pidfile}" ebegin "Stopping ${name:-$RC_SVCNAME}" supervise-daemon "${RC_SVCNAME}" --stop \ ${pidfile:+--pidfile} $chroot$pidfile eend $? "Failed to stop ${name:-$RC_SVCNAME}" } _check_supervised() { local child_pid start_time child_pid="$(service_get_value "child_pid")" start_time="$(service_get_value "start_time")" if [ -n "${child_pid}" ] && [ -n "${start_time}" ]; then return 1 fi return 0 } supervise_status() { if service_stopping; then ewarn "status: stopping" return 4 elif service_starting; then ewarn "status: starting" return 8 elif service_inactive; then ewarn "status: inactive" return 16 elif service_started; then if service_crashed; then if ! _check_supervised; then eerror "status: unsupervised" return 64 fi eerror "status: crashed" return 32 fi einfo "status: started" return 0 else einfo "status: stopped" return 3 fi } healthcheck() { return 0 } unhealthy() { return 0 } 0.63.2 # # This is a sample mdev.conf. # # Devices: # Syntax: %s %d:%d %s # devices user:group mode $MODALIAS=.* root:root 0660 @modprobe -q -b "$MODALIAS" # null does already exist; therefore ownership has to be changed with command null root:root 0666 @chmod 666 $MDEV zero root:root 0666 full root:root 0666 random root:root 0666 urandom root:root 0444 hwrandom root:root 0660 console root:tty 0600 # load frambuffer console when first frambuffer is found fb0 root:video 0660 @modprobe -q -b fbcon fd0 root:floppy 0660 kmem root:kmem 0640 mem root:kmem 0640 port root:kmem 0640 ptmx root:tty 0666 # Kernel-based Virtual Machine. kvm root:kvm 0666 # ram.* ram([0-9]+) root:disk 0660 >rd/%1 loop([0-9]+) root:disk 0660 >loop/%1 # persistent storage dasd.* root:disk 0660 */lib/mdev/persistent-storage mmcblk.* root:disk 0660 */lib/mdev/persistent-storage nbd.* root:disk 0660 */lib/mdev/persistent-storage nvme.* root:disk 0660 */lib/mdev/persistent-storage sd[a-z].* root:disk 0660 */lib/mdev/persistent-storage sr[0-9]+ root:cdrom 0660 */lib/mdev/persistent-storage vd[a-z].* root:disk 0660 */lib/mdev/persistent-storage xvd[a-z].* root:disk 0660 */lib/mdev/persistent-storage md[0-9]+ root:disk 0660 tty root:tty 0666 tty[0-9] root:root 0600 tty[0-9][0-9]+ root:tty 0660 ttyS[0-9]+ root:dialout 0660 ttyGS[0-9]+ root:root 0660 pty.* root:tty 0660 vcs[0-9]* root:tty 0660 vcsa[0-9]* root:tty 0660 # rpi bluetooth #ttyAMA0 root:tty 660 @btattach -B /dev/$MDEV -P bcm -S 115200 -N & ttyACM[0-9]+ root:dialout 0660 @ln -sf $MDEV modem ttyUSB[0-9]+ root:dialout 0660 @ln -sf $MDEV modem ttyLTM[0-9]+ root:dialout 0660 @ln -sf $MDEV modem ttySHSF[0-9]+ root:dialout 0660 @ln -sf $MDEV modem slamr root:dialout 0660 @ln -sf $MDEV slamr0 slusb root:dialout 0660 @ln -sf $MDEV slusb0 fuse root:root 0666 # mobile broadband modems cdc-wdm[0-9]+ root:dialout 0660 # dri device dri/renderD.* root:video 0666 dri/.* root:video 0660 card[0-9]+ root:video 0660 =dri/ # alsa sound devices and audio stuff pcm.* root:audio 0660 =snd/ control.* root:audio 0660 =snd/ midi.* root:audio 0660 =snd/ seq root:audio 0660 =snd/ timer root:audio 0660 =snd/ adsp root:audio 0660 >sound/ audio root:audio 0660 >sound/ dsp root:audio 0660 >sound/ mixer root:audio 0660 >sound/ sequencer.* root:audio 0660 >sound/ SUBSYSTEM=sound;.* root:audio 0660 # PTP devices ptp[0-9] root:root 0660 */lib/mdev/ptpdev # virtio-ports SUBSYSTEM=virtio-ports;vport.* root:root 0600 @mkdir -p virtio-ports; ln -sf ../$MDEV virtio-ports/$(cat /sys/class/virtio-ports/$MDEV/name) # misc stuff agpgart root:root 0660 >misc/ psaux root:root 0660 >misc/ rtc root:root 0664 >misc/ # input stuff SUBSYSTEM=input;.* root:input 0660 # v4l stuff -vbi[0-9]+ root:video 0660 vbi[0-9]+ root:video 0660 >v4l/ -video[0-9]+ root:video 0660 video[0-9]+ root:video 0660 >v4l/ -media[0-9]+ root:video 0660 media[0-9]+ root:video 0660 >v4l/ # dvb stuff dvb.* root:video 0660 */lib/mdev/dvbdev # VideoCore VC4 BCM GPU specific (as in Pi devices) vchiq root:video 0660 vcio root:video 0660 vcsm-cma root:video 0660 vc-mem root:video 0660 dma_heap/linux,cma root:video 0660 @ln -sf linux,cma dma_heap/vidbuf_cached dma_heap/system root:video 0660 @grep -q iommu /proc/iomem && ln -sf system dma_heap/vidbuf_cached # load drivers for usb devices usb[0-9]+ root:root 0660 */lib/mdev/usbdev # net devices # 666 is fine: https://www.kernel.org/doc/Documentation/networking/tuntap.txt net/tun[0-9]* root:netdev 0666 net/tap[0-9]* root:netdev 0666 SUBSYSTEM=net;INTERFACE=.*;.* root:root 600 @test -r /etc/mactab && nameif -s # zaptel devices zap(.*) root:dialout 0660 =zap/%1 dahdi!(.*) root:dialout 0660 =dahdi/%1 dahdi/(.*) root:dialout 0660 =dahdi/%1 # raid controllers cciss!(.*) root:disk 0660 =cciss/%1 cciss/(.*) root:disk 0660 =cciss/%1 ida!(.*) root:disk 0660 =ida/%1 ida/(.*) root:disk 0660 =ida/%1 rd!(.*) root:disk 0660 =rd/%1 rd/(.*) root:disk 0660 =rd/%1 # tape devices nst[0-9]+.* root:tape 0660 st[0-9]+.* root:tape 0660 # VirtualBox devices vboxguest root:root 0600 vboxuser root:root 0666 vboxdrv root:root 0600 vboxdrvu root:root 0666 vboxnetctl root:root 0600 # fallback for any!device -> any/device (.*)!(.*) root:root 0660 =%1/%2 #!/bin/sh # MDEV=dvb0.demux1 -> ADAPTER=dvb0 -> N=0 ADAPTER=${MDEV%.*} N=${ADAPTER#dvb} # MDEV=dvb0.demux1 -> DEVB_DEV=demux1 DVB_DEV=${MDEV#*.} case "$ACTION" in add|"") mkdir -p dvb/adapter${N} mv ${MDEV} dvb/adapter${N}/${DVB_DEV} ;; remove) rm -f dvb/adapter${N}/${DVB_DEV} rmdir dvb/adapter${N} 2>/dev/null rmdir dvb/ 2>/dev/null esac #!/bin/sh symlink_action() { case "$ACTION" in add) ln -sf "$1" "$2";; remove) rm -f "$2";; esac } sanitise_file() { sed -E -e 's/^\s+//' -e 's/\s+$//' -e 's/ /_/g' "$@" 2>/dev/null } sanitise_string() { echo "$@" | sanitise_file } vpd_pg80_serial() { dd if="$1" bs=1 skip=4 2>/dev/null | tr -d '\000' | sanitise_file } blkid_encode_string() { # Rewrites string similar to libblk's blkid_encode_string # function which is used by udev/eudev. echo "$@" | sed -e 's|\\|\\x5c|g' -e 's| |\\x20|g' -e 's|/|\\x2f|g' } blkid_tag() { printf '%s\n' "$1" | sed -n "s/.*[[:space:]]$2=\"\\([^\"]*\\)\".*/\\1/p" } : ${SYSFS:=/sys} # cdrom symlink case "$MDEV" in sr*|xvd*) caps="$(cat $SYSFS/block/$MDEV/capability 2>/dev/null)" if [ $(( 0x${caps:-0} & 8 )) -gt 0 ] || [ "$(cat $SYSFS/block/$MDEV/removable 2>/dev/null)" = "1" ]; then symlink_action $MDEV cdrom fi esac # /dev/block symlinks mkdir -p block if [ -f "$SYSFS/class/block/$MDEV/dev" ]; then maj_min=$(sanitise_file "$SYSFS/class/block/$MDEV/dev") symlink_action ../$MDEV block/${maj_min} fi # by-id symlinks mkdir -p disk/by-id if [ -f "$SYSFS/class/block/$MDEV/partition" ]; then # This is a partition of a device, find out its parent device _parent_dev="$(basename $(${SBINDIR:-/usr/bin}/readlink -f "$SYSFS/class/block/$MDEV/.."))" partition=$(cat $SYSFS/class/block/$MDEV/partition 2>/dev/null) case "$partition" in [0-9]*) partsuffix="-part$partition";; esac # Get name, model, serial, wwid from parent device of the partition _check_dev="$_parent_dev" else _check_dev="$MDEV" fi model=$(sanitise_file "$SYSFS/class/block/$_check_dev/device/model") name=$(sanitise_file "$SYSFS/class/block/$_check_dev/device/name") serial=$(sanitise_file "$SYSFS/class/block/$_check_dev/device/serial") # Special case where block devices have serials attached to the block itself, like virtio-blk : ${serial:=$(sanitise_file "$SYSFS/class/block/$_check_dev/serial")} : ${serial:=$(vpd_pg80_serial "$SYSFS/class/block/$_check_dev/device/vpd_pg80")} wwid=$(sanitise_file "$SYSFS/class/block/$_check_dev/wwid") : ${wwid:=$(sanitise_file "$SYSFS/class/block/$_check_dev/device/wwid")} # Sets variables LABEL, PARTLABEL, PARTUUID, TYPE, UUID depending on # blkid output (busybox blkid will not provide PARTLABEL or PARTUUID) blkid_out=$(blkid "/dev/$MDEV" 2>/dev/null) LABEL=$(blkid_tag "$blkid_out" LABEL) PARTLABEL=$(blkid_tag "$blkid_out" PARTLABEL) PARTUUID=$(blkid_tag "$blkid_out" PARTUUID) TYPE=$(blkid_tag "$blkid_out" TYPE) UUID=$(blkid_tag "$blkid_out" UUID) if [ -n "$wwid" ]; then case "$MDEV" in nvme*) symlink_action ../../$MDEV disk/by-id/nvme-${wwid}${partsuffix};; esac case "$wwid" in naa.*) symlink_action ../../$MDEV disk/by-id/wwn-0x${wwid#naa.}${partsuffix};; esac fi if [ -n "$serial" ]; then if [ -n "$model" ]; then case "$MDEV" in nvme*) symlink_action ../../$MDEV disk/by-id/nvme-${model}_${serial}${partsuffix};; sd*) symlink_action ../../$MDEV disk/by-id/ata-${model}_${serial}${partsuffix};; esac fi if [ -n "$name" ]; then case "$MDEV" in mmcblk*) symlink_action ../../$MDEV disk/by-id/mmc-${name}_${serial}${partsuffix};; esac fi # virtio-blk case "$MDEV" in vd*) symlink_action ../../$MDEV disk/by-id/virtio-${serial}${partsuffix};; esac fi # by-label, by-partlabel, by-partuuid, by-uuid symlinks if [ -n "$LABEL" ]; then mkdir -p disk/by-label symlink_action ../../$MDEV disk/by-label/"$(blkid_encode_string "$LABEL")" fi if [ -n "$PARTLABEL" ]; then mkdir -p disk/by-partlabel symlink_action ../../$MDEV disk/by-partlabel/"$(blkid_encode_string "$PARTLABEL")" fi if [ -n "$PARTUUID" ]; then mkdir -p disk/by-partuuid symlink_action ../../$MDEV disk/by-partuuid/"$PARTUUID" fi if [ -n "$UUID" ]; then mkdir -p disk/by-uuid symlink_action ../../$MDEV disk/by-uuid/"$UUID" fi # nvme EBS storage symlinks if [ "${MDEV#nvme}" != "$MDEV" ] && [ "$model" = "Amazon_Elastic_Block_Store" ] && command -v nvme >/dev/null; then n=30 while [ $n -gt 0 ]; do ebs_alias=$(nvme id-ctrl -b /dev/$_check_dev \ | dd bs=32 skip=96 count=1 iflag=fullblock 2>/dev/null \ | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' \ | tr -d ' ') if [ -n "$ebs_alias" ]; then symlink_action "$MDEV" ${ebs_alias#/dev/}$partition break fi n=$((n - 1)) sleep 0.1 done fi # backwards compatibility with /dev/usbdisk for /dev/sd* if [ "${MDEV#sd}" != "$MDEV" ]; then sysdev=$(readlink $SYSFS/class/block/$MDEV) case "$sysdev" in *usb[0-9]*) # require vfat for devices without partition if ! [ -e $SYSFS/block/$MDEV ] || [ "$TYPE" = "vfat" ]; then symlink_action $MDEV usbdisk fi ;; esac fi #!/bin/sh symlink_action() { case "$ACTION" in add) ln -sf "$1" "$2";; remove) rm -f "$2";; esac } clock_name=$(cat ${SYSFS:-/sys}/class/ptp/$MDEV/clock_name 2>/dev/null | sed -e 's/ /_/g') case "$clock_name" in KVM_virtual_PTP) symlink_action $MDEV ptp_kvm ;; ptp_vmw) symlink_action $MDEV ptp_vmw ;; hyperv) symlink_action $MDEV ptp_hyperv ;; esac #!/bin/sh # mdev -s will not set SUBSYSTEM or DEVNAME so we trigger a hotplug event if [ "$SUBSYSTEM" != "usb" ] || [ "$DEVTYPE" != "usb_device" ]; then uev=/sys/bus/usb/devices/$MDEV/uevent [ -e "$uev" ] && echo "add" > "$uev" exit fi [ -n "$DEVNAME" ] || exit case "$ACTION" in add) mkdir -p "${DEVNAME%/*}" mv $MDEV $DEVNAME # autoload driver for i in /sys/$DEVPATH/*/modalias; do [ -e "$i" ] && echo $i done | xargs sort -u | xargs modprobe -a 2>/dev/null ;; remove) rm $DEVNAME ;; esac #!/sbin/openrc-run description="the mdev device manager" depend() { provide dev need sysfs dev-mount before checkfs fsck keyword -containers -vserver -lxc } _start_service () { ebegin "Starting busybox mdev" mkdir -p /dev echo "/sbin/mdev" > /proc/sys/kernel/hotplug eend $? } _start_coldplug () { ebegin "Scanning hardware for mdev" # mdev -s will not create /dev/usb[1-9] devices with recent kernels # so we manually trigger events for usb for i in $(find /sys/devices -name 'usb[0-9]*'); do [ -e $i/uevent ] && echo add > $i/uevent done # trigger the rest of the coldplug mdev -s eend $? } start() { _start_service _start_coldplug } stop() { ebegin "Stopping busybox mdev" echo > /proc/sys/kernel/hotplug eend } # what cipher to use with -e option DEFAULT_CIPHER=aes-256-cbc # Uncomment the row below to encrypt config by default # ENCRYPTION=$DEFAULT_CIPHER # Uncomment below to avoid option to 'lbu commit' # Can also be set to 'floppy' # LBU_MEDIA=usb # Set the LBU_BACKUPDIR variable in case you prefer to save the apkovls # in a normal directory instead of mounting an external media. # LBU_BACKUPDIR=/root/config-backups # Uncomment below to let lbu make up to 3 backups # BACKUP_LIMIT=3 eckd_dasd= fba_dasd= _dasdfmt() { local block="$(ls "${ROOT}sys/bus/ccw/devices/$1/block" 2>/dev/null)" local dev="${ROOT}dev/$block" if ! [ -b "$dev" ]; then echo "$dev ($1) is not a block device" >&2 else if ask_yesno "WARNING: Erase ECKD DASD $1? (y/n)" "n"; then dasdfmt -b 4096 -d cdl -yp "$dev" fi fi } eckdselect_help() { cat <<-__EOF__ Enter each available DASD's address (e.g. 0.0.02d0) to format that DASD. Enter multiple addresses separated by a space to format multiple DASDs. Enter 'all' to format all available DASDs. WARNING: Data will be lost after formatted! Enter 'done' or 'none' to finish formatting. Enter 'abort' to quit the installer. __EOF__ } show_dasd_info() { local busid= vendor= block= devtype= cutype= for busid in $@; do vendor=$(cat "${ROOT}sys/bus/ccw/devices/$busid/vendor" 2>/dev/null) devtype=$(cat "${ROOT}/sys/bus/ccw/devices/$busid/devtype" 2>/dev/null) cutype=$(cat "${ROOT}/sys/bus/ccw/devices/$busid/cutype" 2>/dev/null) block="$(ls "${ROOT}/sys/bus/ccw/devices/$busid/block" 2>/dev/null)" echo " $busid ($devtype $cutype $vendor)" done } ask_eckd(){ local prompt="$1" local help_func="$2" shift 2 local default_dasd="all" apk add --quiet s390-tools resp= while ! all_in_list "$resp" $@ "$default_dasd" "abort" "done" "none"; do echo "Available ECKD DASD(s) are:" show_dasd_info "$@" ask "$prompt" "$default_dasd" case "$resp" in 'abort') exit 0;; 'done'|'none') return 0;; '?') $help_func;; 'all') for busid in $@; do _dasdfmt $busid; done;; *) for busid in $resp; do _dasdfmt $busid; done;; esac done } check_dasd() { eckd_dasd= fba_dasd= local dasd="$(get_bootopt dasd)" for _dasd in $( echo $dasd | tr ',' ' '); do [ -e "${ROOT}/sys/bus/ccw/drivers/dasd-eckd/$_dasd" ] && eckd_dasd="$eckd_dasd $_dasd" [ -e "${ROOT}/sys/bus/ccw/drivers/dasd-fba/$_dasd" ] && fba_dasd="$fba_dasd $_dasd" done if [ -n "$eckd_dasd" ]; then ask_eckd \ "Which ECKD DASD(s) would you like to be formatted using dasdfmt? (enter '?' for help)" \ eckdselect_help "$eckd_dasd" fi } is_dasd() { local disk="${1#*\/dev\/}" dasd_type="$2" for _dasd in $(eval "echo \$${dasd_type}_dasd"); do [ -e "${ROOT}sys/bus/ccw/drivers/dasd-$dasd_type/$_dasd/block/$disk" ] && return 0 done return 1 } setup_zipl() { local mnt="$1" root="$2" modules="$3" kernel_opts="$4" local parameters="root=$root modules=$modules $kernel_opts" local dasd="$(echo $eckd_dasd $fba_dasd | tr ' ' ',')" local s390x_net="$(get_bootopt s390x_net)" [ -n "$dasd" ] && parameters="$parameters dasd=$dasd" [ -n "$s390x_net" ] && parameters="$parameters s390x_net=$s390x_net" cat > "$mnt"/etc/zipl.conf <<- EOF [defaultboot] defaultauto prompt=1 timeout=${BOOT_TIMEOUT} default=linux target=/boot [linux] image=/boot/vmlinuz-$KERNEL_FLAVOR ramdisk=/boot/initramfs-$KERNEL_FLAVOR parameters="$parameters" EOF } setup_partitions_eckd() { local blocks_per_track=12 tracks_per_cylinder=15 boot_track= swap_track= local diskdev="$1" boot_size="$2" swap_size="$3" sys_type="$4" boot_track=$(($boot_size * 1024 / 4 / blocks_per_track)) [ "$swap_size" != 0 ] && swap_track=$(($swap_size * 1024 / 4 / blocks_per_track + boot_track + 1)) local conf="$(mktemp)" if [ -n "$swap_track" ]; then cat > "$conf" <<- EOF [first,$boot_track,native] [$((boot_track + 1)),$swap_track,swap] [$((swap_track + 1)),last,$sys_type] EOF else cat > "$conf" <<- EOF [first,$boot_track,native] [$((boot_track + 1)),last,$sys_type] EOF fi fdasd -s -c "$conf" $diskdev rm $conf } # shellcheck shell=sh # shellcheck disable=SC3043 # shellcheck disable=SC2034 PREFIX=/usr PROGRAM=$(basename "$0") : "${ROOT:=/}" [ "${ROOT}" = "${ROOT%/}" ] && ROOT="${ROOT}/" [ "${ROOT}" = "${ROOT#/}" ] && ROOT="${PWD}/${ROOT}" # echo if in verbose mode vecho() { if [ -n "$VERBOSE" ]; then echo "$@" fi } # echo unless quiet mode qecho() { if [ -z "$QUIET" ]; then echo "$@" fi } # echo to stderr eecho() { echo "$@" >&2 } # echo to stderr and exit with error die() { eecho "$@" exit 1 } init_tmpdir() { local __tmpd __tmpd=$(mktemp -d "/tmp/$PROGRAM-${$}-$(date +%s)-XXXXXXXXXX") || die "Failed to create tmp dir" # Expand $__tmpd now so cleanup uses this function's local value. # shellcheck disable=SC2064,SC2154 trap "rc=\$?; rm -fr \"$__tmpd\"; exit \$rc" 0 eval "$1=\"$__tmpd\"" } cd_assert() { cd "$1" || die "Failed to cd into ${2:-$1}" } default_read() { local n read -r n [ -z "$n" ] && n="$2" eval "$1=\"$n\"" } cfg_add() { $MOCK lbu_add "$@" } # return true if given value is Y, y, Yes, yes YES etc yesno() { case $1 in [Yy]|[Yy][Ee][Ss]) return 0;; esac return 1 } # Detect if we are running Xen is_xen() { test -d /proc/xen } # Detect if we are running Xen Dom0 is_xen_dom0() { is_xen && \ grep -q "control_d" /proc/xen/capabilities 2>/dev/null } # list of all network interfaces, sorted by ifindex sorted_ifaces() { for i in "$ROOT"/sys/class/net/*; do local iface="${i##*/}" if [ -e "$i"/ifindex ]; then printf "%s\t%s\n" "$(cat "$i"/ifindex)" "$iface" fi done | sort -n | awk '{print $2}' } # list of available network interfaces that aren't part of any bridge or bond available_ifaces() { local iflist="" ifpath="" iface="" if ! [ -d "$ROOT"/sys/class/net ]; then ip link | awk -F: '$1 ~ /^[0-9]+$/ {printf "%s",$2}' return fi for iface in $(sorted_ifaces); do # skip interfaces that are part of a bond or bridge ifpath="$ROOT/sys/class/net/$iface" if [ -d "$ifpath"/master/bonding ] || [ -d "$ifpath"/brport ] || [ "$iface" = "lo" ]; then continue fi iflist="${iflist}${iflist:+ }$iface" done echo "$iflist" } # from OpenBSD installer # Ask for a password, saving the input in $resp. # Display $1 as the prompt. # *Don't* allow the '!' options that ask does. # *Don't* echo input. # *Don't* interpret "\" as escape character. askpass() { printf %s "$1 " set -o noglob $MOCK stty -echo read -r resp $MOCK stty echo set +o noglob echo } # Ask for a password twice, saving the input in $_password askpassword() { local _oifs="$IFS" IFS= while :; do askpass "Password for $1 account? (will not echo)" _password=$resp askpass "Password for $1 account? (again)" # N.B.: Need quotes around $resp and $_password to preserve leading # or trailing spaces. [ "$resp" = "$_password" ] && break echo "Passwords do not match, try again." done IFS=$_oifs } # test the first argument against the remaining ones, return success on a match isin() { local _a="$1" _b shift for _b; do [ "$_a" = "$_b" ] && return 0 done return 1 } # remove all occurrences of first argument from list formed by # the remaining arguments rmel() { local _a="$1" _b shift for _b; do [ "$_a" != "$_b" ] && printf %s "$_b " done } # Issue a read into the global variable $resp. _ask() { local _redo=0 read -r resp case "$resp" in !) echo "Type 'exit' to return to setup." sh _redo=1 ;; !*) eval "${resp#?}" _redo=1 ;; esac return $_redo } # Ask for user input. # # $1 = the question to ask the user # $2 = the default answer # # Save the user input (or the default) in $resp. # # Allow the user to escape to shells ('!') or execute commands # ('!foo') before entering the input. ask() { local _question="$1" _default="$2" while :; do printf %s "$_question " [ -z "$_default" ] || printf "[%s] " "$_default" _ask && : "${resp:=$_default}" && break done } # Ask for user input until a non-empty reply is entered. # # $1 = the question to ask the user # $2 = the default answer # # Save the user input (or the default) in $resp. ask_until() { resp= while [ -z "$resp" ] ; do ask "$1" "$2" done } # Ask for user for y/n until y, yes, n or no is responded # # $1 = the question to ask the user # $2 = the default answer # # Returns true/sucess if y/yes was responded. false othewise ask_yesno() { while true; do ask "$1" "$2" case "$resp" in y|yes|n|no) break;; esac done yesno "$resp" } # Ask for the user to select one value from a list, or 'done'. # # $1 = name of the list items (disk, cd, etc.) # $2 = question to ask # $3 = list of valid choices # $4 = default choice, if it is not specified use the first item in $3 # # N.B.! $3 and $4 will be "expanded" using eval, so be sure to escape them # if they contain spooky stuff # # At exit $resp holds selected item, or 'done' ask_which() { local _name="$1" _query="$2" _list="$3" _def="$4" _dynlist _dyndef while :; do # Put both lines in ask prompt, rather than use a # separate 'echo' to ensure the entire question is # re-ask'ed after a '!' or '!foo' shell escape. eval "_dynlist=\"$_list\"" eval "_dyndef=\"$_def\"" # Clean away whitespace and determine the default set -o noglob # shellcheck disable=SC2086 set -- $_dyndef; _dyndef="$1" # shellcheck disable=SC2086 set -- $_dynlist; _dynlist="$*" set +o noglob [ $# -lt 1 ] && resp="done" && return : "${_dyndef:=$1}" echo "Available ${_name}s are: $_dynlist." printf "Which one %s? (or 'done') " "$_query" [ -n "$_dyndef" ] && printf "[%s] " "$_dyndef" _ask || continue [ -z "$resp" ] && resp="$_dyndef" # Quote $resp to prevent user from confusing isin() by # entering something like 'a a'. # shellcheck disable=SC2086 isin "$resp" $_dynlist "done" && break echo "'$resp' is not a valid choice." done } find_modloop_media() { devnum=$(mountpoint -d /.modloop 2>/dev/null) || return test -n "$devnum" || return modloop_file=$(cat "${ROOT}sys/dev/block/$devnum/loop/backing_file") || return test -n "$modloop_file" || return # assume that device name and mount point don't contain spaces modloop_media=$(df "$modloop_file" | awk 'NR==2{print $6}') || return test -n "$modloop_media" || return echo "$modloop_media" } # Extract fully qualified domain name from current hostname. If none is # currently set, use the provided fallback. get_fqdn() { local _dn _dn=$(hostname -f 2>/dev/null) _dn=${_dn#"$(hostname -s 2>/dev/null)"} _dn=${_dn#.} echo "${_dn:=$1}" } #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: copy-modloop Copy kernel modules from modloop and unmount loopback device options: -h Show this help __EOF__ exit $1 } while getopts "h" opt; do case $opt in h) usage 0;; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) set -e if ! rc-service -q modloop status; then echo "modloop is not started" exit 1 fi if [ -n "$DO_UMOUNT" ] && [ -z "$modloop_media" ]; then modloop_media=$(find_modloop_media) fi modulesdir=/lib/modules if [ -L "$modulesdir" ]; then modulesdir=$(readlink "$modulesdir") fi cp -a "$modulesdir" /lib/modules.tmp rc-service modloop stop rm -r /lib/modules mv /lib/modules.tmp /lib/modules if [ -n "$DO_UMOUNT" ]; then umount "$modloop_media" fi #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: genfstab [-h] [-U] ROOT Generate fstab entries from mounted filesystems below ROOT. options: -h Show this help -U Use UUIDs for device identifiers __EOF__ exit $1 } die() { echo "$@" >&2 exit 1 } blkid_uuid() { local dev="$1" blkid 2>/dev/null | sed -n "s|^$dev:.* UUID=\"\\([^\"]*\\)\".*|\\1|p" } source_spec() { local dev="$1" value= i= case "$dev" in "${ROOT}"/dev/*) dev="/dev/${dev#"${ROOT}"/dev/}";; esac if [ "$uuid" -eq 1 ]; then for i in $NO_DISK_UUID; do if [ "$i" = "$dev" ]; then printf "%s" "$dev" return fi done case "$dev" in /dev/md*) printf "%s" "$dev"; return;; esac value=$(blkid_uuid "$dev") if [ -n "$value" ]; then printf "UUID=%s" "$value" return fi fi printf "%s" "$dev" } is_pseudofs() { case "$1" in autofs|binfmt_misc|bpf|cgroup|cgroup2|configfs|debugfs|devpts|devtmpfs|efivarfs|fusectl|hugetlbfs|mqueue|proc|pstore|securityfs|sysfs|tracefs) return 0 ;; esac return 1 } print_mounts() { local root="$1" local fs_spec= fs_file= fs_vfstype= fs_mntops= fs_freq= fs_passno= local mountpoint= passno= awk -v root="${root%/}/" 'substr($2 "/", 1, length(root)) == root' \ "${ROOT}proc/mounts" | \ while read -r fs_spec fs_file fs_vfstype fs_mntops fs_freq fs_passno; do if is_pseudofs "$fs_vfstype"; then continue fi mountpoint=${fs_file#"$root"} [ -n "$mountpoint" ] || mountpoint=/ case "$mountpoint" in /*) ;; *) mountpoint="/$mountpoint";; esac mountpoint=$(echo "$mountpoint" | sed -E 's:/+:/:g') if [ "$mountpoint" = / ]; then passno=1 else passno=2 fi printf "%s\t%s\t%s\t%s\t0 %s\n" \ "$(source_spec "$fs_spec")" \ "$mountpoint" \ "$fs_vfstype" \ "$fs_mntops" \ "$passno" done } uuid=0 while getopts "hU" opt; do case "$opt" in h) usage 0;; U) uuid=1;; '?') usage 1 >&2;; esac done shift $((OPTIND - 1)) [ $# -eq 1 ] || usage 1 >&2 root=$(cd "$1" 2>/dev/null && pwd -P) || die "genfstab: $1 is not a directory" print_mounts "$root" #!/bin/sh PROGRAM=setup-acf VERSION=3.22.0-r0 PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { echo "usage: $PROGRAM [-ahn] [-e email] [-l address] [PACKAGE...]" exit $1 } pkgs="acf-core acf-alpine-baselayout acf-apk-tools openssl" while getopts "ae:hl:n" opt ; do case $opt in a) pkgs=$(apk search --quiet --exact 'acf-*');; e) EMAIL="$OPTARG";; h) usage 0;; l) address="$OPTARG";; n) create_passwd=no;; '?') usage "1" >&2;; esac done shift $(expr $OPTIND - 1) while [ $# -gt 0 ]; do pkgs="$pkgs acf-$1" shift done # install packages apk add mini_httpd $pkgs || exit 1 if [ "$create_passwd" != "no" ]; then mkdir -p /etc/acf if [ -f /etc/acf/passwd ]; then mv /etc/acf/passwd /etc/acf/passwd.backup fi echo "root:x:Admin account:ADMIN" >/etc/acf/passwd chmod 600 /etc/acf/passwd acfpasswd -s root fi # setup mini_httpd and start it if [ -d /var/www/localhost/htdocs ]; then mv /var/www/localhost/htdocs /var/www/localhost/htdocs.old fi mkdir -p /var/www/localhost/ ln -s /usr/share/acf/www/ /var/www/localhost/htdocs lbu add /var/www/localhost/htdocs SSLDIR=/etc/ssl/mini_httpd SSLCNF=$SSLDIR/mini_httpd.cnf KEYFILE=$SSLDIR/server.key CRTFILE=$SSLDIR/server.crt PEMFILE=$SSLDIR/server.pem if [ -f $PEMFILE ]; then echo "$PEMFILE already exist." else mkdir -p $SSLDIR cat >$SSLCNF <<-__EOF__ [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] OU=HTTPS server CN=$(hostname -f || hostname) emailAddress=${EMAIL:-postmaster@example.com} [ cert_type ] nsCertType = server __EOF__ echo "Generating certificates for HTTPS..." openssl genrsa 2048 > $KEYFILE openssl req -new -x509 -nodes -sha1 -days 3650 -key $KEYFILE \ -config $SSLCNF > $CRTFILE cat $KEYFILE >> $CRTFILE rm $KEYFILE mv $CRTFILE $PEMFILE fi cat >/etc/mini_httpd/mini_httpd.conf <<-__EOF__ nochroot dir=/var/www/localhost/htdocs user=nobody cgipat=cgi-bin** certfile=$PEMFILE port=443 ssl __EOF__ if [ -n "$address" ]; then echo "host=$address" >> /etc/mini_httpd/mini_httpd.conf fi rc-update -q add mini_httpd default rc-service mini_httpd restart # force update of dependency cache rc-update -q --update #!/bin/sh PROGRAM=setup-alpine VERSION=3.22.0-r0 PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" if [ -t 1 ]; then COLCYAN="\e[36m" COLWHITE="\e[97m" COLRESET="\e[0m" else COLCYAN="" COLWHITE="" COLRESET="" fi print_heading1() { printf "${COLCYAN}%s${COLRESET}\n" "$1" } print_heading2() { printf "${COLWHITE}%s${COLRESET}\n" "$1" } run_setup_interfaces() { local restart= [ -n "$rst_if" ] && restart="-r" if [ -n "$WIFIOPTS" ]; then setup-interfaces -w "$WIFIOPTS" $restart "$@" else setup-interfaces $restart "$@" fi } is_kvm_clock() { grep -q "kvm-clock" "$ROOT"sys/devices/system/clocksource/clocksource0/current_clocksource 2>/dev/null } is_virtual_console() { case "$(readlink "$ROOT"/proc/self/fd/0)" in /dev/tty[0-9]*) return 0;; esac return 1 } usage() { cat <<-__EOF__ usage: setup-alpine [-ahq] [-c FILE | -f FILE] Setup Alpine Linux options: -a Create Alpine Linux overlay file -c Create answer file (do not install anything) -e Empty root password -f Answer file to use for installation -h Show this help -q Quick mode. Ask fewer questions. __EOF__ exit $1 } while getopts "aef:c:hq" opt ; do case $opt in a) ARCHIVE=yes;; f) USEANSWERFILE="$OPTARG";; c) CREATEANSWERFILE="$OPTARG";; e) empty_root_password=1;; h) usage 0;; q) empty_root_password=1; quick=1; APKREPOSOPTS="-1"; HOSTNAMEOPTS="alpine";; '?') usage "1" >&2;; esac done shift $(expr $OPTIND - 1) rc_sys=$(openrc --sys) # mount xenfs so we can detect xen dom0 if [ "$rc_sys" = "XENU" ] && ! grep -q '^xenfs' /proc/mounts; then modprobe xenfs mount -t xenfs xenfs /proc/xen fi case "$USEANSWERFILE" in http*://*|ftp://*) # dynamically download answer file from URL (supports HTTP(S) and FTP) # ensure the network is up, otherwise setup a temporary interface config if ! rc-service networking --quiet status; then setup-interfaces -ar fi temp="$(mktemp)" wget -qO "$temp" "$USEANSWERFILE" || die "Failed to download '$USEANSWERFILE'" USEANSWERFILE="$temp" ;; *) [ -n "$USEANSWERFILE" ] && USEANSWERFILE=$(realpath "$USEANSWERFILE") ;; esac if [ -n "$USEANSWERFILE" ] && [ -e "$USEANSWERFILE" ]; then . "$USEANSWERFILE" fi if [ -n "$CREATEANSWERFILE" ]; then touch "$CREATEANSWERFILE" || echo "Cannot touch file $CREATEANSWERFILE" cat > "$CREATEANSWERFILE" <<-__EOF__ # Example answer file for setup-alpine script # If you don't want to use a certain option, then comment it out # Use US layout with US variant # KEYMAPOPTS="us us" KEYMAPOPTS=none # Set hostname to 'alpine' HOSTNAMEOPTS=alpine # Set device manager to mdev DEVDOPTS=mdev # Contents of /etc/network/interfaces INTERFACESOPTS="auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp hostname alpine-test " # Import a wpa_supplicant config for wifi after interface setup # WIFIOPTS="/path/to/wpa_supplicant.conf" # Search domain of example.com, Google public nameserver # DNSOPTS="-d example.com 8.8.8.8" # Set timezone to UTC #TIMEZONEOPTS="UTC" TIMEZONEOPTS=none # set http/ftp proxy #PROXYOPTS="http://webproxy:8080" PROXYOPTS=none # Add first mirror (CDN) APKREPOSOPTS="-1" # Create admin user USEROPTS="-a -u -g audio,input,video,netdev juser" #USERSSHKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOIiHcbg/7ytfLFHUNLRgEAubFz/13SwXBOM/05GNZe4 juser@example.com" #USERSSHKEY="https://example.com/juser.keys" # Install Openssh SSHDOPTS=openssh #ROOTSSHKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOIiHcbg/7ytfLFHUNLRgEAubFz/13SwXBOM/05GNZe4 juser@example.com" #ROOTSSHKEY="https://example.com/juser.keys" # Use openntpd # NTPOPTS="openntpd" NTPOPTS=none # Use /dev/sda as a sys disk # DISKOPTS="-m sys /dev/sda" DISKOPTS=none # Setup storage with label APKOVL for config storage #LBUOPTS="LABEL=APKOVL" LBUOPTS=none #APKCACHEOPTS="/media/LABEL=APKOVL/cache" APKCACHEOPTS=none __EOF__ echo "Answer file $CREATEANSWERFILE has been created. Please add or remove options as desired in that file" exit 0 fi printf "\n\n" print_heading1 " ALPINE LINUX INSTALL" print_heading1 "----------------------" if [ "$ARCHIVE" ] ; then echo "Creating an Alpine overlay" init_tmpdir ROOT else PKGADD="apk add" fi # set keymap if [ "$rc_sys" != LXC ]; then if is_virtual_console || [ -n "$KEYMAPOPTS" ]; then echo print_heading2 " Keymap" print_heading2 "--------" setup-keymap ${KEYMAPOPTS} fi # set hostname echo print_heading2 " Hostname" print_heading2 "----------" setup-hostname ${HOSTNAMEOPTS} && if [ -z "$SSH_CONNECTION" ]; then if rc-service --quiet networking status; then # manually restart networking, forcing this script to wait until networking starts rc-service --quiet networking stop rc-service --quiet hostname restart rc-service --quiet networking start else rc-service --quiet hostname restart fi fi setup-devd -C mdev # just to bootstrap fi # set Interface [ -z "$SSH_CONNECTION" ] && rst_if=1 echo -e "" print_heading2 " Interface" print_heading2 "-----------" if [ -n "$INTERFACESOPTS" ]; then if [ "$INTERFACESOPTS" != none ]; then printf "%s" "$INTERFACESOPTS" | run_setup_interfaces -i fi else run_setup_interfaces ${quick:+-a} fi # setup up dns if no dhcp was configured if [ -f "$ROOT"/etc/network/interfaces ] && ! grep -q '^iface.*dhcp' "$ROOT"/etc/network/interfaces; then setup-dns ${DNSOPTS} fi # set root password if [ -z "$empty_root_password" ]; then echo print_heading2 " Root Password" print_heading2 "---------------" while ! $MOCK passwd ; do echo "Please retry." done fi # pick timezone if [ -z "$quick" ]; then echo print_heading2 " Timezone" print_heading2 "----------" setup-timezone ${TIMEZONEOPTS} fi echo rc-update --quiet add networking boot rc-update --quiet add seedrng boot || rc-update --quiet add urandom boot svc_list="cron crond" if [ -e /dev/input/event0 ]; then # Only enable acpid for systems with input events entries # https://gitlab.alpinelinux.org/alpine/aports/-/issues/12290 svc_list="$svc_list acpid" fi for svc in $svc_list; do if rc-service --exists $svc; then rc-update --quiet add $svc fi done # start up the services $MOCK openrc ${SSH_CONNECTION:+-n} boot $MOCK openrc ${SSH_CONNECTION:+-n} default # update /etc/hosts - after we have got dhcp address # Get default fully qualified domain name from *first* domain # given on *last* search or domain statement. _dn=$(sed -n \ -e '/^domain[[:space:]][[:space:]]*/{s///;s/\([^[:space:]]*\).*$/\1/;h;}' \ -e '/^search[[:space:]][[:space:]]*/{s///;s/\([^[:space:]]*\).*$/\1/;h;}' \ -e '${g;p;}' "$ROOT"/etc/resolv.conf 2>/dev/null) _hn=$(hostname) _hn=${_hn%%.*} sed -i -e "s/^127\.0\.0\.1.*/127.0.0.1\t${_hn}.${_dn:-$(get_fqdn my.domain)} ${_hn} localhost.localdomain localhost/" \ "$ROOT"/etc/hosts 2>/dev/null if [ -z "$quick" ]; then echo print_heading2 " Proxy" print_heading2 "-------" setup-proxy -q ${PROXYOPTS} fi # activate the proxy if configured if [ -r "$ROOT/etc/profile" ]; then . "$ROOT/etc/profile" fi if ! is_kvm_clock && [ "$rc_sys" != "LXC" ] && [ "$quick" != 1 ]; then echo print_heading2 " Network Time Protocol" print_heading2 "-----------------------" setup-ntp ${NTPOPTS} fi echo print_heading2 " APK Mirror" print_heading2 "------------" setup-apkrepos ${APKREPOSOPTS} # Now that network and apk are operational we can install another device manager if [ "$rc_sys" != LXC ] && [ -n "$DEVDOPTS" -a "$DEVDOPTS" != mdev ]; then setup-devd ${DEVDOPTS} fi # lets stop here if in "quick mode" if [ "$quick" = 1 ]; then exit 0 fi echo print_heading2 " User" print_heading2 "------" setup-user ${USERSSHKEY+-k "$USERSSHKEY"} ${USEROPTS:--a -g 'audio input video netdev'} for i in "$ROOT"home/*; do if [ -d "$i" ]; then lbu add $i fi done setup-sshd ${ROOTSSHKEY+-k "$ROOTSSHKEY"} ${SSHDOPTS} root_keys="$ROOT"/root/.ssh/authorized_keys if [ -f "$root_keys" ]; then lbu add "$ROOT"/root fi if is_xen_dom0; then echo print_heading2 " Xen" print_heading2 "-----" setup-xen-dom0 ${XENDOM0OPTS} fi if [ "$rc_sys" = "LXC" ]; then exit 0 fi echo print_heading2 " Disk & Install" print_heading2 "----------------" diskmode_file=$(mktemp /tmp/alpine-install-diskmode.XXXXXXXXXX) || die 'Failed to create temporary diskmode file' DEFAULT_DISK=none \ setup-disk -w "$diskmode_file" -q ${DISKOPTS} || exit diskmode=$(cat "$diskmode_file" 2>/dev/null) # setup lbu and apk cache unless installed sys on disk if [ "$diskmode" != "sys" ]; then setup-lbu ${LBUOPTS} setup-apkcache ${APKCACHEOPTS} if [ -L "$ROOT"/etc/apk/cache ]; then apk cache sync fi fi #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" etc="$ROOT"etc proc="$ROOT"proc usage() { cat <<-__EOF__ usage: setup-apkcache [-h] [DIR] Setup apk caching. If DIR is not specified user will be asked for location. options: -h Show this help __EOF__ exit $1 } is_mounted() { if [ "$1" = "/" ]; then # In a chroot we may not find this mount point in /proc/mounts return 0 fi awk '{print $2}' "$proc"/mounts | grep -q "^$1$" } find_fstab_mount_point() { local dir="$1" local res= if ! [ -r "$etc"/fstab ]; then return fi while [ -n "$dir" ]; do res=$(awk "\$2 == \"$dir\" {print \$2}" "$etc"/fstab) if [ -n "$res" ]; then echo $res return fi dir=${dir%/*} done } # figure out mount point find_mount_point() { local dir="$(find_fstab_mount_point "$1")" if [ -d "$dir" ] && [ "$dir" != "/" ]; then echo $dir return fi local dir="$1" while [ -n "$dir" ] && ! [ -d "$dir" ]; do dir=${dir%/*} done local fs_id="$(stat -f -c %i "${dir:-/}")" local parent="${dir%/*}" while [ -n "$dir" ] && [ "$(stat -f -c %i "$parent/")" = "$fs_id" ]; do dir=$parent parent=${parent%/*} done [ -z "$dir" ] && dir=/ echo $dir } # get device for a given mount point get_dev_from_mountpoint() { local mnt="$1" local fstab="$2" awk "\$2 == \"$mnt\" {print \$1}" "$fstab" } get_mount_opts_from_mountpoint() { local mnt="$1" local fstab="$2" awk "\$2 == \"$mnt\" {gsub(/,/, \" \", \$4); print \$4}" "$fstab" } has_mount_opt() { local searchfor="$1" local mnt="$2" local fstab="$3" local opts="$(get_mount_opts_from_mountpoint "$mnt" "$fstab")" local opt= for opt in $opts; do if [ "$opt" = "$searchfor" ]; then return 0 fi done return 1 } is_mounted_ro() { has_mount_opt ro "$1" "$proc"/mounts } # get the fstype of the given mount point mount_fstype() { # we only want the last mount in case there are several awk -v mnt="$1" '$2 == "/" {fstype = mnt} END {print fstype}' \ "$proc"/mounts } apk_cache_help() { cat <<-__EOF__ Packages installed from network can be cached locally to be available during boot, before the network is started. Specifying a directory here will make apk cache the packages locally in this directory. Enter 'none' if you do not want to cache packages from network. __EOF__ } while getopts "h" opt; do case $opt in h) usage 0;; '?') usage "1" >&2;; esac done shift $(( OPTIND - 1 )) # try auto detetect what we suggest suggestion= if [ -L "$etc"/apk/cache ]; then suggestion=$(readlink "$etc"/apk/cache) fi if [ -z "$suggestion" ] && [ -f "$etc"/lbu/lbu.conf ]; then . "$etc"/lbu/lbu.conf if [ -n "$LBU_MEDIA" ]; then suggestion=/media/$LBU_MEDIA/cache fi fi if [ -z "$suggestion" ] && [ -L /dev/usbdisk ]; then suggestion=/media/usb/cache fi if [ -z "$suggestion" ] && [ "$(mount_fstype /)" != "tmpfs" ]; then suggestion=/var/cache/apk fi if [ -z "$suggestion" ]; then suggestion=none fi cachedir="$1" resp= while [ $# -eq 0 ] && [ -z "$cachedir" ]; do ask "Enter apk cache directory (or '?' or 'none')" "$suggestion" cachedir="$resp" if [ "$cachedir" = "?" ]; then apk_cache_help cachedir= fi done if [ "$cachedir" = "none" ]; then exit 0 fi case "$cachedir" in /*) ;; *) cachedir="${PWD#${ROOT%/}}/$cachedir";; esac mount=$(find_mount_point "$cachedir") cleanup= if ! is_mounted "$mount"; then # remove noauto that setup-lbu might have added if has_mount_opt noauto "$mount" "$etc"/fstab; then fstabtmp=$(mktemp) awk -v mnt="$mount" \ '$2 != mnt {print $0} $2 == mnt { sub(/noauto,|,noauto/, "", $4); sub(/^noauto$/, "defaults", $4); print $0 }' "$etc"/fstab > "$fstabtmp" mv "$fstabtmp" "$etc"/fstab fi mount "$mount" || exit 1 elif is_mounted_ro "$mount"; then mount -o remount,rw "$mount" || exit 1 cleanup="remount" fi mkdir -p "$ROOT$cachedir" if [ -L "$etc"/apk/cache ]; then rm -f "$etc"/apk/cache fi mkdir -p "$etc"/apk ln -s "$cachedir" "$etc"/apk/cache case "$cleanup" in umount) umount "$mount";; remount) mount -o remount,ro "$mount";; esac #!/bin/sh PROGRAM=setup-apkrepos PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" : ${MIRRORS_URL:=https://mirrors.alpinelinux.org/mirrors.txt} if [ "$ROOT" != "/" ]; then apk_root_opt="--root $ROOT" fi get_hostname_from_url() { local n="${1#*://}" echo ${n%%/*} } get_mirror_count() { set -- $MIRRORS echo $# } ask_setup_method() { local cstate="enable" if [ -z "$community_prefix" ]; then cstate="disable" fi cat <<-__EOF__ (f) Find and use fastest mirror (s) Show mirrorlist (r) Use random mirror (e) Edit ${ROOT}etc/apk/repositories with text editor (c) Community repo $cstate (skip) Skip setting up apk repositories __EOF__ ask "Enter mirror number or URL:" $1 printf "\n" } add_random_mirror() { local i=0 local count=$(get_mirror_count) if [ ${count:-0} -eq 0 ]; then echo "Warning! no mirror found" >&2 return 1 fi local random_mirror_index="$(awk -v count=$count 'BEGIN {srand(); printf("%.0f", rand() * count)}')" printf %s "Picking random mirror..." for mirror in $MIRRORS; do if [ $i -eq $random_mirror_index ]; then break fi i=$(( $i + 1 )) done add_mirror $mirror } time_cmd() { local start="$(cut -d ' ' -f1 /proc/uptime)" $@ >&2 || return awk -v start=$start -v end=$(cut -d ' ' -f1 /proc/uptime) \ 'BEGIN {print end - start; exit}' } find_fastest_mirror() { local url= local arch="$(apk --print-arch)" for url in $MIRRORS; do # warm up the dns cache $MOCK nslookup $(get_hostname_from_url $url) >/dev/null 2>&1 local time="$(time_cmd wget --spider -q -T 5 -t 1 \ ${url%/}/edge/main/$arch/APKINDEX.tar.gz)" if [ -n "$time" ]; then echo "$time $url" fi done | tee /dev/stderr | sort -nk1,1 | head -n1 | cut -d' ' -f2 } add_fastest_mirror() { echo "Finding fastest mirror... " local fastest="$(find_fastest_mirror)" if [ -z "$fastest" ]; then echo "Warning! No mirror found" >&2 return 1 fi add_mirror "$fastest" } # For every main/ repo, enable corresponding community/ repo add_community_mirrors() { for repo in $(grep '^[^#].*/main$' "$APKREPOS_PATH" 2>/dev/null); do crepo="${repo%%/main}/community" if ! grep -qx -- "$crepo" "$APKREPOS_PATH"; then echo ">>> Enabling repository $crepo" echo "$crepo" >> "$APKREPOS_PATH" fi done } # show mirrors show_mirror_list() { local mirror i=0 [ -z "$MIRRORS" ] && return echo "" echo "Available mirrors:" for mirror in $MIRRORS; do i=$(($i + 1)) echo "$i) $(get_hostname_from_url $mirror)" done echo "" } add_from_list() { local mirror_index="$1" if [ $mirror_index -lt 1 ] || [ $mirror_index -gt $(get_mirror_count) ]; then return 1 fi set $MIRRORS eval "mirror=\${$mirror_index}" add_mirror "$mirror" } get_alpine_release() { # use the main version already configured, or get the version from /etc/alpine-release local version="$(grep -Eom1 '[^/]+/main/?$' "${ROOT}"etc/apk/repositories 2>/dev/null | grep -Eo '^[^/]+' \ || cat "${ROOT}"etc/alpine-release 2>/dev/null)" case "$version" in *_git*|*_alpha*) release="edge";; [0-9]*.[0-9]*.[0-9]*) # release in x.y.z format, cut last digit release=v${version%.[0-9]*};; v[0-9]*.[0-9]*) # release in vx.y format, keep as is release="${version}";; *) # fallback to edge release="edge";; esac } add_mirror() { local mirror="$1" mkdir -p "${APKREPOS_PATH%/*}" echo "${mirror%/}/${release}/main" >> $APKREPOS_PATH echo "${community_prefix}${mirror%/}/${release}/community" >> $APKREPOS_PATH echo "Added mirror $(get_hostname_from_url $mirror)" } add_from_url() { mkdir -p "${APKREPOS_PATH%/*}" echo "$1" >> $APKREPOS_PATH echo "" >> $APKREPOS_PATH } edit_repositories() { local md5="$(md5sum $APKREPOS_PATH 2>/dev/null)" mkdir -p "${APKREPOS_PATH%/*}" ${EDITOR:-vi} "$APKREPOS_PATH" # return true if file changed test "$(md5sum $APKREPOS_PATH 2>/dev/null)" != "$md5" } usage() { cat <<-__EOF__ usage: setup-apkrepos [-ch] [-f|-r|-1|REPO...] setup-apkrepos -o Setup apk repositories options: -c Enable the community repo -f Detect and add fastest mirror -h Show this help -o Only enable a community repo for every defined repo -r Add a random mirror and do not prompt -1 Add first mirror on the list (normally a CDN) Option -o cannot be used with options -c, -f, -r or -1. __EOF__ exit $1 } community_prefix="#" add_fastest=false add_first=false add_random=false add_community_repos=false while getopts "c1fhor" opt; do case $opt in c) community_prefix="" if $add_community_repos; then usage "1" >&2 fi ;; f) add_fastest=true if $add_first || $add_random || $add_community_repos; then usage "1" >&2 fi ;; 1) add_first=true if $add_fastest || $add_random || $add_community_repos; then usage "1" >&2 fi ;; h) usage 0;; o) add_community_repos=true if $add_first || $add_fastest || $add_random \ || [ $community_prefix != "#" ]; then usage "1" >&2 fi ;; r) add_random=true if $add_first || $add_fastest || $add_community_repos; then usage "1" >&2 fi ;; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) if [ -z "$MIRRORS" ]; then MIRRORS=$(wget -qO- $MIRRORS_URL) fi APKREPOS_PATH="${ROOT}"etc/apk/repositories if [ -r "$APKREPOS_PATH" ]; then APKREPOS=$(cat "$APKREPOS_PATH") fi get_alpine_release changed=false if [ $# -gt 0 ] && ! $add_community_repos; then # replace the apk repos with the specified ones rm -f "$APKREPOS_PATH" mkdir -p "${APKREPOS_PATH%/*}" for i; do echo "$i" >> "$APKREPOS_PATH" && changed=true done fi if $add_first; then set -- $MIRRORS if [ $# -eq 0 ]; then echo "Warning! No mirror found" >&2 exit 1 fi add_mirror "$1" || exit changed=true fi if $add_random; then add_random_mirror || exit changed=true fi if $add_fastest; then add_fastest_mirror || exit changed=true fi if $add_community_repos; then add_community_mirrors || exit changed=true fi if $add_first || $add_random || $add_fastest || $add_community_repos; then interactive=false else interactive=true fi while $interactive && ! $changed; do if [ -z "$MIRRORS" ]; then MIRRORS=$(wget -qO- $MIRRORS_URL) fi ask_setup_method ${APKREPO_DEFAULT_ANSWER:-1} case "$resp" in skip) break;; [0-9]*) add_from_list $resp && changed=true;; /*|http://*|ftp://*|https://*) add_from_url "$resp" \ && changed=true;; s) show_mirror_list | more;; r|"r c") add_random_mirror && changed=true;; f|"f c") add_fastest_mirror && changed=true;; e) edit_repositories && changed=true;; c) case "$community_prefix" in "#") community_prefix=""; cstate="enabled";; "") community_prefix="#"; cstate="disabled";; esac printf "Community repository %s\n\n" "$cstate" ;; esac case "$resp" in *c) community_prefix=""; printf "Community repository enabled\n";; esac done if $changed; then printf %s "Updating repository indexes... " apk update --quiet $apk_root_opt && echo "done." fi #!/bin/sh # shellcheck shell=sh # shellcheck disable=SC3043 PREFIX=/usr : "${LIBDIR:=$PREFIX/lib}" # shellcheck source=/dev/null . "$LIBDIR/libalpine.sh" version=3.22.0-r0 files_to_move="boot efi apks syslinux.cfg .alpine-release" read_only_mounts= umounts= uninstalls= destdir= arch=${APK_ARCH:-$(apk --print-arch 2>/dev/null || uname -m)} default_bootloader() { case "$arch" in x86|x86_64) echo syslinux;; *) echo none;; esac } : "${BOOTLOADER:=$(default_bootloader)}" cleanup_tmpdata() { if [ -d "$destdir" ] && [ -d "$destdir/.new" ]; then rm -rf "$destdir"/.new fi } cleanup_mounts() { local i= cd_assert / sync sleep 1 for i in $read_only_mounts; do mount -o remount,ro "$i" || echo "Warning: Failed to remount as read-only. Is modloop mounted?" done read_only_mounts="" if [ -n "$umounts" ]; then # shellcheck disable=SC2086 umount $umounts umounts="" fi } cleanup_installs() { if [ -n "$uninstalls" ]; then apk del --quiet $uninstalls uninstalls="" fi } cleanup() { cleanup_tmpdata cleanup_mounts cleanup_installs } trap cleanup EXIT trap "exit 2" INT TERM QUIT # find device for mountpoint find_dev() { local mnt="${1%/}" # strip trailing / awk "\$2 == \"$mnt\" {print \$1}" /proc/mounts } # check if given device is on usb bus on_usb_bus() { local dev="$1" local sysdev [ -e /sys/block/"$dev" ] || return 1 sysdev="$(readlink -f /sys/block/"$dev"/device)" test "${sysdev##*/usb[0-9]}" != "$sysdev" } # check if given dir is read-only is_read_only() { local tmpfile tmpfile="$(mktemp -p "$1" 2>/dev/null)" [ -z "$tmpfile" ] && return 0 rm -f "$tmpfile" return 1 } # find what disk this partition belongs to find_disk_dev() { local i sysfsname sysfsname="${1#/dev/}" sysfsname=$(printf '%s\n' "$sysfsname" | sed 's:/:!:g') # cciss/c0d0 -> cciss!c0d0 if [ -e /sys/block/"$sysfsname" ]; then printf "/dev/%s\n" "$(printf '%s\n' "$sysfsname" | sed 's:!:/:g')" return 0 fi for i in /sys/block/*/"$sysfsname"; do [ -e "$i" ] || continue echo "$i" | cut -d/ -f4 | sed -e 's:!:/:g' -e 's:^:/dev/:' return 0 done return 1 } find_syslinux_cfg() { # find where new syslinux.cfg is for i in boot/syslinux/syslinux.cfg syslinux.cfg; do if [ -e "$1"/$i ]; then echo "$i" return 0 fi done return 1 } fix_syslinux_kernel() { local destdir="$1" syslinux_cfg="$2" old="$3" new="$4" echo "Fixing $syslinux_cfg: kernel $old -> $new" sed -i -e "/^\s*[Kk][Ee][Rr][Nn][Ee][Ll]\s/s|$old|$new|" \ "$destdir/$syslinux_cfg" } fix_syslinux_initrd() { local destdir="$1" syslinux_cfg="$2" old="$3" new="$4" echo "Fixing $syslinux_cfg: initrd $old -> $new" sed -i -e "/^\s*[Ii][Nn][Ii][Tt][Rr][Dd]\s/s|$old|$new|" \ -e "/^\s*[Aa][Pp][Pp][Ee][Nn][Dd]\s/s|initrd=$old|initrd=$new|" \ "$destdir/$syslinux_cfg" } check_syslinux_config() { local destdir="$1" syslinux_cfg="$2" local i k f initrds line fname flavor new if [ -z "$syslinux_cfg" ]; then die "Could not find any syslinux.cfg. Aborting" fi # kernels while IFS= read -r i; do [ -n "$i" ] || continue k="${destdir%/}/${i#/}" f=${k##*/} if [ -e "$k" ] && [ "${f#vmlinuz}" != "$f" ]; then continue fi if [ -e "${k%/*}"/vmlinuz-"$f" ] && [ -n "$fix_syslinux_cfg" ]; then fix_syslinux_kernel "$destdir" "$syslinux_cfg" "$i" "${i%/*}"/vmlinuz-"$f" elif ! [ -e "$k" ]; then echo "Warning: $syslinux_cfg: kernel $k was not found" printf ' Run %s -f -c "%s" to fix\n' "$0" "$destdir" fi done <<-EOF $(awk 'tolower($1) == "kernel" {print $2}' "$destdir"/"$syslinux_cfg") EOF #initramfs initrds=$(awk 'tolower($1) == "initrd" {gsub(",", " "); for (i=2; i<=NF; i++) print $i}' \ "$destdir"/"$syslinux_cfg") while IFS= read -r line; do for i in $line; do case $i in initrd=*) initrds=${i#initrd=};; esac done done <<-EOF $(awk 'tolower($1) == "append" {print $0}' "$destdir"/"$syslinux_cfg") EOF for i in $initrds; do if [ -e "$destdir"/"$i" ]; then continue fi fname=${i##*/} flavor=${fname%.gz} new=${i%/*}/initramfs-$flavor if [ -e "$destdir"/"$new" ] && [ -n "$fix_syslinux_cfg" ]; then fix_syslinux_initrd "$destdir" "$syslinux_cfg" "$i" "$new" else echo "Warning: initrd $i was not found. System will likely not boot" printf ' Run %s -f -c "%s" to fix\n' "$0" "$destdir" fi done } check_syslinux() { syslinux_cfg=${syslinux_cfg:-$(find_syslinux_cfg "$destdir")} [ -n "$syslinux_cfg" ] && vecho "Found $syslinux_cfg" check_syslinux_config "$destdir" "$syslinux_cfg" } install_syslinux() { local dest="$1" parent_dev="$2" echo "Making $dest bootable..." if ! [ -x "$(which syslinux)" ]; then apk add --quiet syslinux || die "Failed to install syslinux" uninstalls="syslinux" fi # we need to unmount the device before we can run syslinux cleanup_mounts fsync "$dest" syslinux "$dest" if [ -b "$parent_dev" ]; then dd if=/usr/share/syslinux/mbr.bin of="$parent_dev" status=none else echo "Warning: Could not find the parent device for $dest" fi } install_bootloader() { local dest="$1" parent_dev="$2" case "$BOOTLOADER" in none) ;; syslinux) install_syslinux "$dest" "$parent_dev" ;; *) die "Bootloader \"$BOOTLOADER\" not supported" ;; esac } version_check() { local new_dir="$1" old_dir="$2" # check if its same version local to_version to_version="$(cat "$new_dir"/.alpine-release)" if [ -n "$upgrade" ] && [ -e "$old_dir"/.alpine-release ]; then local from_version from_version="$(cat "$old_dir"/.alpine-release)" if [ -z "$force" ] && [ -n "$to_version" ] && [ "$from_version" = "$to_version" ]; then die "Source and target seems to have same version ($from_version). Aborting." fi echo "Upgrading $dest from $from_version to $to_version" else echo "Installing $dest to $to_version" fi } usage() { cat <<-__EOF__ $PROGRAM $version usage: $PROGRAM [-fhUusv] SOURCE [DEST] $PROGRAM -c DIR Copy the contents of SOURCE to DEST and make DEST bootable. SOURCE can be a directory or a ISO image. DEST can be a mounted directory or a device. If DEST is ommitted /media/usb will be used. Options: -f Force overwrite existing files. Will overwrite syslinux.cfg if upgrade. -h Show this help. -k fix kernel and initrd name in syslinux.cfg if needed. -U Replace current alpine_dev in syslinux.cfg with UUID if UUID found. -u Upgrade mode. Keep existing syslinux.cfg and don't run bootloader. -s Force run bootloader, even if upgrade mode. -v Verbose mode. Display whats going on. -c Check syslinux.cfg in destination DIR. Use with -f to fix. Environment: BOOTLOADER=syslinux|none Defaults to syslinux on x86, none elsewhere. __EOF__ exit 1 } while getopts "c:fhkUusv" opt; do case "$opt" in c) check_syslinux="$OPTARG";; f) force=1; fix_syslinux_cfg=1;; h) usage;; k) fix_syslinux_cfg=1;; U) replace_alpine_dev=1;; u) upgrade=1;; s) force_bootloader=1;; v) VERBOSE=1; export VERBOSE;; \?) usage;; *) usage;; esac done shift $((OPTIND - 1)) src=${1} dest=${2:-/media/usb} if [ -n "$check_syslinux" ]; then destdir="$check_syslinux" check_syslinux exit 0 fi [ -z "$src" ] && usage # find target device if [ -d "$dest" ]; then dest=${dest%/} # strip trailing / if ! awk '{print $2}' /proc/mounts | grep -q "^$dest\$"; then mount "$dest" || die "Failed to mount $dest" umounts="$umounts $dest" elif [ -n "$force_bootloader" ] && [ "$BOOTLOADER" != none ]; then die "Cannot run bootloader on mounted device" else nosyslinux=1 fi destdir="$dest" dest=$(find_dev "$destdir") elif [ -b "$dest" ]; then destdir="/media/${dest##*/}" mkdir -p "$destdir" mount "$dest" "$destdir" || die "Failed to mount $dest on $destdir" umounts="$umounts $destdir" fi # remount as rw if needed if is_read_only "$destdir"; then vecho "Remounting $destdir as read/write" mount -o remount,rw "$dest" || die "Failed to remount $destdir as rw" read_only_mounts="$read_only_mounts $destdir" fi # fish out label, uuid and type eval "$(blkid "$dest" | cut -d: -f2-)" vecho "Using $dest as target (mounted on $destdir)" # find parent device (i.e sda) dev="$dest" while [ -L "$dev" ]; do dev=$(readlink -f "$dev") done parent_dev=$(find_disk_dev "$dev") # check if this files exist and not in upgrade mode if [ -z "$upgrade" ] && [ -z "$force" ]; then for i in $files_to_move; do [ -e "$destdir"/"$i" ] && die "$destdir/$i already exists. Use -u to upgrade." done fi # remove partial upgrades if any rm -rf "$destdir"/.new "$destdir"/.old mkdir -p "$destdir"/.new || die "Failed to create $destdir/.new" # copy data from source to .new if [ -f "$src"/.alpine-release ]; then srcdir="${src%/}" version_check "$srcdir" "$destdir" for i in $files_to_move; do if [ -e "$srcdir"/"$i" ]; then vecho "Copying $srcdir/$i to $destdir/.new/" cp -dR "$srcdir"/"$i" "$destdir"/.new/ fi done else vecho "Extracting $src to $destdir/.new/" case "$src" in https://*|http://*|ftp://*) ${WGET:-wget} -O - "$src" | (cd_assert "$destdir"/.new; exec ${UNISO:-uniso}) \ || die "Failed to download or extract $src" echo "" ;; *) (cd_assert "$destdir"/.new; exec ${UNISO:-uniso}) < "$src" \ || die "Failed to download or extract $src" ;; esac version_check "$destdir/.new" "$destdir" fi if [ "$BOOTLOADER" = syslinux ]; then # find where new syslinux.cfg is syslinux_cfg=$(find_syslinux_cfg "$destdir"/.new) [ -n "$syslinux_cfg" ] && vecho "Found $syslinux_cfg" # abort early in case unexpected trouble if [ -z "$syslinux_cfg" ]; then die "Could not find any syslinux.cfg on new iso?" fi fi # make sure files are really there before we replace existing vecho "Flushing cache..." sync vecho "Replacing existing files..." mkdir -p "$destdir"/.old || die "Failed to create $destdir/.old" # move current files to .old for i in $files_to_move; do if [ -e "$destdir"/"$i" ]; then mv "$destdir"/"$i" "$destdir"/.old/ || die "Failed to move $destdir/$i to $destdir/.old/" fi done # keep any existing syslinux.cfg if [ "$BOOTLOADER" = syslinux ]; then if [ -e "$destdir"/.old/"$syslinux_cfg" ]; then mv "$destdir"/.old/"$syslinux_cfg" "$destdir"/.new/"$syslinux_cfg" elif [ -e "$destdir"/.old/syslinux.cfg ] \ && [ -e "$destdir"/.new/boot/syslinux/syslinux.cfg ]; then echo "Warning: moving syslinux.cfg to boot/syslinux/syslinux.cfg" >&2 mv "$destdir"/.old/syslinux.cfg "$destdir"/.new/boot/syslinux if [ -z "$force_bootloader" ]; then echo " You might need run: syslinux $dest" >&2 fi fi fi # move .new to current for i in $files_to_move; do if [ -e "$destdir"/.new/"$i" ]; then mv "$destdir"/.new/"$i" "$destdir"/ \ || die "Failed to move $destdir/.new/ to $destdir" fi done if [ "$BOOTLOADER" = syslinux ] \ && { [ -n "$replace_alpine_dev" ] || [ -z "$upgrade" ]; } \ && [ -n "$UUID" ]; then sed -E -i -e "s/alpine_dev=[^ \t:]+/alpine_dev=UUID=$UUID/" \ "$destdir"/"$syslinux_cfg" fi # verify syslinux.cfg if [ "$BOOTLOADER" = syslinux ]; then check_syslinux fi # cleanup [ -z "$keep_old" ] && rm -rf "$destdir"/.old "$destdir"/.new # If we only copy then we are done. if [ -n "$upgrade" ] && [ -z "$force_bootloader" ]; then exit 0 fi # prevent running syslinux on mounted device if [ -n "$nosyslinux" ] && [ "$BOOTLOADER" != none ]; then echo "Warning: Can not run bootloader on a mounted device" echo " You might need run bootloader manually" exit 0 fi install_bootloader "$dest" "$parent_dev" #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: setup-desktop [-h] [gnome|plasma|xfce|xfce-wayland|mate|sway|lxqt] Install a standard desktop options: -h Show this help __EOF__ exit $1 } prefer_gtk_dark() { if [ -e "$ROOT"/etc/gtk-3.0/settings.ini ]; then return fi mkdir -p "$ROOT"/etc/gtk-3.0 cat >"$ROOT"/etc/gtk-3.0/settings.ini <<-EOF [Settings] gtk-application-prefer-dark-theme=1 EOF } while getopts "h" opt; do case $opt in h) usage 0;; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) if [ $# -gt 1 ]; then usage "1" >&2 fi if [ $# -eq 0 ]; then users=$(awk -F: '{if ($3<65000 && $3 >= 1000) print $1}' "$ROOT"/etc/passwd 2>/dev/null) if [ -z "$users" ]; then setup-user -g "audio,video,netdev" fi fi de="$1" valid_desktops="xfce xfce-wayland gnome plasma mate sway lxqt none" if [ $# -eq 1 ] && ! isin "$de" $valid_desktops; then echo "$de is not a valid desktop" >&2 usage "1" >&2 fi shift while ! isin "$de" $valid_desktops; do ask "Which desktop environment? ('gnome', 'plasma', 'xfce', 'mate', 'sway', 'lxqt' or 'none')" none de="$resp" done case "$de" in none) exit 0 ;; mate) setup-xorg-base mate-desktop-environment ${BROWSER:-firefox} \ gvfs \ lightdm \ lightdm-gtk-greeter \ polkit \ dbus \ dbus-x11 \ font-dejavu \ "$@" rc-update add dbus rc-update add lightdm ;; xfce) prefer_gtk_dark setup-xorg-base xfce4 ${BROWSER:-firefox} \ elogind \ gvfs \ lightdm \ lightdm-gtk-greeter \ polkit-elogind \ xfce4-screensaver \ xfce4-terminal \ font-dejavu \ "$@" rc-update add lightdm ;; xfce-wayland) prefer_gtk_dark setup-wayland-base xfce4 ${BROWSER:-firefox} \ adwaita-icon-theme \ elogind \ greetd-gtkgreet \ gvfs \ labwc \ polkit-elogind \ xfce4-screensaver \ xfce4-terminal \ "$@" rc-update add dbus rc-update add greetd if ! grep -q ^rc_need "$ROOT"/etc/conf.d/greetd 2>/dev/null; then echo 'rc_need="seatd dbus"' >> "$ROOT"/etc/conf.d/greetd fi if ! grep -q xfce4-wayland "$ROOT"/etc/greetd/environments 2>/dev/null; then echo "xfce4-wayland" >> "$ROOT"/etc/greetd/environments fi addgroup greetd seat ;; lxqt) setup-xorg-base ${BROWSER:-firefox} \ lxqt-desktop \ lximage-qt \ obconf-qt \ pavucontrol-qt \ arandr \ sddm \ font-dejavu \ dbus \ dbus-x11 \ openbox \ elogind \ polkit-elogind \ gvfs \ udisks2 \ adwaita-qt \ oxygen \ "$@" rc-update add dbus rc-update add sddm rc-update add elogind ;; gnome) setup-wayland-base ${BROWSER:-firefox} "$@" # apk info needs community repos which are enabled with setup-wayland-base apk add $(apk info --quiet --depends gnome gnome-apps-core) rc-update add gdm ;; plasma) setup-wayland-base ${BROWSER:-firefox} "$@" # apk info needs community repos which are enabled with setup-wayland-base apk add $(apk info --quiet --depends plasma-desktop-meta kde-applications-base) rc-update add sddm ;; sway) setup-wayland-base ${BROWSER:-firefox} \ brightnessctl \ font-dejavu \ foot \ grim \ i3status \ sway \ swaybg \ swayidle \ swaylockd \ util-linux-login \ wl-clipboard \ wmenu \ xwayland \ "$@" ;; *) usage "1" >&2 ;; esac rc-update del acpid users=$(awk -F: '{if ($3<65000 && $3 >= 1000) print $1}' "$ROOT"/etc/passwd 2>/dev/null) if [ -z "$users" ]; then echo "WARNING: You need to create a user account. Please run: setup-user" >&2 echo "" >&2 fi #!/bin/sh -e PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" prog="${0##*/}" usage () { cat </dev/null || : rc-update delete --quiet --quiet mdevd sysinit 2>/dev/null || : fi } enable_mdevd () { apk add --quiet mdevd mdevd-openrc rc-update add --quiet mdevd sysinit rc-update add --quiet mdevd-init sysinit rc-update add --quiet hwdrivers sysinit rc-service --ifstopped mdevd start if "$1" ; then rc-service mdevd-init start rc-service hwdrivers --ifstopped start fi } disable_udev () { if rc-service --exists udev ; then rc-service --ifstopped --quiet udev-postmount stop rc-service --ifstarted --quiet udev stop rc-update delete --quiet --quiet udev-postmount default 2>/dev/null || : rc-update delete --quiet --quiet udev-settle sysinit 2>/dev/null || : rc-update delete --quiet --quiet udev-trigger sysinit 2>/dev/null || : rc-update delete --quiet --quiet udev sysinit 2>/dev/null || : fi } enable_udev () { apk add --quiet eudev udev-init-scripts udev-init-scripts-openrc rc-update add --quiet udev sysinit rc-update add --quiet udev-trigger sysinit rc-update add --quiet udev-settle sysinit rc-update add --quiet udev-postmount default rc-service --ifstopped udev start rc-service --ifstopped udev-trigger start rc-service --ifstopped udev-settle start rc-service --ifstopped udev-postmount start } coldplug=false while getopts "hC" opt ; do case $opt in h) usage 0;; C) coldplug=true ;; '?') usage 1 >&2;; esac done shift $((OPTIND - 1)) devd="$1" if test -n "$devd" ; then interactive=false else interactive=true fi until isin "$devd" mdev mdevd udev ; do ask "What program should manage /dev? [mdev|mdevd|udev]" mdev devd="$resp" done if "$interactive" ; then if ask_yesno "Scan the hardware to populate /dev? [y|n] (Say yes if you're running this script for the first time.)" n ; then coldplug=true else coldplug=false fi fi case "$devd" in mdev) disable_mdevd ; disable_udev ; enable_mdev $coldplug ;; mdevd) disable_mdev ; disable_udev ; enable_mdevd $coldplug ;; udev) disable_mdev ; disable_mdevd ; enable_udev $coldplug ;; esac #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: setup-dns [-h] [-d DOMAINNAME] [IPADDR...] Setup ${ROOT}etc/resolv.conf DNS settings options: -h Show this help -d specify search domain name The optional IPADDR are a list of DNS servers to use. __EOF__ exit $1 } while getopts "d:n:h" opt; do case $opt in d) DOMAINNAME="$OPTARG";; h) usage 0;; n) NAMESERVERS="$OPTARG";; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) conf="${ROOT}etc/resolv.conf" if [ -f "$conf" ] ; then domain=$(awk '/^domain/ {print $2}' $conf) dns=$(awk '/^nameserver/ {printf "%s ",$2}' $conf) elif fqdn="$(get_fqdn)" && [ -n "$fqdn" ]; then domain="$fqdn" fi if [ -n "$DOMAINNAME" ]; then domain="$DOMAINNAME" elif [ $# -eq 0 ]; then ask "DNS domain name? (e.g 'bar.com')" "$domain" domain="$resp" fi if [ -n "$NAMESERVERS" ] || [ $# -gt 0 ];then dns="$NAMESERVERS" else ask "DNS nameserver(s)?" "${dns% }" dns="$(echo $resp | tr ',' ' ')" fi if [ -n "$domain" ]; then mkdir -p "${conf%/*}" echo "search $domain" > $conf fi if [ -n "$dns" ] || [ $# -gt 0 ] && [ -f "$conf" ]; then sed -i -e '/^nameserver/d' $conf fi for i in $dns $@; do mkdir -p "${conf%/*}" echo "nameserver $i" >> $conf done #!/bin/sh PROGRAM=setup-hostname PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: setup-hostname [-h] [HOSTNAME] Sets the system hostname. options: -h Show this help Sets hostname to HOSTNAME or prompt if unspecified. __EOF__ exit $1 } # http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names valid_hostname() { # check length if [ "${#1}" -gt 255 ]; then echo "Hostname '$1' is too long." >&2 return 1 fi case "$1" in # check that it only contains valid chars *[!0-9a-zA-Z.-]*) echo "Hostname must only contain letters (a-z A-Z), digits (0-9), '.' or '-'" >&2 return 1 ;; # must not start with - or . -*) echo "Hostname must not start with a '-'" >&2; return 1;; .*) echo "Hostname must not start with a '.'" >&2; return 1;; esac return 0 } while getopts "hn:" opt; do case $opt in h) usage 0;; n) name="$OPTARG";; '?') usage "1" >&2;; esac done shift $(( $OPTIND - 1 )) if [ -z "$name" ] && [ $# -eq 1 ]; then name="$1" fi # if name is set, then we run non-interactively if [ -n "$name" ] && ! valid_hostname "$name"; then exit 1 fi HOST="$name" while [ -z "$name" ]; do HOST=$(hostname) ask "Enter system hostname (fully qualified form, e.g. 'foo.example.org')" "$HOST" if valid_hostname "$resp"; then HOST="$resp" break fi done mkdir -p "$ROOT/etc" echo "$HOST" > "$ROOT/etc/hostname" #!/bin/sh PREFIX=/usr : "${LIBDIR:=$PREFIX/lib}" # shellcheck disable=SC1091 . "$LIBDIR/libalpine.sh" MAPDIR="$ROOT/usr/share/bkeymaps" if [ -f "$ROOT/etc/conf.d/loadkmap" ]; then # shellcheck source=/dev/null . "$ROOT/etc/conf.d/loadkmap" variant=$(basename "$KEYMAP") variant="${variant%%.*}" fi usage() { cat <<-__EOF__ usage: setup-keymap [-h] [LAYOUT [VARIANT]] Sets the system keymap layout and variant. options: -h Show this help Sets keymap to LAYOUT (and VARIANT) or prompt if unspecified. __EOF__ exit "$1" } show_layouts() { output="" for file in "$MAPDIR"/*; do base=$(basename "$file") output="$output${base%.bmap.gz} " done print_column "$output" } show_variants() { output="" for file in "$MAPDIR/$1"/*; do base=$(basename "$file") output="$output${base%.bmap.gz} " done print_column "$output" } print_column() { # shellcheck disable=SC3043 local terminal_width max_word_length number_of_columns words i word if [ -z "$1" ]; then echo "Error: No data to display." >&2 return 1 fi terminal_width=$(stty size 2>/dev/null | cut -d' ' -f2) if [ -z "$terminal_width" ] || [ "$terminal_width" -eq 0 ]; then terminal_width=80 fi max_word_length=$(echo "$1" | awk '{for(i=1;i<=NF;i++) x = (length($i) > x ? length($i) : x)} END {print x}') number_of_columns=$((terminal_width / (max_word_length + 1))) if [ "$number_of_columns" -eq 0 ]; then number_of_columns=1 fi words=$1 i=0 for word in $words; do printf "%-${max_word_length}s " "$word" i=$((i + 1)) if [ $((i % number_of_columns)) -eq 0 ]; then printf "\n" fi done if [ $((i % number_of_columns)) -ne 0 ]; then printf "\n" fi } find_variant() { # shellcheck disable=SC3043 local variant="$1" for file in "$MAPDIR/$layout/$variant.bmap"*; do [ -f "$file" ] && return 0 done return 1 } select_layout() { while true; do if [ -z "$layout" ] || ! [ -d "$MAPDIR/$layout" ]; then layout=none fi show_layouts echo "" resp= ask "Select keyboard layout:" "$layout" echo "" if [ "$resp" = "abort" ] || [ "$resp" = "none" ] ; then goodbye 0 fi # shellcheck disable=SC2086 set -- $resp layout="$1" variant="$2" if [ -d "$MAPDIR/$layout" ] ; then return 0 fi done } setup_mapfile() { # shellcheck disable=SC3043 local name conf name=$(basename "$1") conf="$ROOT/etc/conf.d/loadkmap" mkdir -p "$ROOT/etc/keymap" mkdir -p "$ROOT/etc/conf.d/" if cp "$1" "$ROOT/etc/keymap/$name" ; then [ -f "$conf" ] && sed -i '/^KEYMAP=/d' "$conf" echo "KEYMAP=/etc/keymap/$name" >> "$conf" # we actually load the keymap now rc-service loadkmap restart rc-update --quiet add loadkmap boot goodbye 0 fi } select_variant() { while true; do show_variants "$layout" if [ ! -f "$MAPDIR/$layout/$variant.bmap" ] ; then variant="" fi echo "" ask "Select variant (or 'abort'):" "$variant" echo "" variant="$resp" if [ "$variant" = "abort" ] || [ "$variant" = "none" ]; then break; fi if find_variant "$variant"; then setup_mapfile "$file" fi done } goodbye() { apk del --quiet --no-progress .setup-keymap-deps exit "$1" } while getopts "h" opt; do case $opt in h) usage 0;; '?') usage "1" >&2;; esac done shift $((OPTIND - 1)) trap 'goodbye 1' INT apk add --quiet --virtual .setup-keymap-deps kbd-bkeymaps deflayout="$1" defvariant="$2" while true; do if [ -n "$deflayout" ]; then if [ "$deflayout" = "none" ]; then goodbye 0 fi layout="$deflayout" unset deflayout else select_layout fi if [ -n "$defvariant" ]; then variant="$defvariant" fi # if variant is defined, this could match, otherwise we'll have to choose a variant if find_variant "$variant"; then setup_mapfile "$file" else # if there is only one variant, just pick it count=0 for file in "$MAPDIR/$layout"/*; do [ -f "$file" ] && count=$((count + 1)) done if [ "$count" -eq 1 ]; then setup_mapfile "$MAPDIR/$layout/"* continue fi select_variant fi done #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: setup-lbu [-hq] [MEDIA] Setup lbu media settings. MEDIA is optional mountpoint under /media options: -h Show this help -q Quietly pick best suggestion. Only prompts user if unsure. __EOF__ exit $1 } get_filesystem_type() { local mountpoint="$1" shift awk "\$2==\"$mountpoint\" {print \$3}" "$@" 2>/dev/null } get_dev() { local mountpoint="$1" shift awk "\$2==\"$mountpoint\" {print \$1}" "$@" 2>/dev/null } is_in_fstab() { test -n "$(get_filesystem_type $1 "$ROOT"/etc/fstab)" } is_mounted() { test -n "$(get_filesystem_type $1 "$ROOT"/proc/mounts)" } is_iso9660() { local fs for fs in $(get_filesystem_type $1 "$ROOT"/proc/mounts "$ROOT"/etc/fstab); do if [ "$fs" = "iso9660" ]; then return 0 fi done return 1 } set_media() { local media="${1%/}" # strip trailing / local mnt=/media/$media case "$media" in LABEL=*|UUID=*) mkdir -p $ROOT/media/$media;; esac if [ -d "$media" ] && [ "${media#/media/}" != "$media" ]; then mnt="$media" media=${mnt#/media/} fi if [ "$ROOT" = "/" ] && ! [ -d "$mnt" ]; then echo "$mnt: not a directory" >&2 exit 1 fi # set LBU_MEDIA in /etc/lbu/lbu.conf if [ -f "${ROOT}"etc/lbu/lbu.conf ]; then sed -e "/^\#\?[[:space:]]*LBU_MEDIA=.*/s/.*/LBU_MEDIA=$media/" \ -i "${ROOT}"etc/lbu/lbu.conf if ! egrep -q '^LBU_MEDIA=' "${ROOT}"etc/lbu/lbu.conf; then echo "LBU_MEDIA=$media" >> "${ROOT}"etc/lbu/lbu.conf fi else mkdir -p "${ROOT}"etc/lbu echo "LBU_MEDIA=$media" >> "${ROOT}"etc/lbu/lbu.conf fi # append to fstab if its missing if ! is_in_fstab $mnt; then case "$media" in LABEL=*|UUID=*) dev=$(findfs $media) ;; *) dev=$(get_dev $mnt "$ROOT"/proc/mounts) ;; esac if [ -z "$dev" ]; then echo "$media: Could not find device" >&2 exit 1 fi # get TYPE=... LABEL=... UUID=... from blkid eval $(blkid $dev | awk -F: '{print $2}') if [ -z "$TYPE" ]; then echo "$media: Could not find filesystem type" >&2 exit 1 fi if [ -n "$UUID" ]; then UUID="UUID=$UUID" fi # use LABEL= if it was specifically selected, otherwise use UUID case "$media" in LABEL=*|UUID=*) UUID="$media";; esac mkdir -p "$ROOT"/etc printf "%s\t%s\t%s\tnoauto,ro 0 0\n" "${UUID:-$dev}" "$mnt" "$TYPE" >> "$ROOT"/etc/fstab fi # hack in case we have alpine_dev mounted on /media/usbdisk but # lbu is stored on /media/usb # Otherwise we get issues when we do lbu commit. if [ "$media" = "usb" ] && is_mounted /media/usbdisk; then mount --move /media/usbdisk /media/usb elif [ "$media" = "usbdisk" ] && is_mounted /media/usb; then mount --move /media/usb /media/usbdisk fi } while getopts "hq" opt; do case $opt in h) usage 0;; q) quiet=1;; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) # check if MEDIA option was given if [ -n "$1" ]; then if [ "$1" = "none" ]; then exit fi set_media "$1" exit fi alternatives= suggestion="none" for dir in /media/*; do [ -d "$dir" ] || continue if is_iso9660 "$dir"; then continue fi alternatives="$alternatives, '${dir#/media/}'" if is_mounted "$dir"; then suggestion=${dir#/media/} [ -n "$quiet" ] && media=$suggestion fi done if findfs "LABEL=APKOVL" >/dev/null; then suggestion="LABEL=APKOVL" case ", $alternatives, " in *"'LABEL=APKOVL'"*) ;; *) alternatives="$alternatives, 'LABEL=APKOVL'" ;; esac fi # strip leading , + space alternatives=${alternatives#, } # if nothing is mounted (or boot from cdrom) usbmnt=$(awk '$1 == "/dev/usbdisk" {print $2}' /proc/mounts) if [ -z "$suggestion" ] && [ -n "$usbmnt" ]; then suggestion=${usbmnt#/media/} if [ -n "$quiet" ] && [ -e /dev/usbdisk ]; then media=$suggestion fi fi while [ -z "$media" ]; do ask "Enter where to store configs ($alternatives or 'none')" "$suggestion" media="$resp" case "$media" in none|LABEL=*) break;; esac if [ -d "/media/$media" ]; then break fi echo "/media/$media is not a directory. Please try again." media= done if [ "$media" = "none" ]; then exit 0 fi set_media "$media" #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" conf="$ROOT/etc/ssmtp/ssmtp.conf" usage() { cat <<-EOF usage: setup-mta [-h] [SMTPSERVER] Setup SMTP server for outgoing email options: -h Show this help If SMTPSERVER is not prompted user will be prompted EOF exit $1 } cfgval() { awk -F= "/^$1/ {print \$2}" $conf 2>/dev/null } setcfg() { local key="$1" local value="$2" mkdir -p "${conf%/*}" sed -i "s/^\\(\\#\\)*$key=.*/$key=$value/" "$conf" 2>/dev/null if ! grep -q "^$key=" "$conf" 2>/dev/null; then echo "$key=$value" >> "$conf" fi } while getopts "h" opt; do case $opt in h) usage 0;; '?') usage "1" >&2;; esac done shift $(( $OPTIND - 1 )) mailhub="$1" if [ -f "$conf" ] ; then mailhub=$(cfgval mailhub) fi domain=$(hostname -d $hostname 2>/dev/null) if [ -z "$mailhub" ] ;then if [ -n "$domain" ] ; then mailhub="smtp.$domain" else mailhub=smtp fi fi res= while [ $# -eq 0 ] && [ "$res" != "221" ]; do ask "Outgoing mail server? (e.g 'smtp.isp.com')" "$mailhub" mailhub="$resp" if ! ask_yesno "Test connection? (y/n)" y; then break fi res=$(printf "quit\r\n\n" | nc $mailhub 25 | awk '/^221/ {print $1}') [ "x$res" = "x221" ] && echo "Connection to $mailhub is ok." done apk add ssmtp setcfg mailhub $mailhub setcfg FromLineOverride YES #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat >&$(( $1 + 1 ))<<-__EOF__ usage: setup-ntp [-h] [busybox|openntpd|chrony|none] Setup NTP time synchronization options: -h Show this help User is prompted if no NTP daemon is specified __EOF__ exit $1 } while getopts "hc:" opt; do case $opt in c) resp="$OPTARG";; h) usage 0;; '?') usage 1;; esac done shift $(( $OPTIND - 1 )) : ${resp:=$1} while [ $# -eq 0 ] && ! isin "$resp" busybox openntpd chrony none abort; do if date -d "$resp" >/dev/null 2>&1; then $MOCK date -s "$resp" else # display current time before asking for NTP client date fi ask "Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none')" busybox done pkgs="$resp" case "$resp" in none|abort) exit 0 ;; busybox) pkgs='' svc=ntpd ;; chrony) if apk info --installed --quiet acf-core; then pkgs="$pkgs acf-chrony" fi svc=chronyd ;; openntpd) svc=openntpd ;; *) echo "setup-ntp: '$resp' is not a supported NTP client" >&2 usage 1 ;; esac # force synchronous time-sync before network access $MOCK busybox ntpd -qnN -p pool.ntp.org >/dev/null [ -z "$pkgs" ] || apk add --quiet $pkgs rc-update add $svc default rc-service $svc start #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: setup-proxy [-hq] [PROXYURL] Setup http proxy options: -h Show this help -q Quiet mode If PROXYURL is not specified user will be prompted. __EOF__ exit $1 } while getopts "hp:q" opt; do case "$opt" in q) quiet=1;; h) usage 0;; p) ROOT=$OPTARG;; '?') usage "1" >&2;; esac done shift $(( $OPTIND - 1)) proxyurl="$1" PROFILE="$ROOT/etc/profile.d/proxy.sh" if [ -f "$PROFILE" ] ; then . $PROFILE fi suggest=${http_proxy:-none} while [ $# -eq 0 ]; do case "$proxyurl" in http://*|https://*) break;; none) break;; esac ask "HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none')" $suggest proxyurl=$resp done if [ "$proxyurl" = "none" ]; then rm -f "$PROFILE" else mkdir -p "${PROFILE%/*}" cat >"$PROFILE" <<-__EOF__ # this file was generated with and might get overwritten by setup-proxy export http_proxy=$proxyurl export https_proxy=$proxyurl export ftp_proxy=$proxyurl export no_proxy=localhost __EOF__ # busybox wget does not handle http proxies well apk add --quiet --no-progress wget fi if [ -z "$quiet" ] && [ "$proxyurl" != "none" ]; then cat <<-__EOF__ To make changes active please do login again or source $PROFILE with ". $PROFILE" __EOF__ fi #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: setup-sshd [-h] [-k authorized key] [openssh | dropbear | none] Setup sshd daemon options: -h Show this help -k Authorized key for root (HTTP(S)/FTP URL, the public key itself or 'none') __EOF__ exit $1 } root_login_help() { cat <<-__EOF__ Valid options are: yes root will be able to login with password or ssh key no root will not be allowed to login with ssh prohibit-password root will be able to login with ssh key but not with password __EOF__ } set_sshd_config() { local key="$1" value="$2" sed -i -E -e "s/^#?\s*$key.*/$key $value/" \ "$ROOT"/etc/ssh/sshd_config 2>/dev/null if ! grep -q -w "^$key" "$ROOT"/etc/ssh/sshd_config; then echo "$key $value" >> "$ROOT"/etc/ssh/sshd_config fi } get_sshd_config() { local key="$1" value="$2" awk -v key="$key" '$1 == key {print $2}' "$ROOT"/etc/ssh/sshd_config } authorized_key="$SSH_KEY" while getopts "hc:k:" opt; do case $opt in h) usage 0;; c) sshdchoice="$OPTARG";; # backwards compat k) authorized_key="$OPTARG";; '?') usage "1" >&2;; esac done shift $(( $OPTIND - 1 )) case "$1" in openssh|dropbear|none) sshdchoice="$1" ;; "") [ -z "$sshdchoice" ] && interactive=1;; *) usage "1" >&2;; esac while [ -n "$interactive" ] && ! isin "$sshdchoice" openssh dropbear none; do ask "Which ssh server? ('openssh', 'dropbear' or 'none')" openssh sshdchoice="$resp" done if [ "$sshdchoice" = "none" ]; then exit 0 fi pkgs="$sshdchoice" if [ "$sshdchoice" = "openssh" ] && apk info --quiet --installed acf-core; then pkgs="$pkgs acf-openssh" fi apk add --quiet $pkgs users=$(awk -F: '{if ($3<65000 && $3 >= 1000) print $1}' \ "$ROOT"/etc/passwd 2>/dev/null) if [ "$sshdchoice" = "openssh" ] && [ -z "$authorized_key" ] && [ -z "$users" ]; then suggest=prohibit-password while [ -n "$interactive" ]; do ask "Allow root ssh login? ('?' for help)" "$suggest" case "$resp" in '?') root_login_help continue ;; "al "*) suggest="https://gitlab.alpinelinux.org/${resp#* }.keys" continue ;; "gl "*) suggest="https://gitlab.com/${resp#* }.keys" continue ;; "gh "*) suggest="https://github.com/${resp#* }.keys" continue ;; yes|no|prohibit-password) set_sshd_config PermitRootLogin "$resp" break ;; http://*|https://*) authorized_key="$(wget -qO- "$resp")" || { echo "Failed to fetch key from '$resp'" continue } break ;; esac done suggest=none while [ -n "$interactive" ] && [ "$(get_sshd_config PermitRootLogin)" != "no" ]; do ask "Enter ssh key or URL for root (or 'none')" "$suggest" case "$resp" in "al "*) suggest="https://gitlab.alpinelinux.org/${resp#* }.keys" continue ;; "gl "*) suggest="https://gitlab.com/${resp#* }.keys" continue ;; "gh "*) suggest="https://github.com/${resp#* }.keys" continue ;; http://*|https://*) authorized_key="$(wget -qO- "$resp")" || { echo "Failed to fetch key from '$resp'" continue } break ;; none) break ;; *) if printf "%s\n" "$resp" | ssh-keygen -l -f - >/dev/null; then authorized_key="$resp" break fi ;; esac done fi # ask "Enter ssh key or URL for $username (or 'none')" none svc= case "$sshdchoice" in openssh) svc=sshd;; dropbear) svc=dropbear;; esac if [ -n "$svc" ]; then rc-update add $svc default rc-service $svc start fi if [ -n "$authorized_key" -a "$authorized_key" != "none" ]; then # if the argument is an HTTP(S)/FTP URL, try to fetch the file contents case "$authorized_key" in http*://*|ftp://*) key_url="$authorized_key" authorized_key="$(wget -qO- "$key_url")" || die "Failed to fetch key from '$key_url'" ;; esac umask 077 mkdir -p "$ROOT"/root/.ssh echo "$authorized_key" >> "$ROOT"/root/.ssh/authorized_keys fi #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" zroot="$ROOT"usr/share/zoneinfo usage() { cat <<-__EOF__ usage: setup-timezone [-h] [-k|-i] [TIMEZONE] Sets the timezone for the system. options: -h Show this help -i Install tzdata and symlink instead of making a copy -k Keep previous copies of tzdata TIMEZONE is relative $zroot. If TIMEZONE is not specified user will be prompted. __EOF__ exit $1 } show_tz_list() { local i z= list= local path="$zroot/$1" [ -d "$path" ] || return 1 for i in $(find $path/ -maxdepth 1); do case $i in *.tab|*/) continue;; esac if [ -d "$i" ]; then z="$z ${i##*/}/" else z="$z ${i##*/}" fi done ( cd_assert $path && ls --color=never -Cd $z ) } setup_tz() { local zonepath="$1" if ! $INSTALL_TZDATA; then local zone="${zonepath#*/zoneinfo/}" local zdir="${zonepath%/*}"/ zdir="${zdir#*/zoneinfo/}" if ! $KEEP_TZDATA; then rm -rf "${ROOT}"etc/zoneinfo fi mkdir -p "${ROOT}"etc/zoneinfo/$zdir cp "$zonepath" "${ROOT}"etc/zoneinfo/$zdir/ zonepath=/etc/zoneinfo/$zone fi rm -f "${ROOT}"etc/localtime ln -s "$zonepath" "${ROOT}"etc/localtime } INSTALL_TZDATA=false KEEP_TZDATA=false while getopts "hikz:" opt; do case $opt in h) usage 0;; i) INSTALL_TZDATA=true;; k) KEEP_TZDATA=true;; z) ZONE="$OPTARG";; # backwards compat '?') usage "1" >&2;; esac done shift $(( $OPTIND - 1)) if [ -z "$ZONE" ]; then ZONE="$1" fi if [ "$ZONE" = "none" ]; then exit 0 fi if $INSTALL_TZDATA; then pkg=tzdata apkdel= else pkg="--force --virtual .setup-timezone tzdata" apkdel=".setup-timezone" fi apk add --no-progress --quiet $pkg || die "Failed to install tzdata package" if [ -n "$apkdel" ]; then trap "exit 1" INT TERM HUP trap "apk del --no-progress --quiet $apkdel" EXIT fi if [ -L "${ROOT}"etc/localtime ]; then default_timezone=$(readlink "${ROOT}"etc/localtime) default_timezone=${timezone#*/zoneinfo/} else default_timezone=UTC fi if [ -n "$ZONE" ]; then [ -f "$zroot/$ZONE" ] || die "'$ZONE' is not a valid timezone on this system" setup_tz "$zroot"/"$ZONE" else while true; do show_tz_list echo "" ask "Which timezone are you in? (or '?' or 'none')" "$default_timezone" timezone=$(printf %s "$resp" | sed 's/\/\+/\//g; s/\/$//') case "$timezone" in none|abort) break;; ""|"?") continue;; esac while [ -d "$zroot/$timezone" ]; do show_tz_list "$timezone" echo "" ask "What sub-timezone of '$timezone' are you in? (or '?')" zone=$(printf %s "$resp" | sed 's/\/\+/\//g; s/\/$//') case "$zone" in ""|"?") continue;; esac default_timezone="$timezone" timezone="$timezone/$zone" done if [ -f "$zroot/$timezone" ]; then setup_tz "$zroot/$timezone" break fi echo "'$timezone' is not a valid timezone on this system" done fi #!/bin/sh PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" usage() { cat <<-__EOF__ usage: setup-user [-h] [-a] [-u] [-f FULLNAME] [-g GROUPS] [-k SSHKEY] [USERNAME] Create user account options: -a Create admin user. Add to wheel group and set up doas -h Show this help -f Set full name for user -g Comma or space separated list of groups to add user to -k ssh key or URL to ssh key (eg. https://gitlab.alpinelinux.org/user.keys) or 'none' for no key -u Unlock the user automatically (eg. creating the user non-interactively with an ssh key for login) If USERNAME is not specified user will be prompted. __EOF__ exit $1 } filter_ssh_keys() { # authorized_keys lines may start with an options field: # https://man.openbsd.org/sshd#AUTHORIZED_KEYS_FILE_FORMAT grep -E '^([^[:space:]]+[[:space:]]+)?(ecdsa|rsa|ssh|sk-ecdsa|sk-ssh)-' } retrieve_ssh_keys() { wget -q -O - "$1" | filter_ssh_keys } contains_ssh_key() { echo "$1" | filter_ssh_keys > /dev/null } while getopts "af:g:hk:u" opt; do case $opt in a) admin=1;; h) usage 0;; f) fullnameopt="$OPTARG";; g) groups="$OPTARG";; k) keysopt="$OPTARG";; u) forceunlock=1;; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) if [ -z "$admin$fullnameopt$groups$keysopt$forceunlock" ] && [ "$1" = "none" ]; then exit 0 fi if [ $# -gt 1 ]; then usage "1" >&2 elif [ $# -eq 1 ]; then username="$1" else interactive=1 fi while true; do fullname="$fullnameopt" if [ -n "$interactive" ] && [ -z "$username" ]; then if [ -n "$fullname" ]; then suggest=${fullname:+$(echo "$fullname" | sed -E 's/^(.).*\s+(.*)/\1\2/' | tr '[:upper:]' '[:lower:]')} else suggest=no fi # dont suggest something that has failed before if [ "$suggest" = "$failed_username" ]; then suggest= fi ask "Setup a user? (enter a lower-case loginname, or 'no')" $suggest case "$resp" in no) exit 0;; *) username="$resp";; esac fi if [ -n "$interactive" ] && [ -z "$fullnameopt" ]; then ask "Full name for user $username" ${lastfullname:-$username} fullname="$resp" lastfullname="$resp" fi if [ -n "$fullname" ]; then adduser -g "$fullname" -D "$username" && break else adduser -D "$username" && break fi if ! [ -n "$interactive" ]; then exit 1 fi failed_username="$username" username= done while [ -n "$interactive" ] && ! $MOCK passwd "$username"; do echo "Please retry." done if [ -n "$interactive" ] && [ -z "$keysopt" ]; then suggest=none while true; do ask "Enter ssh key or URL for $username (or 'none')" $suggest case "$resp" in al) suggest="https://gitlab.alpinelinux.org/$username.keys" continue ;; gl) suggest="https://gitlab.com/$username.keys" continue ;; gh) suggest="https://github.com/$username.keys" continue ;; none) break ;; https://*|http://*) sshkeys=$(retrieve_ssh_keys "$resp") ;; *) sshkeys="$resp" ;; esac if contains_ssh_key "$sshkeys"; then break fi echo "Did not find any key in '$resp'" done else case "$keysopt" in https://*|http://*) sshkeys=$(retrieve_ssh_keys "$keysopt");; none) sshkeys="" ;; *) sshkeys="$keysopt";; esac if [ -n "$sshkeys" ] && ! contains_ssh_key "$sshkeys"; then echo "Could not find any keys in '$resp'" >&2 exit 1 fi fi if [ -n "$sshkeys" ] && [ "$sshkeys" != "none" ]; then ssh_directory="$ROOT"/home/$username/.ssh ( umask 077 mkdir -p "$ssh_directory" echo "$sshkeys" > "$ssh_directory"/authorized_keys ) $MOCK chown -R $username:$username "$ssh_directory" fi if [ -n "$groups" ] && [ "$groups" != "none" ]; then for i in $(echo $groups | tr ',' ' '); do $MOCK addgroup "$username" "$i" || exit done fi if [ -n "$admin" ]; then apk add doas mkdir -p "$ROOT"/etc/doas.d echo "permit persist :wheel" >> "$ROOT"/etc/doas.d/20-wheel.conf $MOCK addgroup "$username" "wheel" || exit fi if [ -n "$forceunlock" ]; then $MOCK passwd -u "$username" || exit fi #!/bin/sh usage() { cat <<-__EOF__ usage: setup-wayland-base [-h] [PKG..] Set up system to use Wayland options: -h Show this help Installs and enables elogind, enables community repository, enable udev and install the packages PKG if specified. __EOF__ exit $1 } while getopts "h" opt; do case $opt in h) usage 0;; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) # For every main/ repo, enable corresponding community/ repo setup-apkrepos -o apk add elogind polkit-elogind "$@" setup-devd udev for service in cgroups dbus; do rc-service "$service" start rc-update add "$service" done #!/bin/sh # simple script to setup basic xen dom0 # kernel modules mkdir -p "$ROOT"/etc for mod in xen_netback xen_blkback xenfs xen_pciback xen_wdt tun; do if modprobe $mod; then grep -q -w $mod "$ROOT"/etc/modules 2>/dev/null || echo $mod >> "$ROOT"/etc/modules fi done # install packages apk add --quiet xen $@ # setup and start services for svc in xenstored xenconsoled xenqemu; do if rc-service --exist "$svc"; then rc-update --quiet add "$svc" default rc-service "$svc" start fi done #!/bin/sh usage() { cat <<-__EOF__ usage: setup-xorg-base [-h] [PKG..] Set up system to use Xorg options: -h Show this help Installs xorg-server, enables community repository, enable udev and install the packages PKG if specified. __EOF__ exit $1 } while getopts "h" opt; do case $opt in h) usage 0;; '?') usage "1" >&2;; esac done shift $(($OPTIND - 1)) # For every main/ repo, enable corresponding community/ repo setup-apkrepos -o apk add xorg-server xf86-input-libinput xinit eudev mesa-dri-gallium "$@" setup-devd udev #!/bin/sh VERSION=3.22.0-r0 PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" # set up temp dir init_tmpdir TMPD LBUCACHE="$TMPD/lbucache" usage() { cat <<-__EOF__ $PROGRAM $VERSION usage: $PROGRAM [-a|--all] [-i|--initd] [-l|--list] [-h|--help] options: -a, --all Select all updated files -i, --initd Use all new init.d scripts -l, --list List updated files -h, --help Show this help __EOF__ exit $1 } is_modified() { [ -f "$LBUCACHE" ] || lbu status -a | awk '{print $2}' > "$LBUCACHE" test -n "$( ( echo "$1" ; cat "$LBUCACHE" ) | sort | uniq -d)" } is_initd() { echo "$1" | grep etc/init.d/ > /dev/null } args=$(getopt -o ailh --long all,initd,list,help -n "$PROGRAM" -- "$@") if [ $? -ne 0 ]; then usage "1" >&2 fi eval set -- "$args" while true; do case $1 in -a|--all) aflag="-a";; -i|--initd) iflag="-i";; -l|--list) lflag="-l";; -h|--help) usage 0;; --) shift; break;; '?') usage "1" >&2;; esac shift done if which vimdiff >/dev/null; then vflag=", Vimdiff old new" vflag2="/v" fi for apknew in $(find "$ROOT/etc" -name '*.apk-new') ; do p="${apknew%.apk-new}" f="${p#${ROOT}/}" if [ "$lflag" ] ; then # just list the file if [ "$aflag" ] || is_modified "$f" ; then echo "$p" fi elif [ "$aflag" ] || is_modified "$f" ; then if [ "$iflag" ] && is_initd "$f" ; then echo "Autoupdating $p" mv "$apknew" "$p" continue fi diff -u "$p" "$apknew" # ask user what to do with the file unset resp while [ -z "$resp" ] ; do echo "New $p available:" ask "Quit, Next, Show diff, Edit new${vflag}, Zap new, Use new (q/n/s/e${vflag2}/z/u)" s case "$resp" in q) exit;; n) continue;; s) diff -u "$p" "$apknew" | ${PAGER:-less} unset resp ;; e) ${EDITOR:-vi} "$apknew" ; unset resp;; v) if [ "$vflag" ]; then vimdiff "$p" "$apknew" fi unset resp;; z) rm "$apknew";; u) mv "$apknew" "$p";; *) unset resp;; esac done else # auto update echo "Autoupdating unchanged $p" mv "$apknew" "$p" fi done #!/bin/sh -e # update-kernel # # Kernel and firmware update script for Alpine installations set up # with setup-bootable # # Copyright (c) 2014 Timo Teräs # Copyright (c) 2014-2021 Kaarle Ritvanen PREFIX=/usr : ${LIBDIR=$PREFIX/lib} . "$LIBDIR/libalpine.sh" SCRIPT=update-kernel VIRTUAL=.tmp-$SCRIPT SUPERUSER= [ $(id -u) -eq 0 ] && SUPERUSER=Y if [ -z "$SUPERUSER" ] && [ -z "$FAKEROOTKEY" ]; then exec fakeroot "$0" "$@" fi ARCH= BUILDDIR= FLAVOR= MEDIA= MNTDIR= PACKAGES= MKINITFS_ARGS= REPOSITORIES_FILE=/etc/apk/repositories KEYS_DIR=/etc/apk/keys CACHE_DIR=/etc/apk/cache SIGNALS="HUP INT TERM" tmpdir= features= modloopfw= error() { echo "$SCRIPT: $1" >&2 } usage() { [ "$2" ] && error "$2" $outfh local opts="[-F ]... [-p ]..." local dest_args="[-a ] " local outfh=2 [ $1 -eq 0 ] && outfh=1 cat >&$outfh <<-__EOF__ usage: $SCRIPT $opts [$dest_args] $SCRIPT -f $opts $dest_args $SCRIPT -b $opts [$dest_args] Options: -a|--arch Install kernel for specified architecture -b|--build-dir Install custom-built kernel -e|--modloopfw Install extra firmware in modloop -f|--flavor Install kernel of specified flavor -F|--feature Enable initfs feature -p|--package Additional module or firmware package -s|--modloopsign Sign modloop with abuild key -v|--verbose Verbose output -k|--apk-pubkey Include given key in initramfs -K|--hostkeys Include host keys in initramfs -C|--compression Initramfs compression (see mkinitfs for options) -M|--media Boot media directory layout -d|--keys-dir Override directory of trusted keys for apk -c|--cache-dir Override cache directory --repositories-file apk repositories file On low-memory systems, you may want to point the TMPDIR environment variable to a storage-backed directory. __EOF__ exit $1 } QUIET_OPT="--quiet" OPTS=$(getopt -l arch:,build-dir:,flavor:,feature:,modloopfw:,help,package:,modloopsign,verbose,apk-pubkey:,hostkeys,compression:,media,repositories-file:,keys-dir:,cache-dir: \ -n $SCRIPT -o a:b:e:f:F:hp:svk:KC:Md:c: -- "$@") || usage 1 eval set -- "$OPTS" while :; do case "$1" in -a|--arch) shift ARCH=$1 ;; -b|--build-dir) shift BUILDDIR=$1 ;; -f|--flavor) shift FLAVOR=$1 ;; -F|--feature) shift features="$features $1" ;; -e|--modloopfw) shift modloopfw="$modloopfw $1" ;; -h|--help) echo "$SCRIPT 3.22.0-r0" usage 0 ;; -p|--package) shift PACKAGES="$PACKAGES $1" ;; -s|--modloopsign) MODLOOPSIGN=1 ;; -v|--verbose) QUIET_OPT= ;; -k|--apk-pubkey) shift APK_PUBKEY="$1" ;; -K|--hostkeys) MKINITFS_ARGS="$MKINITFS_ARGS -K" ;; -C|--compression) shift MKINITFS_ARGS="$MKINITFS_ARGS -C $1" ;; -M|--media) MEDIA=yes ;; -d|--keys-dir) shift KEYS_DIR="$1" ;; -c|--cache-dir) shift CACHE_DIR="$1" ;; --repositories-file) shift REPOSITORIES_FILE=$1 ;; --) break ;; esac shift done DESTDIR=$2 [ "$BUILDDIR" -a "$FLAVOR" ] && \ usage 1 "Cannot specify both build directory and flavor" if [ -z "$DESTDIR" ]; then [ "$ARCH" ] && \ usage 1 "Cannot specify architecture when updating the current kernel" [ "$FLAVOR" ] && \ usage 1 "Cannot specify flavor when updating the current kernel" [ "$SUPERUSER" ] || \ usage 1 "Specify destination directory or run as superuser" while read MOUNT; do set -- $MOUNT [ $2 = /.modloop ] || continue DESTDIR=$(dirname $(busybox losetup $1 | cut -d " " -f 3)) MNTDIR=$(dirname "$DESTDIR") break done < /proc/mounts if [ -z "$MNTDIR" ]; then error "Module loopback device not mounted" exit 1 fi fi remount() { mount $1 -o remount "$MNTDIR" } ignore_sigs() { trap "" $SIGNALS } clean_up() { set +e ignore_sigs if [ "$SUPERUSER" ] && [ -z "$FAKEROOTKEY" ]; then apk del $QUIET_OPT $VIRTUAL fi rm -fr $tmpdir } sign_modloop() { local in="$1" local abuild_conf="${ABUILD_CONF:-"/etc/abuild.conf"}" [ -f "$abuild_conf" ] && . "$abuild_conf" local abuild_home="${ABUILD_USERDIR:-"$HOME/.abuild"}" local abuild_userconf="${ABUILD_USERCONF:-"$abuild_home/abuild.conf"}" [ -f "$abuild_userconf" ] && . "$abuild_userconf" local privkey="$PACKAGER_PRIVKEY" local pubkey="${PACKAGER_PUBKEY:-"${privkey}.pub"}" MODLOOPSIG=${in##*/}.SIGN.RSA.${pubkey##*/} echo "Signing: $in" openssl dgst -sha1 -sign "$privkey" \ -out "$tmpdir/$MODLOOPSIG" \ "$in" } trap clean_up EXIT $SIGNALS if [ "$SUPERUSER" ] && [ -z "$FAKEROOTKEY" ]; then apk add $QUIET_OPT --update-cache -t $VIRTUAL mkinitfs squashfs-tools kmod fi if [ -z "$features" ]; then . "$ROOT"/etc/mkinitfs/mkinitfs.conf fi if [ -z "$FLAVOR" ]; then FLAVOR=$(uname -r | cut -d - -f 3-) [ "$FLAVOR" ] || FLAVOR=vanilla fi [ "$ARCH" ] || ARCH=$(apk --print-arch) tmpdir=$(mktemp -dt $SCRIPT.XXXXXX) ROOTFS=$tmpdir/root BOOT=$ROOTFS/boot CACHE_DIR_OPT="--cache-dir $CACHE_DIR" if ! [ -e "$CACHE_DIR" ]; then CACHE_DIR_OPT= fi _apk() { local cmd="$1" shift apk $cmd $QUIET_OPT $CACHE_DIR_OPT -p $ROOTFS --arch "$ARCH" \ --keys-dir $KEYS_DIR \ --repositories-file "$REPOSITORIES_FILE" $* } extra_pkgs() { local res="$(_apk search -x $1)" if [ "$res" ]; then echo $* fi } # set up the root and get the APKINDEX for search _apk add --initdb --update-cache if [ "$BUILDDIR" ]; then case "$ARCH" in arm*|aarch64*) _install="zinstall dtbs_install" ;; riscv64) _install="zinstall dtbs_install" ;; *) _install="install" ;; esac mkdir -p $BOOT make -C "$BUILDDIR" $_install firmware_install modules_install \ INSTALL_MOD_PATH=$ROOTFS \ INSTALL_PATH=$BOOT \ INSTALL_DTBS_PATH='$ROOTFS/usr/lib/linux-$(KERNELRELEASE)' else if [ -z "$PACKAGES" ]; then PACKAGES="$(extra_pkgs "xtables-addons-$FLAVOR")" fi PACKAGES="$PACKAGES linux-$FLAVOR linux-firmware" fi _apk add --no-scripts alpine-base $PACKAGES if [ -n "$APK_PUBKEY" ]; then mkdir -p "$ROOTFS"/etc/apk/keys cp "$APK_PUBKEY" "$ROOTFS"/etc/apk/keys/ fi KVER_FLAVOR= [ "$FLAVOR" = vanilla ] || KVER_FLAVOR=-$FLAVOR KVER=$(basename $(ls -d $ROOTFS/lib/modules/*"$KVER_FLAVOR")) DTBDIR=$ROOTFS/boot/dtbs-$FLAVOR [ -d "$DTBDIR" ] || DTBDIR=$ROOTFS/usr/lib/linux-$KVER [ -d "$DTBDIR" ] || DTBDIR=$ROOTFS/boot find $ROOTFS/lib/modules \ -name \*.ko.gz -exec gunzip {} + \ -o -name \*.ko.xz -exec unxz {} + \ -o -name \*.ko.zst -exec unzstd --rm {} + $MOCK depmod -b $ROOTFS "$KVER" STAGING=$tmpdir/boot MODLOOP=$tmpdir/modloop MODIMG=modloop-$FLAVOR mkdir $MODLOOP $STAGING cp -a $ROOTFS/lib/modules $MODLOOP mkdir -p $MODLOOP/modules/firmware find $ROOTFS/lib/modules -type f -name "*.ko*" | xargs modinfo -k $KVER -F firmware | sort -u | while read FW; do for f in "$ROOTFS"/lib/firmware/$FW "$ROOTFS"/lib/firmware/$FW.xz "$ROOTFS"/lib/firmware/$FW.zst; do if ! [ -e "$f" ]; then continue fi target="$MODLOOP/modules/firmware/${f#*/lib/firmware}" if [ -d "$f" ]; then mkdir -p "${target%/*}" cp -a "$f" "${target%/*}" continue fi install -pD "$f" "$target" # copy also all potentially associated files f=${f%.zst} f=${f%.xz} for _file in "${f%.*}".*; do install -pD "$_file" "$MODLOOP/modules/firmware/${_file#*/lib/firmware/}" done done done # install extra firmware files in modloop (i.e. not detected by modinfo) for _xfw in $modloopfw; do if [ -f "$ROOTFS/lib/firmware/$_xfw" ]; then install -pD "$ROOTFS/lib/firmware/$_xfw" \ "$MODLOOP"/modules/firmware/"$_xfw" else echo "Warning: extra firmware \"$_xfw\" not found!" fi done # wireless regulatory db if [ -e "$ROOTFS"/lib/modules/*/kernel/net/wireless/cfg80211.ko* ]; then _apk add --no-scripts wireless-regdb for _regdb in "$ROOTFS"/lib/firmware/regulatory.db*; do [ -e "$_regdb" ] && install -pD "$_regdb" "$MODLOOP"/modules/firmware/"${_regdb##*/}" done fi # include bluetooth firmware in modloop if [ -e "$ROOTFS"/lib/modules/*/kernel/drivers/bluetooth/btbcm.ko* ]; then for _btfw in "$ROOTFS"/lib/firmware/brcm/*.hcd*; do install -pD "$_btfw" \ "$MODLOOP"/modules/firmware/brcm/"${_btfw##*/}" done fi # include sof firmware when available if [ -e "$ROOTFS"/lib/firmware/intel/sof ]; then mkdir -p "$MODLOOP"/modules/firmware/intel cp -RP "$ROOTFS"/lib/firmware/intel/sof* "$MODLOOP"/modules/firmware/intel/ fi case $ARCH in armhf) mksfs="-Xbcj arm" ;; armv7|aarch64) mksfs="-Xbcj arm,armthumb" ;; x86|x86_64) mksfs="-Xbcj x86" ;; *) mksfs= esac mksquashfs $MODLOOP "$STAGING/$MODIMG" $MKSQUASHFS_OPTS -comp xz -exit-on-error $mksfs if [ -n "$MODLOOPSIGN" ]; then sign_modloop "$STAGING/$MODIMG" MKINITFS_ARGS="$MKINITFS_ARGS -s $tmpdir/$MODLOOPSIG" fi $MOCK mkinitfs $MKINITFS_ARGS -q -b $ROOTFS -F "$features base squashfs" \ -o "$STAGING/initramfs-$FLAVOR" "$KVER" for file in System.map config vmlinuz; do cp "$BOOT/$file-$KVER" "$STAGING" 2>/dev/null \ || cp "$BOOT/$file-$FLAVOR" "$STAGING" 2>/dev/null \ || cp "$BOOT/$file" "$STAGING" 2>/dev/null \ || { echo "Failed to copy $file-$KVER, $file-$FLAVOR or $file" >&2; exit 1; } done if [ "$MNTDIR" ]; then ignore_sigs umount /.modloop remount -w fi mkdir -p "$DESTDIR"/${MEDIA:+boot/} mv $STAGING/* "$DESTDIR"/${MEDIA:+boot/} if [ -d "$DTBDIR" ]; then _opwd=$PWD case "$MEDIA,$FLAVOR" in yes,rpi*) _dtb="$DESTDIR/" ;; yes,*) _dtb="$DESTDIR/boot/dtbs-$FLAVOR" ;; *,*) _dtb="$DESTDIR/dtbs/dtbs-$FLAVOR" ;; esac mkdir -p "$_dtb" _dtb=$(realpath "$_dtb") cd_assert "$DTBDIR" find -type f \( -name "*.dtb" -o -name "*.dtbo" \) | cpio -pudm "$_dtb" 2> /dev/null cd_assert "$_opwd" fi if [ "$MNTDIR" ]; then set +e sync remount -r mount -o loop "$DESTDIR/$MODIMG" /.modloop fi exit 0 -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1yHJxQgsHQREclQu4Ohe qxTxd1tHcNnvnQTu/UrTky8wWvgXT+jpveroeWWnzmsYlDI93eLI2ORakxb3gA2O Q0Ry4ws8vhaxLQGC74uQR5+/yYrLuTKydFzuPaS1dK19qJPXB8GMdmFOijnXX4SA jixuHLe1WW7kZVtjL7nufvpXkWBGjsfrvskdNA/5MfxAeBbqPgaq0QMEfxMAn6/R L5kNepi/Vr4S39Xvf2DzWkTLEK8pcnjNkt9/aafhWqFVW7m3HCAII6h/qlQNQKSo GuH34Q8GsFG30izUENV9avY7hSLq7nggsvknlNBZtFUcmGoQrtx3FmyYsIC8/R+B ywIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvNijDxJ8kloskKQpJdx+ mTMVFFUGDoDCbulnhZMJoKNkSuZOzBoFC94omYPtxnIcBdWBGnrm6ncbKRlR+6oy DO0W7c44uHKCFGFqBhDasdI4RCYP+fcIX/lyMh6MLbOxqS22TwSLhCVjTyJeeH7K aA7vqk+QSsF4TGbYzQDDpg7+6aAcNzg6InNePaywA6hbT0JXbxnDWsB+2/LLSF2G mnhJlJrWB1WGjkz23ONIWk85W4S0XB/ewDefd4Ly/zyIciastA7Zqnh7p3Ody6Q0 sS2MJzo7p3os1smGjUF158s6m/JbVh4DN6YIsxwl2OjDOz9R0OycfJSDaBVIGZzg cQIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr8s1q88XpuJWLCZALdKj lN8wg2ePB2T9aIcaxryYE/Jkmtu+ZQ5zKq6BT3y/udt5jAsMrhHTwroOjIsF9DeG e8Y3vjz+Hh4L8a7hZDaw8jy3CPag47L7nsZFwQOIo2Cl1SnzUc6/owoyjRU7ab0p iWG5HK8IfiybRbZxnEbNAfT4R53hyI6z5FhyXGS2Ld8zCoU/R4E1P0CUuXKEN4p0 64dyeUoOLXEWHjgKiU1mElIQj3k/IF02W89gDj285YgwqA49deLUM7QOd53QLnx+ xrIrPv3A+eyXMFgexNwCKQU9ZdmWa00MjjHlegSGK8Y2NPnRoXhzqSP9T9i2HiXL VQIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwlzMkl7b5PBdfMzGdCT0 cGloRr5xGgVmsdq5EtJvFkFAiN8Ac9MCFy/vAFmS8/7ZaGOXoCDWbYVLTLOO2qtX yHRl+7fJVh2N6qrDDFPmdgCi8NaE+3rITWXGrrQ1spJ0B6HIzTDNEjRKnD4xyg4j g01FMcJTU6E+V2JBY45CKN9dWr1JDM/nei/Pf0byBJlMp/mSSfjodykmz4Oe13xB Ca1WTwgFykKYthoLGYrmo+LKIGpMoeEbY1kuUe04UiDe47l6Oggwnl+8XD1MeRWY sWgj8sF4dTcSfCMavK4zHRFFQbGp/YFJ/Ww6U9lA3Vq0wyEI6MCMQnoSMFwrbgZw wwIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3v8/ye/V/t5xf4JiXLXa hWFRozsnmn3hobON20GdmkrzKzO/eUqPOKTpg2GtvBhK30fu5oY5uN2ORiv2Y2ht eLiZ9HVz3XP8Fm9frha60B7KNu66FO5P2o3i+E+DWTPqqPcCG6t4Znk2BypILcit wiPKTsgbBQR2qo/cO01eLLdt6oOzAaF94NH0656kvRewdo6HG4urbO46tCAizvCR CA7KGFMyad8WdKkTjxh8YLDLoOCtoZmXmQAiwfRe9pKXRH/XXGop8SYptLqyVVQ+ tegOD9wRs2tOlgcLx4F/uMzHN7uoho6okBPiifRX+Pf38Vx+ozXh056tjmdZkCaV aQIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoSPnuAGKtRIS5fEgYPXD 8pSGvKAmIv3A08LBViDUe+YwhilSHbYXUEAcSH1KZvOo1WT1x2FNEPBEFEFU1Eyc +qGzbA03UFgBNvArurHQ5Z/GngGqE7IarSQFSoqewYRtFSfp+TL9CUNBvM0rT7vz 2eMu3/wWG+CBmb92lkmyWwC1WSWFKO3x8w+Br2IFWvAZqHRt8oiG5QtYvcZL6jym Y8T6sgdDlj+Y+wWaLHs9Fc+7vBuyK9C4O1ORdMPW15qVSl4Lc2Wu1QVwRiKnmA+c DsH/m7kDNRHM7TjWnuj+nrBOKAHzYquiu5iB3Qmx+0gwnrSVf27Arc3ozUmmJbLj zQIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvBxJN9ErBgdRcPr5g4hV qyUSGZEKuvQliq2Z9SRHLh2J43+EdB6A+yzVvLnzcHVpBJ+BZ9RV30EM9guck9sh r+bryZcRHyjG2wiIEoduxF2a8KeWeQH7QlpwGhuobo1+gA8L0AGImiA6UP3LOirl I0G2+iaKZowME8/tydww4jx5vG132JCOScMjTalRsYZYJcjFbebQQolpqRaGB4iG WqhytWQGWuKiB1A22wjmIYf3t96l1Mp+FmM2URPxD1gk/BIBnX7ew+2gWppXOK9j 1BJpo0/HaX5XoZ/uMqISAAtgHZAqq+g3IUPouxTphgYQRTRYpz2COw3NF43VYQrR bQIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwXEJ8uVwJPODshTkf2BH pH5fVVDppOa974+IQJsZDmGd3Ny0dcd+WwYUhNFUW3bAfc3/egaMWCaprfaHn+oS 4ddbOFgbX8JCHdru/QMAAU0aEWSMybfJGA569c38fNUF/puX6XK/y0lD2SS3YQ/a oJ5jb5eNrQGR1HHMAd0G9WC4JeZ6WkVTkrcOw55F00aUPGEjejreXBerhTyFdabo dSfc1TILWIYD742Lkm82UBOPsOSdSfOdsMOOkSXxhdCJuCQQ70DHkw7Epy9r+X33 ybI4r1cARcV75OviyhD8CFhAlapLKaYnRFqFxlA515e6h8i8ih/v3MSEW17cCK0b QwIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwR4uJVtJOnOFGchnMW5Y j5/waBdG1u5BTMlH+iQMcV5+VgWhmpZHJCBz3ocD+0IGk2I68S5TDOHec/GSC0lv 6R9o6F7h429GmgPgVKQsc8mPTPtbjJMuLLs4xKc+viCplXc0Nc0ZoHmCH4da6fCV tdpHQjVe6F9zjdquZ4RjV6R6JTiN9v924dGMAkbW/xXmamtz51FzondKC52Gh8Mo /oA0/T0KsCMCi7tb4QNQUYrf+Xcha9uus4ww1kWNZyfXJB87a2kORLiWMfs2IBBJ TmZ2Fnk0JnHDb8Oknxd9PvJPT0mvyT8DA+KIAPqNvOjUXP4bnjEHJcoCP9S5HkGC IQIDAQAB -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAutQkua2CAig4VFSJ7v54 ALyu/J1WB3oni7qwCZD3veURw7HxpNAj9hR+S5N/pNeZgubQvJWyaPuQDm7PTs1+ tFGiYNfAsiibX6Rv0wci3M+z2XEVAeR9Vzg6v4qoofDyoTbovn2LztaNEjTkB+oK tlvpNhg1zhou0jDVYFniEXvzjckxswHVb8cT0OMTKHALyLPrPOJzVtM9C1ew2Nnc 3848xLiApMu3NBk0JqfcS3Bo5Y2b1FRVBvdt+2gFoKZix1MnZdAEZ8xQzL/a0YS5 Hd0wj5+EEKHfOd3A75uPa/WQmA+o0cBFfrzm69QDcSJSwGpzWrD1ScH3AK8nWvoj v7e9gukK/9yl1b4fQQ00vttwJPSgm9EnfPHLAtgXkRloI27H6/PuLoNvSAMQwuCD hQRlyGLPBETKkHeodfLoULjhDi1K2gKJTMhtbnUcAA7nEphkMhPWkBpgFdrH+5z4 Lxy+3ek0cqcI7K68EtrffU8jtUj9LFTUC8dERaIBs7NgQ/LfDbDfGh9g6qVj1hZl k9aaIPTm/xsi8v3u+0qaq7KzIBc9s59JOoA8TlpOaYdVgSQhHHLBaahOuAigH+VI isbC9vmqsThF2QdDtQt37keuqoda2E6sL7PUvIyVXDRfwX7uMDjlzTxHTymvq2Ck htBqojBnThmjJQFgZXocHG8CAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlEyxkHggKCXC2Wf5Mzx4 nZLFZvU2bgcA3exfNPO/g1YunKfQY+Jg4fr6tJUUTZ3XZUrhmLNWvpvSwDS19ZmC IXOu0+V94aNgnhMsk9rr59I8qcbsQGIBoHzuAl8NzZCgdbEXkiY90w1skUw8J57z qCsMBydAueMXuWqF5nGtYbi5vHwK42PffpiZ7G5Kjwn8nYMW5IZdL6ZnMEVJUWC9 I4waeKg0yskczYDmZUEAtrn3laX9677ToCpiKrvmZYjlGl0BaGp3cxggP2xaDbUq qfFxWNgvUAb3pXD09JM6Mt6HSIJaFc9vQbrKB9KT515y763j5CC2KUsilszKi3mB HYe5PoebdjS7D1Oh+tRqfegU2IImzSwW3iwA7PJvefFuc/kNIijfS/gH/cAqAK6z bhdOtE/zc7TtqW2Wn5Y03jIZdtm12CxSxwgtCF1NPyEWyIxAQUX9ACb3M0FAZ61n fpPrvwTaIIxxZ01L3IzPLpbc44x/DhJIEU+iDt6IMTrHOphD9MCG4631eIdB0H1b 6zbNX1CXTsafqHRFV9XmYYIeOMggmd90s3xIbEujA6HKNP/gwzO6CDJ+nHFDEqoF SkxRdTkEqjTjVKieURW7Swv7zpfu5PrsrrkyGnsRrBJJzXlm2FOOxnbI2iSL1B5F rO5kbUxFeZUIDq+7Yv4kLWcCAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnC+bR4bHf/L6QdU4puhQ gl1MHePszRC38bzvVFDUJsmCaMCL2suCs2A2yxAgGb9pu9AJYLAmxQC4mM3jNqhg /E7yuaBbek3O02zN/ctvflJ250wZCy+z0ZGIp1ak6pu1j14IwHokl9j36zNfGtfv ADVOcdpWITFFlPqwq1qt/H3UsKVmtiF3BNWWTeUEQwKvlU8ymxgS99yn0+4OPyNT L3EUeS+NQJtDS01unau0t7LnjUXn+XIneWny8bIYOQCuVR6s/gpIGuhBaUqwaJOw 7jkJZYF2Ij7uPb4b5/R3vX2FfxxqEHqssFSg8FFUNTZz3qNZs0CRVyfA972g9WkJ hPfn31pQYil4QGRibCMIeU27YAEjXoqfJKEPh4UWMQsQLrEfdGfb8VgwrPbniGfU L3jKJR3VAafL9330iawzVQDlIlwGl6u77gEXMl9K0pfazunYhAp+BMP+9ot5ckK+ osmrqj11qMESsAj083GeFdfV3pXEIwUytaB0AKEht9DbqUfiE/oeZ/LAXgySMtVC sbC4ESmgVeY2xSBIJdDyUap7FR49GGrw0W49NUv9gRgQtGGaNVQQO9oGL2PBC41P iWF9GLoX30HIz1P8PF/cZvicSSPkQf2Z6TV+t0ebdGNS5DjapdnCrq8m9Z0pyKsQ uxAL2a7zX8l5i1CZh1ycUGsCAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0MfCDrhODRCIxR9Dep1s eXafh5CE5BrF4WbCgCsevyPIdvTeyIaW4vmO3bbG4VzhogDZju+R3IQYFuhoXP5v Y+zYJGnwrgz3r5wYAvPnLEs1+dtDKYOgJXQj+wLJBW1mzRDL8FoRXOe5iRmn1EFS wZ1DoUvyu7/J5r0itKicZp3QKED6YoilXed+1vnS4Sk0mzN4smuMR9eO1mMCqNp9 9KTfRDHTbakIHwasECCXCp50uXdoW6ig/xUAFanpm9LtK6jctNDbXDhQmgvAaLXZ LvFqoaYJ/CvWkyYCgL6qxvMvVmPoRv7OPcyni4xR/WgWa0MSaEWjgPx3+yj9fiMA 1S02pFWFDOr5OUF/O4YhFJvUCOtVsUPPfA/Lj6faL0h5QI9mQhy5Zb9TTaS9jB6p Lw7u0dJlrjFedk8KTJdFCcaGYHP6kNPnOxMylcB/5WcztXZVQD5WpCicGNBxCGMm W64SgrV7M07gQfL/32QLsdqPUf0i8hoVD8wfQ3EpbQzv6Fk1Cn90bZqZafg8XWGY wddhkXk7egrr23Djv37V2okjzdqoyLBYBxMz63qQzFoAVv5VoY2NDTbXYUYytOvG GJ1afYDRVWrExCech1mX5ZVUB1br6WM+psFLJFoBFl6mDmiYt0vMYBddKISsvwLl IJQkzDwtXzT2cSjoj3T5QekCAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvaaoSLab+IluixwKV5Od 0gib2YurjPatGIbn5Ov2DLUFYiebj2oJINXJSwUOO+4WcuHFEqiL/1rya+k5hLZt hnPL1tn6QD4rESznvGSasRCQNT2vS/oyZbTYJRyAtFkEYLlq0t3S3xBxxHWuvIf0 qVxVNYpQWyM3N9RIeYBR/euXKJXileSHk/uq1I5wTC0XBIHWcthczGN0m9wBEiWS 0m3cnPk4q0Ea8mUJ91Rqob19qETz6VbSPYYpZk3qOycjKosuwcuzoMpwU8KRiMFd 5LHtX0Hx85ghGsWDVtS0c0+aJa4lOMGvJCAOvDfqvODv7gKlCXUpgumGpLdTmaZ8 1RwqspAe3IqBcdKTqRD4m2mSg23nVx2FAY3cjFvZQtfooT7q1ItRV5RgH6FhQSl7 +6YIMJ1Bf8AAlLdRLpg+doOUGcEn+pkDiHFgI8ylH1LKyFKw+eXaAml/7DaWZk1d dqggwhXOhc/UUZFQuQQ8A8zpA13PcbC05XxN2hyP93tCEtyynMLVPtrRwDnHxFKa qKzs3rMDXPSXRn3ZZTdKH3069ApkEjQdpcwUh+EmJ1Ve/5cdtzT6kKWCjKBFZP/s 91MlRrX2BTRdHaU5QJkUheUtakwxuHrdah2F94lRmsnQlpPr2YseJu6sIE+Dnx4M CfhdVbQL2w54R645nlnohu8CAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU pNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X 0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6 ADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ raQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy KLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj /QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H Kuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs mFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1 /J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq XIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4 VORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0 XkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ piM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46 xLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP ODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM EyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr DzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+ f53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF HwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk Ok9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6 9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT JZDr++FjKrnnijbyNF8b98UCAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0 lIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm a6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw tO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C US/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP hP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv LSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0 x9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF wmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG LPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV GZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C 8CM1S15HxV78s9dFntEqIokCAwEAAQ== -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/ 6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ +HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP rt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg odXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK vrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY s+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS Ym6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD YTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND 7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3 G9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw A8+KzFseBh4UFGgue78KwgkCAwEAAQ== -----END PUBLIC KEY----- 3.24.1 Welcome to Alpine Linux 3.24 Kernel \r on \m (\l) https://secdb.alpinelinux.org/v3.24/main.json https://secdb.alpinelinux.org/v3.24/community.json NAME="Alpine Linux" ID=alpine VERSION_ID=3.24.1 PRETTY_NAME="Alpine Linux v3.24" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues" # This file specifies the Certificate Transparency logs # that are to be trusted. # Google's list of logs can be found here: # www.certificate-transparency.org/known-logs # A Python program to convert the log list to OpenSSL's format can be # found here: # https://github.com/google/certificate-transparency/blob/master/python/utilities/log_list/print_log_list.py # Use the "--openssl_output" flag. # This file specifies the Certificate Transparency logs # that are to be trusted. # Google's list of logs can be found here: # www.certificate-transparency.org/known-logs # A Python program to convert the log list to OpenSSL's format can be # found here: # https://github.com/google/certificate-transparency/blob/master/python/utilities/log_list/print_log_list.py # Use the "--openssl_output" flag. # # OpenSSL example configuration file. # See doc/man5/config.pod for more info. # # This is mostly being used for generation of certificate requests, # but may be used for auto loading of providers # Note that you can include other files from the main configuration # file using the .include directive. #.include filename # This definition stops the following lines choking if HOME isn't # defined. HOME = . # Use this in order to automatically load providers. openssl_conf = openssl_init # Comment out the next line to ignore configuration errors config_diagnostics = 1 # Extra OBJECT IDENTIFIER info: # oid_file = $ENV::HOME/.oid oid_section = new_oids # To use this configuration file with the "-extfile" option of the # "openssl x509" utility, name here the section containing the # X.509v3 extensions to use: # extensions = # (Alternatively, use a configuration file that has only # X.509v3 extensions in its main [= default] section.) [ new_oids ] # We can add new OIDs in here for use by 'ca', 'req' and 'ts'. # Add a simple OID like this: # testoid1=1.2.3.4 # Or use config file substitution like this: # testoid2=${testoid1}.5.6 # Policies used by the TSA examples. tsa_policy1 = 1.2.3.4.1 tsa_policy2 = 1.2.3.4.5.6 tsa_policy3 = 1.2.3.4.5.7 # For FIPS # Optionally include a file that is generated by the OpenSSL fipsinstall # application. This file contains configuration data required by the OpenSSL # fips provider. It contains a named section e.g. [fips_sect] which is # referenced from the [provider_sect] below. # Refer to the OpenSSL security policy for more information. # .include fipsmodule.cnf [openssl_init] providers = provider_sect # List of providers to load [provider_sect] default = default_sect # The fips section name should match the section name inside the # included fipsmodule.cnf. # fips = fips_sect # If no providers are activated explicitly, the default one is activated implicitly. # See man 7 OSSL_PROVIDER-default for more details. # # If you add a section explicitly activating any other provider(s), you most # probably need to explicitly activate the default provider, otherwise it # becomes unavailable in openssl. As a consequence applications depending on # OpenSSL may not work correctly which could lead to significant system # problems including inability to remotely access the system. [default_sect] # activate = 1 #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = ./demoCA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. #unique_subject = no # Set to 'no' to allow creation of # several certs with same subject. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem # The private key x509_extensions = usr_cert # The extensions to add to the cert # Comment out the following two lines for the "traditional" # (and highly broken) format. name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options # Extension copying option: use with caution. # copy_extensions = copy # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # so this is commented out by default to leave a V1 CRL. # crlnumber must also be commented out to leave a V1 CRL. # crl_extensions = crl_ext default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = default # use public key default MD preserve = no # keep passed DN ordering # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extensions to add to the self signed cert # Passwords for private keys if not present they will be prompted for # input_password = secret # output_password = secret # This sets a mask for permitted string types. There are several options. # default: PrintableString, T61String, BMPString. # pkix : PrintableString, BMPString (PKIX recommendation before 2004) # utf8only: only UTF8Strings (PKIX recommendation after 2004). # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). # MASK:XXXX a literal mask value. # WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. string_mask = utf8only # req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = AU countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Some-State localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Internet Widgits Pty Ltd # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) #organizationalUnitName_default = commonName = Common Name (e.g. server FQDN or YOUR name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 # SET-ex3 = SET extension number 3 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE # This is typical in keyUsage for a client certificate. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # This stuff is for subjectAltName and issuerAltname. # Import the email address. # subjectAltName=email:copy # An alternative to produce certificates that aren't # deprecated according to PKIX. # subjectAltName=email:move # Copy subject details # issuerAltName=issuer:copy # This is required for TSA certificates. # extendedKeyUsage = critical,timeStamping [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = critical,CA:true # Key usage: this is typical for a CA certificate. However since it will # prevent it being used as an test self-signed certificate it is best # left out by default. # keyUsage = cRLSign, keyCertSign # Include email address in subject alt name: another PKIX recommendation # subjectAltName=email:copy # Copy issuer details # issuerAltName=issuer:copy # DER hex encoding of an extension: beware experts only! # obj=DER:02:03 # Where 'obj' is a standard or added object # You can even override a supported extension: # basicConstraints= critical, DER:30:03:01:01:FF [ crl_ext ] # CRL extensions. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always [ proxy_cert_ext ] # These extensions should be added when creating a proxy certificate # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE # This is typical in keyUsage for a client certificate. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # This stuff is for subjectAltName and issuerAltname. # Import the email address. # subjectAltName=email:copy # An alternative to produce certificates that aren't # deprecated according to PKIX. # subjectAltName=email:move # Copy subject details # issuerAltName=issuer:copy # This really needs to be in place for it to be a proxy certificate. proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo #################################################################### [ tsa ] default_tsa = tsa_config1 # the default TSA section [ tsa_config1 ] # These are used by the TSA reply generation only. dir = ./demoCA # TSA root directory serial = $dir/tsaserial # The current serial number (mandatory) crypto_device = builtin # OpenSSL engine to use for signing signer_cert = $dir/tsacert.pem # The TSA signing certificate # (optional) certs = $dir/cacert.pem # Certificate chain to include in reply # (optional) signer_key = $dir/private/tsakey.pem # The TSA private key (optional) signer_digest = sha256 # Signing digest to use. (Optional) default_policy = tsa_policy1 # Policy if request did not specify it # (optional) other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory) accuracy = secs:1, millisecs:500, microsecs:100 # (optional) clock_precision_digits = 0 # number of digits after dot. (optional) ordering = yes # Is ordering defined for timestamps? # (optional, default: no) tsa_name = yes # Must the TSA name be included in the reply? # (optional, default: no) ess_cert_id_chain = no # Must the ESS cert id chain be included? # (optional, default: no) ess_cert_id_alg = sha256 # algorithm to compute certificate # identifier (optional, default: sha256) [insta] # CMP using Insta Demo CA # Message transfer server = pki.certificate.fi:8700 # proxy = # set this as far as needed, e.g., http://192.168.1.1:8080 # tls_use = 0 path = pkix/ # Server authentication recipient = "/C=FI/O=Insta Demo/CN=Insta Demo CA" # or set srvcert or issuer ignore_keyusage = 1 # quirk needed to accept Insta CA cert not including digitalsignature unprotected_errors = 1 # quirk needed to accept negative responses possibly not protected extracertsout = insta.extracerts.pem # Client authentication ref = 3078 # user identification secret = pass:insta # can be used for both client and server side # Generic message options cmd = ir # default operation, can be overridden on cmd line with, e.g., kur # Certificate enrollment subject = "/CN=openssl-cmp-test" newkey = insta.priv.pem out_trusted = apps/insta.ca.crt # does not include keyUsage digitalSignature certout = insta.cert.pem [pbm] # Password-based protection for Insta CA # Server and client authentication ref = $insta::ref # 3078 secret = $insta::secret # pass:insta [signature] # Signature-based protection for Insta CA # Server authentication trusted = $insta::out_trusted # apps/insta.ca.crt # Client authentication secret = # disable PBM key = $insta::newkey # insta.priv.pem cert = $insta::certout # insta.cert.pem [ir] cmd = ir [cr] cmd = cr [kur] # Certificate update cmd = kur oldcert = $insta::certout # insta.cert.pem [rr] # Certificate revocation cmd = rr oldcert = $insta::certout # insta.cert.pem # # OpenSSL example configuration file. # See doc/man5/config.pod for more info. # # This is mostly being used for generation of certificate requests, # but may be used for auto loading of providers # Note that you can include other files from the main configuration # file using the .include directive. #.include filename # This definition stops the following lines choking if HOME isn't # defined. HOME = . # Use this in order to automatically load providers. openssl_conf = openssl_init # Comment out the next line to ignore configuration errors config_diagnostics = 1 # Extra OBJECT IDENTIFIER info: # oid_file = $ENV::HOME/.oid oid_section = new_oids # To use this configuration file with the "-extfile" option of the # "openssl x509" utility, name here the section containing the # X.509v3 extensions to use: # extensions = # (Alternatively, use a configuration file that has only # X.509v3 extensions in its main [= default] section.) [ new_oids ] # We can add new OIDs in here for use by 'ca', 'req' and 'ts'. # Add a simple OID like this: # testoid1=1.2.3.4 # Or use config file substitution like this: # testoid2=${testoid1}.5.6 # Policies used by the TSA examples. tsa_policy1 = 1.2.3.4.1 tsa_policy2 = 1.2.3.4.5.6 tsa_policy3 = 1.2.3.4.5.7 # For FIPS # Optionally include a file that is generated by the OpenSSL fipsinstall # application. This file contains configuration data required by the OpenSSL # fips provider. It contains a named section e.g. [fips_sect] which is # referenced from the [provider_sect] below. # Refer to the OpenSSL security policy for more information. # .include fipsmodule.cnf [openssl_init] providers = provider_sect # List of providers to load [provider_sect] default = default_sect # The fips section name should match the section name inside the # included fipsmodule.cnf. # fips = fips_sect # If no providers are activated explicitly, the default one is activated implicitly. # See man 7 OSSL_PROVIDER-default for more details. # # If you add a section explicitly activating any other provider(s), you most # probably need to explicitly activate the default provider, otherwise it # becomes unavailable in openssl. As a consequence applications depending on # OpenSSL may not work correctly which could lead to significant system # problems including inability to remotely access the system. [default_sect] # activate = 1 #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = ./demoCA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. #unique_subject = no # Set to 'no' to allow creation of # several certs with same subject. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem # The private key x509_extensions = usr_cert # The extensions to add to the cert # Comment out the following two lines for the "traditional" # (and highly broken) format. name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options # Extension copying option: use with caution. # copy_extensions = copy # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # so this is commented out by default to leave a V1 CRL. # crlnumber must also be commented out to leave a V1 CRL. # crl_extensions = crl_ext default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = default # use public key default MD preserve = no # keep passed DN ordering # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extensions to add to the self signed cert # Passwords for private keys if not present they will be prompted for # input_password = secret # output_password = secret # This sets a mask for permitted string types. There are several options. # default: PrintableString, T61String, BMPString. # pkix : PrintableString, BMPString (PKIX recommendation before 2004) # utf8only: only UTF8Strings (PKIX recommendation after 2004). # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). # MASK:XXXX a literal mask value. # WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. string_mask = utf8only # req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = AU countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Some-State localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Internet Widgits Pty Ltd # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) #organizationalUnitName_default = commonName = Common Name (e.g. server FQDN or YOUR name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 # SET-ex3 = SET extension number 3 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE # This is typical in keyUsage for a client certificate. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # This stuff is for subjectAltName and issuerAltname. # Import the email address. # subjectAltName=email:copy # An alternative to produce certificates that aren't # deprecated according to PKIX. # subjectAltName=email:move # Copy subject details # issuerAltName=issuer:copy # This is required for TSA certificates. # extendedKeyUsage = critical,timeStamping [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = critical,CA:true # Key usage: this is typical for a CA certificate. However since it will # prevent it being used as an test self-signed certificate it is best # left out by default. # keyUsage = cRLSign, keyCertSign # Include email address in subject alt name: another PKIX recommendation # subjectAltName=email:copy # Copy issuer details # issuerAltName=issuer:copy # DER hex encoding of an extension: beware experts only! # obj=DER:02:03 # Where 'obj' is a standard or added object # You can even override a supported extension: # basicConstraints= critical, DER:30:03:01:01:FF [ crl_ext ] # CRL extensions. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always [ proxy_cert_ext ] # These extensions should be added when creating a proxy certificate # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE # This is typical in keyUsage for a client certificate. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # This stuff is for subjectAltName and issuerAltname. # Import the email address. # subjectAltName=email:copy # An alternative to produce certificates that aren't # deprecated according to PKIX. # subjectAltName=email:move # Copy subject details # issuerAltName=issuer:copy # This really needs to be in place for it to be a proxy certificate. proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo #################################################################### [ tsa ] default_tsa = tsa_config1 # the default TSA section [ tsa_config1 ] # These are used by the TSA reply generation only. dir = ./demoCA # TSA root directory serial = $dir/tsaserial # The current serial number (mandatory) crypto_device = builtin # OpenSSL engine to use for signing signer_cert = $dir/tsacert.pem # The TSA signing certificate # (optional) certs = $dir/cacert.pem # Certificate chain to include in reply # (optional) signer_key = $dir/private/tsakey.pem # The TSA private key (optional) signer_digest = sha256 # Signing digest to use. (Optional) default_policy = tsa_policy1 # Policy if request did not specify it # (optional) other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory) accuracy = secs:1, millisecs:500, microsecs:100 # (optional) clock_precision_digits = 0 # number of digits after dot. (optional) ordering = yes # Is ordering defined for timestamps? # (optional, default: no) tsa_name = yes # Must the TSA name be included in the reply? # (optional, default: no) ess_cert_id_chain = no # Must the ESS cert id chain be included? # (optional, default: no) ess_cert_id_alg = sha256 # algorithm to compute certificate # identifier (optional, default: sha256) [insta] # CMP using Insta Demo CA # Message transfer server = pki.certificate.fi:8700 # proxy = # set this as far as needed, e.g., http://192.168.1.1:8080 # tls_use = 0 path = pkix/ # Server authentication recipient = "/C=FI/O=Insta Demo/CN=Insta Demo CA" # or set srvcert or issuer ignore_keyusage = 1 # quirk needed to accept Insta CA cert not including digitalsignature unprotected_errors = 1 # quirk needed to accept negative responses possibly not protected extracertsout = insta.extracerts.pem # Client authentication ref = 3078 # user identification secret = pass:insta # can be used for both client and server side # Generic message options cmd = ir # default operation, can be overridden on cmd line with, e.g., kur # Certificate enrollment subject = "/CN=openssl-cmp-test" newkey = insta.priv.pem out_trusted = apps/insta.ca.crt # does not include keyUsage digitalSignature certout = insta.cert.pem [pbm] # Password-based protection for Insta CA # Server and client authentication ref = $insta::ref # 3078 secret = $insta::secret # pass:insta [signature] # Signature-based protection for Insta CA # Server authentication trusted = $insta::out_trusted # apps/insta.ca.crt # Client authentication secret = # disable PBM key = $insta::newkey # insta.priv.pem cert = $insta::certout # insta.cert.pem [ir] cmd = ir [cr] cmd = cr [kur] # Certificate update cmd = kur oldcert = $insta::certout # insta.cert.pem [rr] # Certificate revocation cmd = rr oldcert = $insta::certout # insta.cert.pem #!/bin/sh poweroff # enter the cron options CRON_OPTS="-c /etc/crontabs" KLOGD_OPTS="" # Absolut path to the keymap which should be loaded using loadkmap. #KEYMAP="/usr/share/keymaps/xkb/us.map.gz" # By default ntpd runs as a client. Add -l to run as a server on port 123. NTPD_OPTS="-N -p pool.ntp.org" # Set the ntp server here NTP_HOST=pool.ntp.org SYSLOGD_OPTS="-t" #WATCHDOG_OPTS="-t 30" WATCHDOG_DEV="" #!/sbin/openrc-run name="busybox acpid" command="/sbin/acpid" command_args="$ACPID_OPTS -f" pidfile="/run/acpid.pid" command_background=true start_stop_daemon_args="-g wheel -k 027" depend() { need dev localmount after hwdrivers modules keyword -vserver -lxc } #!/sbin/openrc-run name="busybox $RC_SVCNAME" command="/usr/sbin/$SVCNAME" pidfile="/run/$RC_SVCNAME.pid" command_args="$CRON_OPTS -f" command_background=true depend() { need localmount need logger } #!/sbin/openrc-run name="busybox klogd" command="/sbin/klogd" command_args="${KLOGD_OPTS} -n" command_user="klogd" pidfile="/run/klogd.pid" command_background=true capabilities="^cap_syslog" depend() { need clock hostname localmount logger before net keyword -vserver -lxc } #!/sbin/openrc-run description="Applies a keymap for the consoles." depend() { provide keymaps need localmount keyword -openvz -prefix -uml -vserver -xenu -lxc } start() { [ -z "$KEYMAP" ] && return 0 ebegin "Setting keymap" zcat "$KEYMAP" | loadkmap eend $? } stop() { return 0 } #!/sbin/openrc-run name="busybox $RC_SVCNAME" command="/usr/sbin/$RC_SVCNAME" command_args="${NTPD_OPTS:--N -p pool.ntp.org} -n" command_user="ntp" pidfile="/run/$SVCNAME.pid" command_background=true capabilities="^cap_sys_time,^cap_net_bind_service" depend() { need net provide ntp-client use dns } #!/sbin/openrc-run depend() { need net after firewall keyword -vserver -lxc } start() { if [ -z "$NTP_HOST" ] ; then eerror "Please set NTP_HOST in /etc/conf.d/rdate" return 1 fi ebegin "Running busybox rdate" rdate "$NTP_HOST" eend $? } #!/sbin/openrc-run description="Message logging system" name="busybox syslog" command="/sbin/syslogd" command_args="${SYSLOGD_OPTS} -n" pidfile="/run/syslogd.pid" command_background=true start_stop_daemon_args="-g wheel -k 027" depend() { need clock hostname localmount provide logger } #!/sbin/openrc-run name="busybox watchdog" command="/sbin/watchdog" command_args="${WATCHDOG_OPTS} -F ${WATCHDOG_DEV}" pidfile="/run/watchdog.pid" command_background=true depend() { need dev after hwdrivers } start_pre() { if ! [ -n "$WATCHDOG_DEV" ]; then eerror "WATCHDOG_DEV is not set" return 1 fi } #!/bin/sh scan_dirs() { scanelf -qS "$@" | while read SONAME FILE; do TARGET="${FILE##*/}" LINK="${FILE%/*}/$SONAME" case "$FILE" in /lib/*|/usr/lib/*|/usr/local/lib/*) ;; *) [ -h "$LINK" -o ! -e "$LINK" ] && ln -sf "$TARGET" "$LINK" esac done return 0 } # eat ldconfig options while getopts "nNvXvf:C:r:" opt; do : done shift $(( $OPTIND - 1 )) [ $# -eq 0 ] || scan_dirs "$@" #!/bin/sh exec /lib/ld-musl-aarch64.so.1 --list "$@" # See chrony.conf(5) for more information about usable directives. # Include configuration files with the ".conf" suffic from /etc/chrony/conf.d. confdir /etc/chrony/conf.d # Use four public NTP servers from the pool.ntp.org project. If this # host has a static public IP address, please consider joining the pool: # https://www.ntppool.org/join.html pool pool.ntp.org iburst # Include configuration files with the ".sources" suffix from # /etc/chrony/sources.d. They can only contain the "peer", "pool" and "server" # directives and must have all lines terminated by a newline. sourcedir /etc/chrony/sources.d # Specify file containing keys for NTP authentication. # keyfile /etc/chrony/chrony.keys # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/chrony.drift # Save NTS keys and cookies. ntsdumpdir /var/lib/chrony # Uncomment the following line to turn logging on. # log measurements statistics tracking # Specify directory for log files. logdir /var/log/chrony # Stop bad estimates upsetting machine clock. maxupdateskew 100.0 # Enable kernel synchronisation (every 11 minutes) of the real-time clock. # Note that it can't be used along with the 'rtcfile' directive. rtcsync # Step the system clock instead of slewing it if the adjustment is larger than # one second, but only in the first three clock updates. makestep 1.0 3 # Disable UDP command port - no remote chronyc access and no UDP access for # unprivileged users; control remains available via the Unix socket. cmdport 0 /var/log/chrony/*.log { missingok nocreate sharedscripts postrotate /usr/bin/chronyc cyclelogs > /dev/null 2>&1 || true endscript } # Configuration for /etc/conf.d/chronyd #cfgfile="/etc/chrony/chrony.conf" # chronyd takes some time to perform a second fork, by enabling this # option chronyd is deamonized through start-stop-daemon(1) thereby # significantly reducing the startup time. #FAST_STARTUP=no # Configuration dependant options : # -s - Set system time from RTC if rtcfile directive present. # -r - Reload sample histories if dumponexit directive present. # # The combination of "-s -r" allows chronyd to perform long term averaging of # the gain or loss rate across system reboots and shutdowns. #command_args="" # vrf e.g 'vrf-mgmt' #vrf="" #!/sbin/openrc-run description="NTP daemon" # CFGFILE is here for backward compatibility only (Alpine <3.24). : ${cfgfile:="${CFGFILE:-/etc/chrony/chrony.conf}"} command="/usr/sbin/chronyd" # ARGS is here for backward compatibility only (Alpine <3.24). command_args="-f $cfgfile -F 1 $command_args $ARGS" pidfile="/run/chrony/chronyd.pid" required_files="$cfgfile" depend() { need net after firewall provide ntp-client ntp-server use dns } start_pre() { if [ -c /dev/rtc ]; then grep -q '^rtcfile' "$cfgfile" && command_args="$command_args -s" fi grep -q '^dumponexit$' "$cfgfile" && command_args="$command_args -r" if yesno "${FAST_STARTUP:-no}"; then # this option makes it stay in foreground and let openrc do the tracking, # so we have to set pidfile to a dir that exists earlier. # the reason this is not the default is because there is no 'readiness', # self-backgrounding chrony waits for time to sync before continuing, # and this form does not. command_args="$command_args -n" command_background=true pidfile=/run/chronyd.pid fi if [ -n "$vrf" ]; then command_args="vrf exec $vrf $command $command_args" command=ip fi } # A sample configuration for dhcpcd. # See dhcpcd.conf(5) for details. # Allow users of this group to interact with dhcpcd via the control socket. #controlgroup wheel # Inform the DHCP server of our hostname for DDNS. #hostname # Use the hardware address of the interface for the Client ID. #clientid # or # Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361. # Some non-RFC compliant DHCP servers do not reply with this set. # In this case, comment out duid and enable clientid above. duid # Persist interface configuration when dhcpcd exits. persistent # vendorclassid is set to blank to avoid sending the default of # dhcpcd-::: vendorclassid # A list of options to request from the DHCP server. option domain_name_servers, domain_name, domain_search option static_routes, classless_static_routes # Respect the network MTU. This is applied to DHCP routes. option interface_mtu # Request a hostname from the network option host_name # Most distributions have NTP support. #option ntp_servers # A ServerID is required by RFC2131. require dhcp_server_identifier # Generate SLAAC address using the Hardware Address of the interface #slaac hwaddr # OR generate Stable Private IPv6 Addresses based from the DUID slaac private # Echo the interface flags, reason and message options if [ "$reason" = "TEST" ]; then # General variables at the top set | while read line; do case "$line" in interface=*|pid=*|reason=*|protocol=*|profile=*|skip_hooks=*) echo "$line";; esac done # Interface flags set | while read line; do case "$line" in ifcarrier=*|ifflags=*|ifmetric=*|ifmtu=*|ifwireless=*|ifssid=*) echo "$line";; esac done # Old lease set | while read line; do case "$line" in old_*) echo "$line";; esac done # New lease set | while read line; do case "$line" in new_*) echo "$line";; esac done # Router Advertisements set | while read line; do case "$line" in nd[0-9]*_*) echo "$line";; esac done exit 0 fi # Generate /etc/resolv.conf # Support resolvconf(8) if available # We can merge other dhcpcd resolv.conf files into one like resolvconf, # but resolvconf is preferred as other applications like VPN clients # can readily hook into it. # Also, resolvconf can configure local nameservers such as bind # or dnsmasq. This is important as the libc resolver isn't that powerful. resolv_conf_dir="$state_dir/resolv.conf" nocarrier_roaming_dir="$state_dir/roaming" NL=" " : ${resolvconf:=resolvconf} if command -v "$resolvconf" >/dev/null 2>&1; then have_resolvconf=true else have_resolvconf=false fi build_resolv_conf() { cf="$state_dir/resolv.conf.$ifname" # Build a list of interfaces interfaces=$(list_interfaces "$resolv_conf_dir") # Build the resolv.conf header= if [ -n "$interfaces" ]; then # Build the header for x in ${interfaces}; do header="$header${header:+, }$x" done # Build the search list domain=$(cd "$resolv_conf_dir"; \ key_get_value "domain " ${interfaces}) search=$(cd "$resolv_conf_dir"; \ key_get_value "search " ${interfaces}) set -- ${domain} domain="$1" [ -n "$2" ] && search="$search $*" [ -n "$search" ] && search="$(uniqify $search)" [ "$domain" = "$search" ] && search= [ -n "$domain" ] && domain="domain $domain$NL" [ -n "$search" ] && search="search $search$NL" # Build the nameserver list srvs=$(cd "$resolv_conf_dir"; \ key_get_value "nameserver " ${interfaces}) for x in $(uniqify $srvs); do servers="${servers}nameserver $x$NL" done fi header="$signature_base${header:+ $from }$header" # Assemble resolv.conf using our head and tail files [ -f "$cf" ] && rm -f "$cf" [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir" echo "$header" > "$cf" if [ -f /etc/resolv.conf.head ]; then cat /etc/resolv.conf.head >> "$cf" else echo "# /etc/resolv.conf.head can replace this line" >> "$cf" fi printf %s "$domain$search$servers" >> "$cf" if [ -f /etc/resolv.conf.tail ]; then cat /etc/resolv.conf.tail >> "$cf" else echo "# /etc/resolv.conf.tail can replace this line" >> "$cf" fi if change_file /etc/resolv.conf "$cf"; then chmod 644 /etc/resolv.conf fi rm -f "$cf" } # Extract any ND DNS options from the RA # Obey the lifetimes eval_nd_dns() { eval rdnsstime=\$nd${i}_rdnss${j}_lifetime if [ -n "$rdnsstime" ]; then ltime=$(($rdnsstime - $offset)) if [ "$ltime" -gt 0 ]; then eval rdnss=\$nd${i}_rdnss${j}_servers if [ -n "$rdnss" ]; then new_rdnss="$new_rdnss${new_rdnss:+ }$rdnss" fi fi fi eval dnssltime=\$nd${i}_dnssl${j}_lifetime if [ -n "$dnssltime" ]; then ltime=$(($dnssltime - $offset)) if [ "$ltime" -gt 0 ]; then eval dnssl=\$nd${i}_dnssl${j}_search if [ -n "$dnssl" ]; then new_dnssl="$new_dnssl${new_dnssl:+ }$dnssl" fi fi fi # Break when we don't have either [ -z "$rdnsstime" ] && [ -z "$dnssltime" ] && return 1 j=$(($j + 1)) return 0 } add_resolv_conf() { conf="$signature$NL" warn=true # Loop to extract the ND DNS options using our indexed shell values i=1 j=1 while true; do eval acquired=\$nd${i}_acquired [ -z "$acquired" ] && break eval now=\$nd${i}_now [ -z "$now" ] && break offset=$(($now - $acquired)) while true; do eval_nd_dns || break done i=$(($i + 1)) j=1 done [ -n "$new_rdnss" ] && \ new_domain_name_servers="$new_domain_name_servers${new_domain_name_servers:+ }$new_rdnss" [ -n "$new_dnssl" ] && \ new_domain_search="$new_domain_search${new_domain_search:+ }$new_dnssl" # Derive a new domain from our various hostname options if [ -z "$new_domain_name" ]; then if [ "$new_dhcp6_fqdn" != "${new_dhcp6_fqdn#*.}" ]; then new_domain_name="${new_dhcp6_fqdn#*.}" elif [ "$new_fqdn" != "${new_fqdn#*.}" ]; then new_domain_name="${new_fqdn#*.}" elif [ "$new_host_name" != "${new_host_name#*.}" ]; then new_domain_name="${new_host_name#*.}" fi fi # If we don't have any configuration, remove it if [ -z "$new_domain_name_servers" ] && [ -z "$new_domain_name" ] && [ -z "$new_domain_search" ]; then remove_resolv_conf return $? fi if [ -n "$new_domain_name" ]; then set -- $new_domain_name if valid_domainname "$1"; then conf="${conf}domain $1$NL" else syslog err "Invalid domain name: $1" fi # If there is no search this, make this one if [ -z "$new_domain_search" ]; then new_domain_search="$new_domain_name" [ "$new_domain_name" = "$1" ] && warn=true fi fi if [ -n "$new_domain_search" ]; then new_domain_search=$(uniqify $new_domain_search) if valid_domainname_list $new_domain_search; then conf="${conf}search $new_domain_search$NL" elif ! $warn; then syslog err "Invalid domain name in list:" \ "$new_domain_search" fi fi new_domain_name_servers=$(uniqify $new_domain_name_servers) for x in ${new_domain_name_servers}; do conf="${conf}nameserver $x$NL" done if $have_resolvconf; then [ -n "$ifmetric" ] && export IF_METRIC="$ifmetric" printf %s "$conf" | "$resolvconf" -a "$ifname" return $? fi if [ -e "$resolv_conf_dir/$ifname" ]; then rm -f "$resolv_conf_dir/$ifname" fi [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir" printf %s "$conf" > "$resolv_conf_dir/$ifname" build_resolv_conf } remove_resolv_conf() { if $have_resolvconf; then "$resolvconf" -d "$ifname" -f else if [ -e "$resolv_conf_dir/$ifname" ]; then rm -f "$resolv_conf_dir/$ifname" fi build_resolv_conf fi } # For ease of use, map DHCP6 names onto our DHCP4 names case "$reason" in BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6) new_domain_name_servers="$new_dhcp6_name_servers" new_domain_search="$new_dhcp6_domain_search" ;; esac if $if_configured; then if $have_resolvconf && [ "$reason" = NOCARRIER_ROAMING ]; then # avoid calling resolvconf -c on CARRIER unless we roam mkdir -p "$nocarrier_roaming_dir" echo " " >"$nocarrier_roaming_dir/$interface" "$resolvconf" -C "$interface.*" elif $have_resolvconf && [ "$reason" = CARRIER ]; then # Not all resolvconf implementations support -c if [ -e "$nocarrier_roaming_dir/$interface" ]; then rm -f "$nocarrier_roaming_dir/$interface" "$resolvconf" -c "$interface.*" fi elif $if_up || [ "$reason" = ROUTERADVERT ]; then add_resolv_conf elif $if_down; then remove_resolv_conf fi fi # Set the hostname from DHCP data if required # A hostname can either be a short hostname or a FQDN. # hostname_fqdn=true # hostname_fqdn=false # hostname_fqdn=server # A value of server means just what the server says, don't manipulate it. # This could lead to an inconsistent hostname on a DHCPv4 and DHCPv6 network # where the DHCPv4 hostname is short and the DHCPv6 has an FQDN. # DHCPv6 has no hostname option. # RFC4702 section 3.1 says FQDN should be prefered over hostname. # # As such, the default is hostname_fqdn=true so that a consistent hostname # is always assigned. : ${hostname_fqdn:=true} # If we used to set the hostname, but relinquish control of it, we should # reset to the default value. : ${hostname_default=(none)} # Some systems don't have hostname(1) _hostname() { if [ -z "${1+x}" ]; then if [ -r /proc/sys/kernel/hostname ]; then read name /dev/null 2>/dev/null; then hostname elif sysctl kern.hostname >/dev/null 2>&1; then sysctl -n kern.hostname elif sysctl kernel.hostname >/dev/null 2>&1; then sysctl -n kernel.hostname else return 1 fi return $? fi if [ -w /proc/sys/kernel/hostname ]; then echo "$1" >/proc/sys/kernel/hostname elif [ -n "$1" ] && command -v hostname >/dev/null 2>&1; then hostname "$1" elif sysctl kern.hostname >/dev/null 2>&1; then sysctl -w "kern.hostname=$1" >/dev/null elif sysctl kernel.hostname >/dev/null 2>&1; then sysctl -w "kernel.hostname=$1" >/dev/null else # May fail to set a blank hostname hostname "$1" fi } is_default_hostname() { case "$1" in ""|"$hostname_default"|localhost|localhost.localdomain) return 0;; esac return 1 } need_hostname() { # Always load the hostname variable for future use hostname="$(_hostname)" is_default_hostname "$hostname" && return 0 case "$force_hostname" in [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1) return 0;; esac if [ -n "$old_fqdn" ]; then if ${hfqdn} || ! ${hshort}; then [ "$hostname" = "$old_fqdn" ] else [ "$hostname" = "${old_fqdn%%.*}" ] fi elif [ -n "$old_host_name" ]; then if ${hfqdn}; then if [ -n "$old_domain_name" ] && [ "$old_host_name" = "${old_host_name#*.}" ] then [ "$hostname" = \ "$old_host_name.$old_domain_name" ] else [ "$hostname" = "$old_host_name" ] fi elif ${hshort}; then [ "$hostname" = "${old_host_name%%.*}" ] else [ "$hostname" = "$old_host_name" ] fi else # No old hostname false fi } try_hostname() { [ "$hostname" = "$1" ] && return 0 if valid_domainname "$1"; then syslog info "Setting hostname: $1" _hostname "$1" else syslog err "Invalid hostname: $1" fi } set_hostname() { hfqdn=false hshort=false case "$hostname_fqdn" in [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1) hfqdn=true;; ""|[Ss][Ee][Rr][Vv][Ee][Rr]) ;; *) hshort=true;; esac need_hostname || return 0 if [ -n "$new_fqdn" ]; then if ${hfqdn} || ! ${hshort}; then try_hostname "$new_fqdn" else try_hostname "${new_fqdn%%.*}" fi elif [ -n "$new_host_name" ]; then if ${hfqdn}; then if [ -n "$new_domain_name" ] && [ "$new_host_name" = "${new_host_name#*.}" ] then try_hostname "$new_host_name.$new_domain_name" else try_hostname "$new_host_name" fi elif ${hshort}; then try_hostname "${new_host_name%%.*}" else try_hostname "$new_host_name" fi elif ! is_default_hostname "$hostname"; then try_hostname "$hostname_default" fi } # For ease of use, map DHCP6 names onto our DHCP4 names case "$reason" in BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6) new_fqdn="$new_dhcp6_fqdn" old_fqdn="$old_dhcp6_fqdn" ;; esac if $if_configured && $if_up && [ "$reason" != ROUTERADVERT ]; then set_hostname fi # Sample dhcpcd hook script for NTP # It will configure either one of NTP, OpenNTP or Chrony (in that order) # and will default to NTP if no default config is found. # Like our resolv.conf hook script, we store a database of ntp.conf files # and merge into /etc/ntp.conf # You can set the env var NTP_CONF to override the derived default on # systems with >1 NTP client installed. # Here is an example for OpenNTP # dhcpcd -e NTP_CONF=/usr/pkg/etc/ntpd.conf # or by adding this to /etc/dhcpcd.conf # env NTP_CONF=/usr/pkg/etc/ntpd.conf # or by adding this to /etc/dhcpcd.enter-hook # NTP_CONF=/usr/pkg/etc/ntpd.conf # To use Chrony instead, simply change ntpd.conf to chrony.conf in the # above examples. : ${ntp_confs:=ntp.conf ntpd.conf chrony.conf} : ${ntp_conf_dirs=/etc /etc/chrony /usr/pkg/etc /usr/local/etc} ntp_conf_dir="$state_dir/ntp.conf" # If NTP_CONF is not set, work out a good default if [ -z "$NTP_CONF" ]; then for d in ${ntp_conf_dirs}; do for f in ${ntp_confs}; do if [ -e "$d/$f" ]; then NTP_CONF="$d/$f" break 2 fi done done [ -e "$NTP_CONF" ] || NTP_CONF=/etc/ntp.conf fi # Derive service name from configuration if [ -z "$ntp_service" ]; then case "$NTP_CONF" in *chrony.conf) ntp_service=chronyd;; *) ntp_service=ntpd;; esac fi # Debian has a separate file for DHCP config to avoid stamping on # the master. if [ "$ntp_service" = ntpd ] && command -v invoke-rc.d >/dev/null 2>&1; then [ -e /var/lib/ntp ] || mkdir /var/lib/ntp : ${ntp_service:=ntp} : ${NTP_DHCP_CONF:=/var/lib/ntp/ntp.conf.dhcp} fi : ${ntp_restart_cmd:=service_condcommand $ntp_service restart} ntp_conf=${NTP_CONF} NL=" " build_ntp_conf() { cf="$state_dir/ntp.conf.$ifname" # Build a list of interfaces interfaces=$(list_interfaces "$ntp_conf_dir") header= servers= if [ -n "$interfaces" ]; then # Build the header for x in ${interfaces}; do header="$header${header:+, }$x" done # Build a server list srvs=$(cd "$ntp_conf_dir"; key_get_value "server " $interfaces) if [ -n "$srvs" ]; then for x in $(uniqify $srvs); do servers="${servers}server $x$NL" done fi fi # Merge our config into ntp.conf [ -e "$cf" ] && rm -f "$cf" [ -d "$ntp_conf_dir" ] || mkdir -p "$ntp_conf_dir" if [ -n "$NTP_DHCP_CONF" ]; then [ -e "$ntp_conf" ] && cp "$ntp_conf" "$cf" ntp_conf="$NTP_DHCP_CONF" elif [ -e "$ntp_conf" ]; then remove_markers "$signature_base" "$signature_base_end" \ "$ntp_conf" > "$cf" fi if [ -n "$servers" ]; then echo "$signature_base${header:+ $from }$header" >> "$cf" printf %s "$servers" >> "$cf" echo "$signature_base_end${header:+ $from }$header" >> "$cf" else [ -e "$ntp_conf" ] && [ -e "$cf" ] || return fi # If we changed anything, restart ntpd if change_file "$ntp_conf" "$cf"; then [ -n "$ntp_restart_cmd" ] && eval $ntp_restart_cmd fi } add_ntp_conf() { cf="$ntp_conf_dir/$ifname" [ -e "$cf" ] && rm "$cf" [ -d "$ntp_conf_dir" ] || mkdir -p "$ntp_conf_dir" if [ -n "$new_ntp_servers" ]; then for x in $(uniqify $new_ntp_servers); do echo "server $x" >> "$cf" done fi build_ntp_conf } remove_ntp_conf() { if [ -e "$ntp_conf_dir/$ifname" ]; then rm "$ntp_conf_dir/$ifname" fi build_ntp_conf } # For ease of use, map DHCP6 names onto our DHCP4 names case "$reason" in BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6) new_ntp_servers="$new_dhcp6_sntp_servers" new_ntp_servers="$new_ntp_servers${new_ntp_servers:+ }$new_dhcp6_ntp_server_addr" new_ntp_servers="$new_ntp_servers${new_ntp_servers:+ }$new_dhcp6_ntp_server_fqdn" ;; esac if $if_configured; then if $if_up; then add_ntp_conf elif $if_down; then remove_ntp_conf fi fi #!/bin/sh # dhcpcd client configuration script # Handy variables and functions for our hooks to use ifname="$interface${protocol+.}$protocol" from=from signature_base="# Generated by dhcpcd" signature="$signature_base $from $ifname" signature_base_end="# End of dhcpcd" signature_end="$signature_base_end $from $ifname" state_dir=/run/dhcpcd/hook-state _detected_init=false : ${if_up:=false} : ${if_down:=false} : ${syslog_debug:=false} # Ensure that all arguments are unique uniqify() { result= for i do case " $result " in *" $i "*);; *) result="$result${result:+ }$i";; esac done echo "$result" } # List interface config files in a directory. # If dhcpcd is running as a single instance then it will have a list of # interfaces in the preferred order. # Otherwise we just use what we have. list_interfaces() { ifaces= for i in $interface_order; do for x in "$1"/$i.*; do [ -f "$x" ] && ifaces="$ifaces${ifaces:+ }${x##*/}" done done for x in "$1"/*; do [ -f "$x" ] && ifaces="$ifaces${ifaces:+ }${x##*/}" done uniqify $ifaces } # Trim function trim() { var="$*" var=${var#"${var%%[![:space:]]*}"} var=${var%"${var##*[![:space:]]}"} if [ -z "$var" ]; then # So it seems our shell doesn't support wctype(3) patterns # Fall back to sed var=$(echo "$*" | sed -e 's/^[[:space:]]*//;s/[[:space:]]*$//') fi printf %s "$var" } # We normally use sed to extract values using a key from a list of files # but sed may not always be available at the time. key_get_value() { key="$1" shift if command -v sed >/dev/null 2>&1; then sed -n "s/^$key//p" $@ else for x do while read line; do case "$line" in "$key"*) echo "${line##$key}";; esac done < "$x" done fi } # We normally use sed to remove markers from a configuration file # but sed may not always be available at the time. remove_markers() { m1="$1" m2="$2" in_marker=0 shift; shift if command -v sed >/dev/null 2>&1; then sed "/^$m1/,/^$m2/d" $@ else for x do while read line; do case "$line" in "$m1"*) in_marker=1;; "$m2"*) in_marker=0;; *) [ $in_marker = 0 ] && echo "$line";; esac done < "$x" done fi } # Compare two files. comp_file() { [ -e "$1" ] && [ -e "$2" ] || return 1 if command -v cmp >/dev/null 2>&1; then cmp -s "$1" "$2" elif command -v diff >/dev/null 2>&1; then diff -q "$1" "$2" >/dev/null else # Hopefully we're only working on small text files ... [ "$(cat "$1")" = "$(cat "$2")" ] fi } # Compare two files. # If different, replace first with second otherwise remove second. change_file() { if [ -e "$1" ]; then if comp_file "$1" "$2"; then rm -f "$2" return 1 fi fi cat "$2" > "$1" rm -f "$2" return 0 } # Compare two files. # If different, copy or link depending on target type copy_file() { if [ -h "$2" ]; then [ "$(readlink "$2")" = "$1" ] && return 1 ln -sf "$1" "$2" else comp_file "$1" "$2" && return 1 cat "$1" >"$2" fi } # Save a config file save_conf() { if [ -f "$1" ]; then rm -f "$1-pre.$interface" cat "$1" > "$1-pre.$interface" fi } # Restore a config file restore_conf() { [ -f "$1-pre.$interface" ] || return 1 cat "$1-pre.$interface" > "$1" rm -f "$1-pre.$interface" } # Write a syslog entry syslog() { lvl="$1" if [ "$lvl" = debug ]; then ${syslog_debug} || return 0 fi [ -n "$lvl" ] && shift [ -n "$*" ] || return 0 case "$lvl" in err|error) echo "$interface: $*" >&2;; *) echo "$interface: $*";; esac if command -v logger >/dev/null 2>&1; then logger -p daemon."$lvl" -t dhcpcd-run-hooks "$interface: $*" fi } # Check for a valid name as per RFC952 and RFC1123 section 2.1 valid_domainname() { name="$1" [ -z "$name" ] || [ ${#name} -gt 255 ] && return 1 while [ -n "$name" ]; do label="${name%%.*}" [ -z "$label" ] || [ ${#label} -gt 63 ] && return 1 case "$label" in -*|_*|*-|*_) return 1;; *[![:alnum:]_-]*) return 1;; "$name") return 0;; esac name="${name#*.}" done return 0 } valid_domainname_list() { for name do valid_domainname "$name" || return $? done return 0 } # With the advent of alternative init systems, it's possible to have # more than one installed. So we need to try to guess what one we're # using unless overridden by configure. detect_init() { _service_exists="" _service_cmd="" _service_status="" [ -n "$_service_cmd" ] && return 0 if $_detected_init; then [ -n "$_service_cmd" ] return $? fi # Detect the running init system. # As systemd and OpenRC can be installed on top of legacy init # systems we try to detect them first. status="" : ${status:=status} if [ -x /bin/systemctl ] && [ -S /run/systemd/private ]; then _service_exists="/bin/systemctl --quiet is-enabled \$1.service" _service_status="/bin/systemctl --quiet is-active \$1.service" _service_cmd="/bin/systemctl \$2 --no-block \$1.service" elif [ -x /usr/bin/systemctl ] && [ -S /run/systemd/private ]; then _service_exists="/usr/bin/systemctl --quiet is-enabled \$1.service" _service_status="/usr/bin/systemctl --quiet is-active \$1.service" _service_cmd="/usr/bin/systemctl \$2 --no-block \$1.service" elif [ -x /sbin/rc-service ] && { [ -s /libexec/rc/init.d/softlevel ] || [ -s /run/openrc/softlevel ]; } then _service_exists="/sbin/rc-service -e \$1" _service_cmd="/sbin/rc-service \$1 -- -D \$2" elif [ -x /usr/sbin/invoke-rc.d ]; then _service_exists="/usr/sbin/invoke-rc.d --query --quiet \$1 start >/dev/null 2>&1 || [ \$? = 104 ]" _service_cmd="/usr/sbin/invoke-rc.d \$1 \$2" elif [ -x /sbin/service ]; then _service_exists="/sbin/service \$1 >/dev/null 2>&1" _service_cmd="/sbin/service \$1 \$2" elif [ -x /usr/sbin/service ]; then _service_exists="/usr/sbin/service \$1 $status >/dev/null 2>&1" _service_cmd="/usr/sbin/service \$1 \$2" elif [ -x /bin/sv ]; then _service_exists="/bin/sv status \$1 >/dev/null 2>&1" _service_cmd="/bin/sv \$2 \$1" elif [ -x /usr/bin/sv ]; then _service_exists="/usr/bin/sv status \$1 >/dev/null 2>&1" _service_cmd="/usr/bin/sv \$2 \$1" elif [ -e /etc/slackware-version ] && [ -d /etc/rc.d ]; then _service_exists="[ -x /etc/rc.d/rc.\$1 ]" _service_cmd="/etc/rc.d/rc.\$1 \$2" _service_status="/etc/rc.d/rc.\$1 status >/dev/null 2>&1" else for x in /etc/init.d/rc.d /etc/rc.d /etc/init.d; do if [ -d $x ]; then _service_exists="[ -x $x/\$1 ]" _service_cmd="$x/\$1 \$2" _service_status="$x/\$1 $status >/dev/null 2>&1" break fi done if [ -e /etc/arch-release ]; then _service_status="[ -e /var/run/daemons/\$1 ]" elif [ "$x" = "/etc/rc.d" ] && [ -e /etc/rc.d/rc.subr ]; then _service_status="$x/\$1 check >/dev/null 2>&1" fi fi _detected_init=true if [ -z "$_service_cmd" ]; then syslog err "could not detect a useable init system" return 1 fi return 0 } # Check a system service exists service_exists() { if [ -z "$_service_exists" ]; then detect_init || return 1 fi eval $_service_exists } # Send a command to a system service service_cmd() { if [ -z "$_service_cmd" ]; then detect_init || return 1 fi eval $_service_cmd } # Send a command to a system service if it is running service_status() { if [ -z "$_service_cmd" ]; then detect_init || return 1 fi if [ -n "$_service_status" ]; then eval $_service_status else service_command $1 status >/dev/null 2>&1 fi } # Handy macros for our hooks service_command() { service_exists $1 && service_cmd $1 $2 } service_condcommand() { service_exists $1 && service_status $1 && service_cmd $1 $2 } # We source each script into this one so that scripts run earlier can # remove variables from the environment so later scripts don't see them. # Thus, the user can create their dhcpcd.enter/exit-hook script to configure # /etc/resolv.conf how they want and stop the system scripts ever updating it. for hook in \ /etc/dhcpcd.enter-hook \ /usr/lib/dhcpcd/dhcpcd-hooks/* \ /etc/dhcpcd.exit-hook do case "$hook" in */*~) continue;; esac for skip in $skip_hooks; do case "$hook" in */"$skip") continue 2;; */[0-9][0-9]"-$skip") continue 2;; */[0-9][0-9]"-$skip.sh") continue 2;; esac done if [ -f "$hook" ]; then . "$hook" fi done # Start, reconfigure and stop wpa_supplicant per wireless interface. # # This is only needed when using wpa_supplicant-2.5 or older, OR # when wpa_supplicant has not been built with CONFIG_MATCH_IFACE, OR # wpa_supplicant was launched without the -M flag to activate # interface matching. if [ -z "$wpa_supplicant_conf" ]; then for x in \ /etc/wpa_supplicant/wpa_supplicant-"$interface".conf \ /etc/wpa_supplicant/wpa_supplicant.conf \ /etc/wpa_supplicant-"$interface".conf \ /etc/wpa_supplicant.conf \ ; do if [ -s "$x" ]; then wpa_supplicant_conf="$x" break fi done fi : ${wpa_supplicant_conf:=/etc/wpa_supplicant.conf} wpa_supplicant_ctrldir() { dir=$(key_get_value "[[:space:]]*ctrl_interface=" \ "$wpa_supplicant_conf") dir=$(trim "$dir") case "$dir" in DIR=*) dir=${dir##DIR=} dir=${dir%%[[:space:]]GROUP=*} dir=$(trim "$dir") ;; esac printf %s "$dir" } wpa_supplicant_start() { # If the carrier is up, don't bother checking anything [ "$ifcarrier" = "up" ] && return 0 # Pre flight checks if [ ! -s "$wpa_supplicant_conf" ]; then syslog warn \ "$wpa_supplicant_conf does not exist" syslog warn "not interacting with wpa_supplicant(8)" return 1 fi dir=$(wpa_supplicant_ctrldir) if [ -z "$dir" ]; then syslog warn \ "ctrl_interface not defined in $wpa_supplicant_conf" syslog warn "not interacting with wpa_supplicant(8)" return 1 fi wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 && return 0 syslog info "starting wpa_supplicant" driver=${wpa_supplicant_driver:+-D}$wpa_supplicant_driver err=$(wpa_supplicant -B -c"$wpa_supplicant_conf" -i"$interface" \ "$driver" 2>&1) errn=$? if [ $errn != 0 ]; then syslog err "failed to start wpa_supplicant" syslog err "$err" fi return $errn } wpa_supplicant_reconfigure() { dir=$(wpa_supplicant_ctrldir) [ -z "$dir" ] && return 1 if ! wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1; then wpa_supplicant_start return $? fi syslog info "reconfiguring wpa_supplicant" err=$(wpa_cli -p "$dir" -i "$interface" reconfigure 2>&1) errn=$? if [ $errn != 0 ]; then syslog err "failed to reconfigure wpa_supplicant" syslog err "$err" fi return $errn } wpa_supplicant_stop() { dir=$(wpa_supplicant_ctrldir) [ -z "$dir" ] && return 1 wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 || return 0 syslog info "stopping wpa_supplicant" err=$(wpa_cli -i"$interface" terminate 2>&1) errn=$? if [ $errn != 0 ]; then syslog err "failed to stop wpa_supplicant" syslog err "$err" fi return $errn } if [ "$ifwireless" = "1" ] && \ command -v wpa_supplicant >/dev/null 2>&1 && \ command -v wpa_cli >/dev/null 2>&1 then case "$reason" in PREINIT) wpa_supplicant_start;; RECONFIGURE) wpa_supplicant_reconfigure;; DEPARTED|STOPPED) wpa_supplicant_stop;; esac fi # Configure timezone : ${localtime:=/etc/localtime} set_zoneinfo() { [ -z "$new_tzdb_timezone" ] && return 0 zoneinfo_dir= for d in \ /usr/share/zoneinfo \ /usr/lib/zoneinfo \ /var/share/zoneinfo \ /var/zoneinfo \ ; do if [ -d "$d" ]; then zoneinfo_dir="$d" break fi done if [ -z "$zoneinfo_dir" ]; then syslog warning "timezone directory not found" return 1 fi zone_file="$zoneinfo_dir/$new_tzdb_timezone" if [ ! -e "$zone_file" ]; then syslog warning "no timezone definition for $new_tzdb_timezone" return 1 fi if copy_file "$zone_file" "$localtime"; then syslog info "timezone changed to $new_tzdb_timezone" fi } # For ease of use, map DHCP6 names onto our DHCP4 names case "$reason" in BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6) new_tzdb_timezone="$new_dhcp6_tzdb_timezone" ;; esac if $if_configured && $if_up; then set_zoneinfo fi # Lookup the hostname in DNS if not set lookup_hostname() { [ -z "$new_ip_address" ] && return 1 # Silly ISC programs love to send error text to stdout if command -v dig >/dev/null 2>&1; then h=$(dig +short -x $new_ip_address) if [ $? = 0 ]; then echo "$h" | sed 's/\.$//' return 0 fi elif command -v host >/dev/null 2>&1; then h=$(host $new_ip_address) if [ $? = 0 ]; then echo "$h" \ | sed 's/.* domain name pointer \(.*\)./\1/' return 0 fi elif command -v getent >/dev/null 2>&1; then h=$(getent hosts $new_ip_address) if [ $? = 0 ]; then echo "$h" | sed 's/[^ ]* *\([^ ]*\).*/\1/' return 0 fi fi return 1 } set_hostname() { if [ -z "${new_host_name}${new_fqdn_name}" ]; then export new_host_name="$(lookup_hostname)" fi } if $if_up; then set_hostname fi # Sample dhcpcd hook for ypbind # This script is only suitable for the Linux version. ypbind_pid() { [ -s /var/run/ypbind.pid ] && cat /var/run/ypbind.pid } make_yp_conf() { [ -z "${new_nis_domain}${new_nis_servers}" ] && return 0 cf=/etc/yp.conf."$ifname" rm -f "$cf" echo "$signature" > "$cf" prefix= if [ -n "$new_nis_domain" ]; then if ! valid_domainname "$new_nis_domain"; then syslog err "Invalid NIS domain name: $new_nis_domain" rm -f "$cf" return 1 fi domainname "$new_nis_domain" if [ -n "$new_nis_servers" ]; then prefix="domain $new_nis_domain server " else echo "domain $new_nis_domain broadcast" >> "$cf" fi else prefix="ypserver " fi for x in $new_nis_servers; do echo "$prefix$x" >> "$cf" done save_conf /etc/yp.conf cat "$cf" > /etc/yp.conf rm -f "$cf" pid="$(ypbind_pid)" if [ -n "$pid" ]; then kill -HUP "$pid" fi } restore_yp_conf() { [ -n "$old_nis_domain" ] && domainname "" restore_conf /etc/yp.conf || return 0 pid="$(ypbind_pid)" if [ -n "$pid" ]; then kill -HUP "$pid" fi } if $if_configured; then if $if_up; then make_yp_conf elif $if_down; then restore_yp_conf fi fi #!/sbin/openrc-run description="DHCP Client Daemon" command="/sbin/dhcpcd" command_args="-q -B ${command_args:-}" command_background="true" pidfile="/run/dhcpcd/pid" depend() { provide net need localmount use logger network after bootmisc modules before dns } start_pre() { checkpath -d /run/dhcpcd } # See doas.conf(5) and doas.d(5) for configuration details. # Configuration here may be overridden by /etc/doas.d/*.conf if files exist. # Uncomment to allow group "wheel" to become root. # permit persist :wheel # e2scrub configuration file # Uncomment to enable automatic periodic runs of e2scrub_all # (either via cron or via a systemd timer) # periodic_e2scrub=1 # e-mail destination used by e2scrub_fail when problems are found with # the file system. # recipient=root # e-mail sender used by e2scrub_fail when problems are found with # the file system. # sender=e2scrub@host.domain.name # Snapshots will be created to run fsck; the snapshot will be of this size. # snap_size_mb=256 # Set this to 1 to enable fstrim for everyone. # fstrim=0 # Arguments passed into e2fsck. # e2fsck_opts="-vtt" # Set this to 1 to have e2scrub_all scrub all LVs, not just the mounted ones. # scrub_all=0 [defaults] base_features = sparse_super,large_file,filetype,resize_inode,dir_index,ext_attr default_mntopts = acl,user_xattr enable_periodic_fsck = 0 blocksize = 4096 inode_size = 256 inode_ratio = 16384 [fs_types] ext3 = { features = has_journal } ext4 = { features = has_journal,extent,huge_file,flex_bg,metadata_csum,metadata_csum_seed,64bit,dir_nlink,extra_isize,orphan_file } small = { blocksize = 1024 inode_ratio = 4096 } floppy = { blocksize = 1024 inode_ratio = 8192 } big = { inode_ratio = 32768 } huge = { inode_ratio = 65536 } news = { inode_ratio = 4096 } largefile = { inode_ratio = 1048576 blocksize = -1 } largefile4 = { inode_ratio = 4194304 blocksize = -1 } hurd = { blocksize = 4096 inode_size = 128 warn_y2038_dates = 0 } ELFH@@8 @@@@\\\ppxxxxxx  888$$Ptd<<<<<QtdRtdxxxGNUuN;?/lib/ld-musl-aarch64.so.1&@&' @ g"oM{ ( "B :`^ [t @ z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardprintfstrdupstderrfputsexitstrsepstrrchrunsetenvgetopt_longoptindeerrorxoptargrc_service_resolve__stack_chk_failrc_services_in_runlevelrc_stringlist_sortrc_stringlist_freerc_sysputcharrc_set_userrc_service_staterc_service_daemons_crashed__errno_locationexecvstrerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  $     (08@HPX`h p!x"#$%xGDDDDDDDa{{_{VG:    ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> C{S[cks*Gu@@R@'R.v &(RRRRR &@*o1TG}``j{ .@ QqT@ X`xa 9R!Td"Ru!T"RG@G@@B TO7R_@~@@@=R`@-s@G@_$~5R6R!T"R!"RR qT.@W@!Xt@RR=!"Rb@B_q T_qT!"R'!h R:Rd8Rb5bj{.@`j{*554:74`j{6@4qT'7U4z6V4:6@|j;@sj{.@ 3Rb{C*SD[EcFkGsHC_!1|ЄGA@cGG     !?T!Ga_!!"A !ABGb_{ `@97G@fG)w R`9 @{¨_G@{!){{GS[s"&c֞kw s @ ! @@ Rr|!(Tb@b@`@cg9Qxq` #{`*@9 G@Y RG{ C/s"QqTR!KR{{_Usage: rc-service [options] [-i] ... or: rc-service [options] -e or: rc-service [options] -l or: rc-service [options] -r Options: [ %s ] %3s --%s %sout of memory %*sEINFO_QUIETyesRC_DEBUGRC_NODEPSIN_DRYRUNNOEINFO_COLOR%s (OpenRC [%s]0.63.2) %sYESEINFO_VERBOSEEERROR_QUIET%s: you need to specify a service%s: service `%s' does not exist%s: Failed executing '%s': %sset xtrace when running the commandignore dependenciestests if the service exists or notif the service is crashed run the commandif the service exists run the commandif the service is inactive run the commandif the service is not started run the commandif the service is started run the commandif the service is stopped run the commandlist all available servicesresolve the service name to an init scriptdry run (show what would happen)Display this help outputDisable color outputDisplay software versionRun verboselyRun quietly (repeat to suppress errors)Run in user mode[arg]debugnodepsifcrashedifexistsifinactiveifnotstartedifstartedifstoppedlistresolvedry-runhelpnocolorverbosequietuserF ~~~~~~~~~~~~>~|O~~~@~~~~~~~~~~L~~ ~~~~j2<~~dcdDe:ilr:INsSZChqVvU;8dPdx0dzRx  0,(< @P`A BTd4DG0AA E CCBC< AA B El ;dADTeHcRi[IfNss}SlrZhCVvqU<f9U @ xoxh  `  o$ #(%P P P P P P P P P P P P P P P P P P P P P P P P P P P P P x@ @ /5rc-service.debug>.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 8hh@JB` ` T  (^@ @ OP P d@@ j  p00 x<<<xxxxxx h   H 8ELF@@8 @@@@\\\//@xxx  888$$Ptd---ddQtdRtd  GNUmVla %Ųql/lib/ld-musl-aarch64.so.1F@FG q(=;"y O ( 4sShcB)B  Kxqj^ ^t z &__cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_mainrc_service_exists__errno_locationeerrorrc_service_in_runlevelrc_service_addstrerrorrc_service_deleterc_runlevel_existsstrcmprc_runlevel_stackrc_runlevel_unstack__stack_chk_guardrc_deptree_update_neededrc_dirfdopenatrc_deptree_loadebeginrc_deptree_updateeendfstatatrc_svcdir__stack_chk_failunlinkatctimeeerrornutimensatfdopenfprintffclosestrdupstderrfputsexitstrsepstrrchrgetopt_longoptindgetenvrc_yesnoeerrorxrc_deptree_freesetenvrc_sysputcharrc_set_userrc_stringlist_newrc_stringlist_addrc_stringlist_freerc_runlevel_listrc_stringlist_sortrc_services_in_runlevelstrlenmallocmemsetewarnxrc_runlevel_getlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo  !,5C     (08@HPX`hpx"#$%&'()*+-./01234 6(70889@:H;P<X=`>h?p@xABCDEGDDDa{{_{F6    F6 F6 F7 F"7 FB7 Fb7 F7 F7 F7 F7 G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> {[Scks*G@@RF@е'Rt.5R*1TДG,^@kTx!/}4!-x4!-s`4R!-m 4a.@-cqTTXqTT qTTq T R+qT7RqTTq TqT:RqT!,,"RCm@ @G@@B !T!4,@,"RR qATa.@p,T,!,,@RtR2`b@B_q T_qT!,\-"R!,,-rUR5@kKT7a.@4.RR`@kKT 6@@@#@ҹ C @/,@4 @qR@n`*@6@"a_aa.@z`.Tu@R?q@ @zT@@@RJ@@@@6<@*  G@+ RtRj<8#*a@s@a.@4.@ZU64 [...] or: rc-update [options] del [...] or: rc-update [options] [show [...]] Options: [ %s ] %3s --%s %sout of memory %*sNOEINFO_COLOR%s (OpenRC [%s]0.63.2) %sYESEINFO_VERBOSEEINFO_QUIETEERROR_QUIETdeletedelshow%s: invalid command `%s'%s: no service specified%s: `%s' is not a valid runlevel %20s |%s: the -a option is invalid with add%s: no runlevels found%s: service `%s' not found in any of the specified runlevelsProcess all runlevelsStack a runlevel instead of a serviceForce an update of the dependency treeDisplay this help outputDisable color outputDisplay software versionRun verboselyRun quietly (repeat to suppress errors)Run in user mode[arg]allstackupdatehelpnocolorverbosequietuserasuChqVvU;` <x( l8hzRx <0,X< @`A BTd4DG$A0BR A (A0BCP A ,,A0BCL A $A0BL A <0,AP G"}PE0pAA E CCBC@0 AA BE ~ F-aJ-sP-uW-h\-C,Vd-vl-qr-UI,_,,,,,,-)-$/=  &oxh  y    o$x# %Tx&*:-@-rc-update.debug7.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 8h h y@ JB Txx ^Od j&&p&&x--d--xx h   H 4ELFN@ @8 @@@@\\\||<00888$$PtdDxDxDxQtdRtdGNUA@%piX0K D/lib/ld-musl-aarch64.so.1@ o(zU>ZZN :x@"'J7lq  vG( SAz|1*| ##aB kNb2.tG]:9llG^ t z \a__cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_mainmallocstderrfputsstrdup__stack_chk_guardvsnprintfrealloc__stack_chk_fail__errno_locationeerrorxwaitpidstrerroreerrorstrchrgetpwnamsscanfstrncmpstrcmpstrlenmemcpystrsepmemsetsigemptysetsigactionfopenewarnvfscanffcloserc_find_pidssyslogebeginvkilleendvfprintf_exitpipe2sigfillsetsigprocmaskforkdup2execvpwritereadgetenvstrrchratexitrc_yesnorc_set_useropenloggetuidgetpwuidoptarggetopt_longendpwentoptindcap_iab_from_textstrtoulewarnunsetenvgetgrnamgetgrgidputenvpiperc_svcdirsocketbindrc_sysputcharaccessgetlineeinfoveinfovnnanosleepstdoutfflushunlinkrc_service_daemon_seteinfoneindenteoutdenteindentvgetpidumasksetsidsetprioritysyscallgetgrouplistchrootchdirsetgidsetgroupscap_setuidcap_iab_set_proccap_freecap_set_secbitsprctlioctl__environrc_stringlist_newrc_stringlist_freerc_stringlist_addgetdtablesizefcntlsched_get_priority_minpthread_selfpthread_setschedparamsched_setparamrc_conf_valuestrstrmemchrlibrc.so.1libeinfo.so.1libcap.so.2libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo %7<?BWf}   ( 08@HPX`hpx !"#$&'()*+,- /(00182@3H4P5X6`8h9p:x;<=>@ACDEFGHIJKLMNOPQ R(S0T8U@VHXPYXZ`[h\p]x^_`abcdeghijklmnopqrs t(u0v8w@xHyPzX{`|h}p~xWUUUUUUU#"""""""EDDDDDDD<{{_{Eb/    E/ E/ E/ E/ F0 F"0  FB0 Fb0 F0 F0 F0 F0 "F1 &F"1 *FB1 .Fb1 2F1 6F1 :F1 >F1 BF2 FF"2 JFB2 NFb2 RF2 VF2 ZF2 ^F2 bF3 fF"3 jFB3 nFb3 rF3 vF3 zF3 ~F3 F4 F"4 FB4 Fb4 F4 F4 F4 F4 F5 F"5 FB5 Fb5 F5 F5 F5 F5 F6 F"6 FB6 Fb6 F6 F6 F6 F6 F7 F"7 FB7 Fb7 F7 F7 F7 F7 G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> {S[cks*G@R)O) \\+@R)@`m@R `R R D@6tR!R@ 9!!l qT@ @4 )cs!!QqT`@@ !@ 5HS !S!l qTs @a@ 56@d@!T@@"R@"R@@R)S ( W [G )+ )3 ))))_ qTRqTqmTQ"qT[@Xux`5 R J*Ҙ*1aTG@9K|} _@qk@@zAT qOzTw@qIz@zwxEH@9 ,q+T,T q Tq CTq T Rq@Tq*Tq!TG!!l @VG@e3`@P lG@@95 hdR@!@9a5 XG!cs!@,5Ђ@@@ TI@5HS qTRG!!l @qTЂ@@@ G!S!l @qTЂ@@@ $G@?c R+` %_@!!(@)acC !@!0q`T@ @s @Ha@@@5@ @"R5@"R@`5@@`!!(!cC!0q@T@@@@ }@G@DG@G!C!l @qT@@@@ RG@@9?q(TCR@!@9a5?IT@R@@ A RsG@ d RwG@G@@@` * R#G@H xsG@G#!@4qT@@@<G@G@CG@G@G@'G@#{G@v+@@@G!@23@qT+u1TB@+@@! 5Rk Ry@AR^`@9A5+A';A?AoCA[:!`5Bk q Thk"R,ARR R+C1!T@d~c R<1T@q@l!4@"RsR ? q!T@@pxr!m@RGR!"R8@B8_q T_qT!\"R!, Rk R_ Rka_@{@z@Tk!k@q A:T1ATR@@! @5@7@9+@4@d s@4@ !C@! D!@"@4#8@ @9qT@ @9qT`@9qT`@9Qq TH@b !)_@4{@R!4b@@)k RX@$zs@_$@zT@(%q C!+@5@%g D!+@5@&]@'@@T@(R@?#@$@ T@(G!s*))\@!)y{@\ {oR5@?@_@@zTT*@_@z T{@!X@ #wMTw@"h`8_(qAT?h 8w@M@w@@9?qaT@9?qT@8?q$Iz`T! e!&@@<C *bx` *4@L8 <} <{@@ A kl TS4X8@ @sk@?q A:$T1ATRk@?@Rw@*'@*E @*1T(@qaTq2@`@@!T @ 5`@@ R'@q#@@zTqGB@B@T6T@@@H+*!Ҫ@*Bxax!!'@*?q#@ @zT!d+ҸR;n+Fn+Rq-T*+<*+R @ 4 @+2 @+R`@ t,%]`7RRRRR`TR;!@\ @.@qT(T 5@qMT &C@ qT @? T@@9* @R*4@1! Tu6@R@q T0X-K\ q`Tu6@R@-@Q@#@5?q@zTu6@R*qaT.K-6<@9*@ @*@55u6@R,)1T9 R @R@T@4RG@L@ @ .*z+@@RY:@j4*R5@@$/@ @R#@4,7/ Kq,T@RwB @4/`@4/Z`@80Ssa@l0M@40H0C^ @xssp\1WJzS+@`4 RR1aT@@d16V*1aT@@V1(\5Rq*#A@AR(2AR**@R_kT*RR1T~@@@.*L2H!22+@!3+@1T@*!R*1TZ@@@@ **3"M@qT@@*3@R?k@T!33@2@@*P4*!3i9 @@c 6瀹~ӗ@ @6" @!@4@cy @6@3@4@5y @K`6@3SBl5s@_@zT!3@@L *!3@ 4B4s@5a@Nt @ 瀹4@<6 c`T @ 44s @6a@43@F3@4@S7@4@J7@`4 6@?@7Z@4RRR!RR^1T{@-8RAR**G@@!`!h@99Z'9Ѐ)$m99W9@@94AR{@5@9))"RC@` RP*1 Ts/@s@C@9F@b4ң4!89ҝ5RA9@@9@@9?qT@4`TAR8T_T} ԉTA*@@6R!R*1Ts@s@@:'@ **1Ts@s@x'@;*@@6R!R*1Ts@s@d@<#@ **1Ts@s@R#@P=+@4*R*!R @`'@ ,T#7@+@@z`T*ARnRaR69@7'@qa T@1Tso@s@ <>#@,.7 Q qT*"RARQ[@o@B1aTsN@s@>[@o@kT'@R1aTs;@s@t?x[@ARs1aTs+@s@@O@_<=<@+!5 R@1TA+Ac 4@tg@!d`5@R@!`5@!`5`R@!`5R@C!l qT@@?1 T_<=<*+4@~.@s@s@r'A#A".T@qT@]/#AW53*R8qLT@K*tf@@T<!Q?qhTRjT@@Uf@@5GL#! q@T'@ 4@qTo@@[c[@TV@qT4R +@$R*'@qTqTj"8` C!@}RAR '@##@R@4}R#`HRr|CR1T@q`TR@X-w4*RJ4@@I*1T@,yR @RR@sqT*SA[BcCkDsE{ƨ_!`&|GA@cGG       !?T!Ga_!!"A !ABGb_{ `@97G@G# R`9 @{¨_G@{!#{{v G@ Ry{_֠{'@G@ Rj_{_{S`2@sNSA{¨_@{ s` @`@ @{¨{SG[ c k Cs  @7ҭc)<<<<#?q T~@@c)~@<<==<< kTG@9OG@0 RR!G7@"@c@T{GSH[IcJkKsL_{CS*G@@FqTTqT>qT qTB!!@BB"RV6`@(q T4@@g@Gu@@B T!*!@s@{ASB_{SG[+еG@@9qT@@T `@8q@z TR@@9O`@R9!C @@@!AT+@{BSC[D_{BSC[D+@@@T@7_{3GS[c@3`@94S!q!T@qiTub!qе*~T~|hx4@5R7 @!G@"@cT$3@{BSC[DcE_{cGS[*k@ҀSwV!RT)@ @L@ @!l oq@T?q@95P649 R˿NTL uRRG@@B TTBT} T`cTe_j58N 5`R@5B@ qT @9Q?$qT_G^!l qTq1T!R) A`@ @{BSC[DcEkF_{GS[sucsBks  @  @@ Rr@@d !( @b@@cg9Qxq ႁ#{`*t@ G@$ R{? Cs",ߎqTR!K|R{ S *G@O#q *nGO@@B@T{JSK_{CGS@!Z`@NL !G@"@cҠT!l bq T A>@@{ASB_{S[*cks7qTR҇ @9 R3z@4b@* (R*v4c@*Rz b@*z A*`@*@a4 q|@7@**R741Tx7Rq[B*SAcCkDsE{Ǩ_R{ s"`@6ARr'`6@sG`@!C R @{¨_C{CS*!G[c"@3!PR##7CR 7@ 1TcR@7@R7'@1aT*1aT*1aT*#e##@Rh*6R#@R @ @o@m@k@i@g@e#@c'@a@qsŸZG@@B T*51T1T*!R{`71T*ARu7#@R3*Ri 6w@@ұ R@ @c"4**R#@R1ATqR@sUR@7@@`7#@@7#R{U*SV[WcXC_{{_out of memory xasprintf: unable to format a buffer SIGTERMSIGINTSIGQUIT%s: caught %s, aborting%s: waitpid: %s%s: caught unknown signal %d%s%s%u%s: `%s' is not a valid signalSIG%s: invalid timeout value in schedule '%s'%s: invalid schedule item, far too longforever%s: invalid schedule item `%s'%s: invalid schedule, `forever' appears more than onceUsage: %s [options] Options: [ %s ] %3s --%s %s%*s%s: fopen `%s': %s%s: no pid found in `%s'Would send signal %d to PID %dSending signal %d to PID %d%s: failed to send signal %d to PID %d: %s/dev/nullFailed to open /dev/null: %s/bin/sh-cRC_SVCNAMERC_USER_SERVICESSSD_NICELEVEL%s: invalid nice level `%s' (SSD_NICELEVEL)SSD_IONICELEVEL%d:%d%s: invalid ionice level `%s' (SSD_IONICELEVEL)SSD_OOM_SCORE_ADJ%s: invalid oom_score_adj `%s' (SSD_OOM_SCORE_ADJ)USERHOMECould not parse iab: %sSecbits are emptyCould not parse secbits: invalid char %c%s: invalid ionice `%s'%s: invalid nice level `%s'%s: invalid oom-score-adj `%s'WARNING: -c/--chuid is deprecated and will be removed in the future, please use -u/--user instead:%d%1s%s: user `%s' not found%s: group `%s' not found%s: invalid mode `%s'WARNING: -o/--oknodo is deprecated and will be removed in the futureWARNING: -a/--startas is deprecated and will be removed in the future, please use -x/--exec or -n/--name instead%s: `%s' not a numberfd:%d%s: pipe: %ssocketready%s/supervise-%s.sock%s: socket path '%s/supervise-%s.sock' too long.NOTIFY_SOCKET%s: socket: %s%s: bind: %s%s: invalid ready '%s'.NOEINFO_COLOR%s (OpenRC [%s]0.63.2) %sYESEINFO_VERBOSEEINFO_QUIETEERROR_QUIET%s: --stop needs --exec, --pidfile, --name or --user%s: --background is only relevant with --start%s: --make-pidfile is only relevant with --start%s: --stdout and --stderr are only relevant with --start%s: --stdout-logger and --stderr-logger are only relevant with --startusing --wait with --stop has no effect, use --retry instead%s: nothing to start%s: --make-pidfile is only relevant with --pidfile%s: --stdout and --stderr are only relevant with --background%s: --stdout-logger and --stderr-logger are only relevant with --background%s: do not use --stdout and --stdout-logger together%s: do not use --stderr and --stderr-logger togetherPATH%s/%s/%s%s: %s does not existusing --retry with --start has no effect, use --wait instead%s: %s0Will stop %sWill stop PID %dWill stop processes owned by UID %dWill stop processes of `%s: no matching processes found%s: nanosleep: %s%s: invalid schedule item `%d'%s: %d process refused to stop%s: %d process(es) refused to stop%s: %s is already runningWould startas user id %luas group id %luin root `%s'in dir `%s'with a priority of %dwith a process name of %sDetaching to start `%s'%s: pipe2: %s%s: fork: %s/dev/tty%s: setpriority %d: %sr+/proc/self/autogroup%d %s: autogroup nice %d: %s%s: ioprio_set %d %d: %sw/proc/self/oom_score_adj%s: oom_score_adj %d: %s%s: getgrouplist(%s, %lu)%s: chroot `%s': %s%s: chdir `%s': %s%s: unable to set groupid to %lu%s: setgroups() failed%s: unable to set userid to %luCould not releasable memory: %sCould not set iab: %sCould not set securebits to 0x%x: %sCould not set No New Privs flag: %sRC_SSD_EINFO_/usr/libexec/rc/bin/usr/libexec/rc/sbin%s: unable to open the input file for stdin `%s': %s%s: unable to open the logfile for stdout `%s': %s%s: unable to open the logging process for stdout `%s': %s%s: unable to open the logfile for stderr `%s': %s%s: unable to open the logging process for stderr `%s': %s%s: failed to close notify pipe[0]: %s%s: failed to initialize notify fd: %s%s: failed to get flags for notify fd: %s%s: failed to set flags for notify fd: %sfifootherbatchidleUnknown scheduler: %sFailed to set scheduler: %sFailed to set scheduler parameters: %s%s: failed to exec `%s': %s%s: failed to read from pipe: %swaitpid %d: %s%s: failed to start `%s'SSD_STARTWAITrc_start_wait%s: read failed '%s' READY=1%s: %s died%s: did not create a valid pid in `%s'Set the inheritable, ambient and bounding capabilitiesSet the security-bits for the programSet the No New Privs flag for the programSet an ionice class:data when startingStop daemonSet a nicelevel when startingSet OOM score adjustment when startingRetry schedule to use when stoppingStart daemondeprecated, use --exec or --nameForce daemon to backgrounddeprecated, use --userChange the PWDSet an environment stringSet the umask for the daemonChange the process groupMatch process name by interpreterCreate a pidfileMatch process namedeprecatedMatch pid found in this fileSend a different signalTest actions, don't do themChange the process userChroot to this directoryMilliseconds to wait for daemon startBinary to start/stopRedirect stdin to fileRedirect stdout to fileRedirect stderr to fileRedirect stdout to processRedirect stderr to processPrint dots each second while waitingSet process schedulerSet process scheduler priorityConfigures experimental notification behaviourDisplay this help outputDisable color outputDisplay software versionRun verboselyRun quietly (repeat to suppress errors)Run in user mode[arg]HUPTRAPABRTBUSFPEKILLUSR1SEGVUSR2PIPECHLDCONTSTOPTSTPTTINTTOUURGXCPUXFSZVTALRMPROFWINCHIOPWRSYSNULLsecbitsno-new-privsioniceniceleveloom-score-adjretrystartaschuidchdirenvumaskinterpretedmake-pidfileoknodotestchrootexecstdinstdoutstderrstdout-loggerstderr-loggerprogressscheduler-prioritynotifyhelpnocolorverbosequietoty~2222222222222222222c2B22}22E2@2222222222U2 2236:@,ODL&\kI:KN:PR:Sa:bc:d:e:g:ik:mn:op:s:tu:r:w:x:0:1:2:3:4:ChqVvU;\(,h44Ttt<|L<8H`4zRx ,0,H< @p`A BTd4DG8AL(@BKAA$<A BG A 0A BH@ AA"!B DBBCU(`\(A@ABDA<X`A`ABDBy A F A x 4pDApA BDCE8|ApA BDCB0T0AA E CCBC$ABB\(A@ABDr@pAp C BCP A tA BY0DAABE@x,@'A` G  `G POvaavv vvvv v "v 'v ,v _va1v6v;v@vEvJvOvSvXv]vdvivovrvvvzvqvvvIkKvNvvRkSvarbvcvdvevkNsgvivmsnvospbsvt tuvrqwwxw0w1w2w3*w48wPuAwTw[wh`wCuVhwvpwq tUrqqqq r,rJrqrrrrrrss;sTsvssssssst'tMtbtytttttuu9uhuuuuuu \aox    o$#@%0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  '\a6quustart-stop-daemon.debug.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 H 8@JB T@^ O0 0 pd''9 j\a\aplalaxDxDxxx08$($x$@ELF?@@8 @@@@\\\llxppp00888$$Ptd~~~QtdRtdxxGNUZKhYqԧ/lib/ld-musl-aarch64.so.1@ 8!tWm  I5tm"'"1a79<"R3h ( |>9uNyB EfES!WL1XO_k@m,>e^ Ft 8!z i__cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_mainmallocstderrfputsstrdup__stack_chk_guardvsnprintfrealloc__stack_chk_failwaitpid__errno_locationsyslogexeclpstrerrorstrchrgetpwnamopen_memstreamfputcfflushferrorfcloserc_service_resolveaccessmemsetsigemptysetsigfillsetsigprocmaskforksigactionexecl_exitfprintfsscanfeerrorxstrncmpstrcmpstrlenmemcpystrsepfopenewarnvfscanfrc_find_pidskilleinfoveerrorstrtolpipe2dup2execvpwritereadsetsidlocaltimestrftimerc_service_value_setgetpidsetprioritysyscallgetgrouplistendpwentchrootchdirsetgidsetgroupscap_setuidcap_iab_set_proccap_freecap_set_secbitsprctl__environioctlrc_stringlist_newunsetenvrc_stringlist_freegetenvrc_stringlist_addrc_yesnogetdtablesizefcntlsigdelsetrc_service_daemon_setalarmrc_service_markunlinkstrncasecmpclock_gettimeclock_nanosleepstrrchratexitrc_set_useropenloggetuidgetpwuidoptarggetopt_longoptindcap_iab_from_textstrtoulputenvgetgrnamgetgrgidpiperc_svcdirsocketbindrc_sysputcharumaskrc_is_usermkfiforc_service_value_getewarnstrstrmemchrlibrc.so.1libeinfo.so.1libcap.so.2libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$9>@BVh      (08@HPX`hpx !"#%&'()*+,./012 3(40586@7H8P:X;`<h=p>x?ACDEFGHIJKLMNOPQRSTU W(X0Y8Z@[H\P]X^`_h`paxbcdefgijklmnopqrstuvw x(y0z8{@|H}P~X`hpxWUUUUUUU#"""""""EDDDDDDD {{_{E.    E. E/ E"/ EB/ Eb/ E/ E/ E/ E/ F0 F"0  FB0 Fb0 F0 F0 F0 F0 "F1 &F"1 *FB1 .Fb1 2F1 6F1 :F1 >F1 BF2 FF"2 JFB2 NFb2 RF2 VF2 ZF2 ^F2 bF3 fF"3 jFB3 nFb3 rF3 vF3 zF3 ~F3 F4 F"4 FB4 Fb4 F4 F4 F4 F4 F5 F"5 FB5 Fb5 F5 F5 F5 F5 F6 F"6 FB6 Fb6 F6 F6 F6 F6 F7 F"7 FB7 Fb7 F7 F7 F7 F7 G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> {S[cksC*G@@R )C@t`j 7@ E .@6stR!R@@@qT74s a@+ KB !B@!P-qT@ K@ K vЂ"BP!!QqT@ K@"@ 5a?<"HS KB !B`!P-qT`K@@  G G@@ATG@@"R@"R @#`@`Q"@R)  `RG)' :+ qTaR"<qlTqlT RQqT!!7!X`x`!  R#D*j1!Ty xK 9Gz` @ {C @ H7Q? qTQq(T!!9!X`x`! ր@y!"S!P-:qT @qTs @a@_@y!"C!P-)qT @qTs @x a@@0a 0`@ @@95 `  R`9 @{¨_G@{! `>{{ G@P$ R{_֠{7@G@P$ R_{_@{S`@s` SA{¨_@{SG[ c k Cs  @7ҳc)<<<<9?q T~@@c)~@<<==<<#kTG@$c}G@P$Z R$R!G7@"@c@T1{GSH[IcJkKsL_{CS*G@*R*1T@qT!G@@"@c@T @{ASB_{S??@@_<qT_Dq`T_8qTs R`@SA{Ĩ_s`@4"RMqlTb"@_kT"RD"R r?qTs R`sR!$%sb@R!h%nb@!%c%>@<! &`R_ R{SG[+G@@9qT@@T`@8q@z TR@@9G`@R9!&C @@@!AT+@{BSC[D_{BSC[D+@@@T{SG@C#(G@P$e R/a`@Rs"`@$z55!G @@"@c@T){BSC_{GS[@@R4RGG@@B@ TR#}s@R7r* 5 Rx Rt@Rp`RlRh@RdҀR`@R@P!&`Rr R1!T@C`R!4'f@R@*{ZS[[\_@7_{ ` @6ARr\'` 6@sG`@!' R @{¨_{3GS[c@3`@94S!'q!T@qiT(ub!(qb*~T~|hx 4@5bR7 @!G@"@cTK3@{BSC[DcE_{cGS[*k@ҁ Sg!RT) @ @ ] @ @ !P-q@T(?q@95d649)R˿NT<)RRG@@B TTBT} T`cT_j58 w 5`R@5B@ qTx*@9Q?$qT_G!P-%qTq1T!R))A` @ @ {BSC[DcEkF_{GS[sbucsks +@ @ @ Rr@T+!:+@b@@cg9Qxq ႁ#{`*t@ G@P$Y R#{/, Cs"eߎqTR!KR{CGS@!6`@<,!G@"@cҀT!P-q T,@@{ASB_{S[*ckqTR@,9_-R@4@*Rp*@4@ q`T@<**`R^R*1T*SA[BcCkD{Ũ_R{cGS[k;@?q T*R@`-Ra-R*R(4@_q T(T"5@qlTq@zsZ_ qT/ C@@*R*55<.*G@@B TS1T R @ &@ qT_TY*RRW*4#N1T@q T.R9TZ;@*{BSC[DcEkF_{ [#GS @_! !BR `@qT@94@`~|ӡj`5`U1T s.AT|@! |?!G_@"@c@T{LSM[N_C{CS*!G[c"@/!/R##]7CRY 7@ 1TcRR@7@RM7'@1aT*1aT*1aT*###@R*6R#@Rt@ @@@@@@#@'@@qsŸZG@@B Tq*51T1T*!R'`71T*AR!7#@R/y*R 67@@i RC@| @c"4**RҤ#@Rt1ATqR@sR@7@@`7#@@7#R{U*SV[WcXC_{GS[tcks@oR&@ҚB/@!/:@B 0rPqIT} Ԁ@!,0*BP-bPq(T@!\0"R@?k To*@Rc1Ts@@s@?*0e!00@`@!@1D"@1TtJ@*ҁ>@c*!R+1T@@@>@**1R!X>b@5!h>HqAT;@_qTtR!>"@i"@;@1T"@;@!>`R^98y4`@4R`C96b@R!\?N?zRjAT`@x@4R#@R!9@#@qT*R!8/nt!?R@(hYT"@R!@"@6U@"@*R!9R@"R#@*#@kT4yR?\@RE}!A!! ܚ!w@?T`8@@#y@4;q-TkTR! R ?@rT[arg]msmilisecondsminminuteshourHUPINTQUITTRAPABRTBUSFPEKILLUSR1SEGVUSR2PIPETERMCHLDCONTSTOPTSTPTTINTTOUURGXCPUXFSZVTALRMPROFWINCHIOPWRSYSNULLhealthcheck-timerhealthcheck-delaysecbitsno-new-privsrespawn-delayrespawn-delay-steprespawn-delay-capchdirenvionicestopumaskrespawn-maxniceleveloom-score-adjrespawn-periodchrootstdinstdoutstderrstdout-loggerstderr-loggernotifyhelpnocolorverbosequietVZ^:mp*-()q@.=9AA:a:D:d:e:g:I:Kk:m:N:p:R:r:s:Su:0:1:2:3ChqVvU;lpl  8Dld80`\$8,\ph0lX@zRx l0,< @`A BTd4DG8AL(@BKAA, $$HA BJ A @ DAA"!B DBBCU(PA@ABD\(|<A@BBR A < `A`ABDBy A F A $,A@ABs0AABEkD X|pA BX4|DApA BDCE8ApA BDCB0AA E CCBC($A@ABDs8P AP CC~ A <AA BG v,PABBEz04AABE,0@ AA E F,`A` H$ @A` G `G@@B|F|J|b|O|T|Y|]|a| f| k| p| u| |z||||||||||||||||||a|A&x||}D}'} 9}d?}eNygC}IJ}KO}kU}ma}Nk}upy}PxR}rjsuSzu}0}1}2}}pi3}}h}C{V}v}qzUwww3xYxxxxy!y;yTy{yyyyyz-zEzizzzzzzz {%{@{Y{{{{{{| 8! ioxh   x o$!#8%P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!P!p8! )i3w||"|%|tp)|3wx`1|`5|`k6=|6 0usupervise-daemon.debug!P .shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0  8hh@JBxx T!!8^8!8!OP!P!d ) )? jiipiix~~pp0`8ELF@@8@DD<X$$Ptd<<<\\QtdRtd00GNUHh _d}y\&5+FQ@!aD0hH +,-./01345789:;<=>@ABDEFeqNϳr.Ye[(+{g_K|gpaVW ^#1L aV܃+e+"gw:.|+"-Yf_i>]}dC"\R ) E< ) U7M"0j [ |60) 89 9  ,& X+@ /# 7 \3 l5 |* 9 \2@ n  ,' ,(0 9  , t1 <)@ ,% 0$ .  \4 0v T!| t-0_init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize__deregister_frame_info__register_frame_info__stack_chk_guardmallocvsnprintfstderrfputsfreereallocexit__stack_chk_fail__errno_locationstrcasecmpgetenvstrcmpstrstrstrlcpystrlcatfilenoisattystrlenstrdupstrchratoicloselogopenlogvsyslogfputcvfprintfstrtoimaxeprefixecolorstdoutstdinioctleinfonunsetenvewarnneerrorneinfoewarnewarnxeerroreerrorxebegineendewendebracketeindenteoutdenteinfovnewarnvneinfovewarnvebeginveendvewendveindentveoutdentvlibc.musl-aarch64.so.1libeinfo.so.1 (>     D (08@HEPX `!h"p#x$%&'()* {{_{BG:    FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> @!@?T!Ga_@!@!"A !ABGb_{ `B@97G@^G8s R`B9 @{¨_G@{!`8{{[ GSc k s  @72 C#_)<'<<===$?qTR_kTG@(yA@>_)A@<<<===G@'[ RA!G7@"@c@T{GSH[IcJkKsL_BG*{CRC@R lP@95 9_qT b8 C TR@9 qTqTTqTqTR!G@"@c`TqaTKR" A !2h 8*!5Aq@TQ?$k,T!|@R_kLT* d!BP"T!Qha8!E8?1Tcc4 *R qT*(Rh!8!)! {A_{ AR#!(5 R @{¨_!$34!(`4!X,4!(} 4!(x`5R!2q@4!(l4!(g4!t2b`4|R{(!{{(){{\){!G{ CS [ c k s"@G Ѐ)Rt@a@ 4 7 @@ 4qT"B@9)B !))5"!R9!*` R "Ղ+9R@@?q !T"ւ+x")sRR0* @9Y @)B)R @ @ @9`4"P `BI T} 5R!GG@"@c`TRt@5"@T  A@k`8qaT AR@9aR@9B)?q)B@B)@R }sB#{qT"RL*oR m`˓b TdsR\*[Zf`TRsx!l*JjTC R R|"{ISJ[KcLkMsN_{6@?q@T? q@T?q@T?q@T?q@T?qATR! !  X`{¨_R R@R`RR,C{C*GS@/*@ T@R!R~@C*=<<_=#G/@@B@TC@{FSGC_{SG[c *@/*`7!*@4_8qT@R"n@ *n@!Ry@!**o!Rk!+<+h`Rc,!p+w~@C*=<<_=  A6"b@G/@@BTXR9@5qRЁB| {F*SG[HcI_ _C{CBGC@'C<CG=<=/G'@@B@T{EC_{S*G@[5G@T 5G@Mqs*SA{¨C{SG[*cC*@+/aRW@yq Rs",sKC@@)C !)5 R9xQ BR@@95"9xQqmT6"*LR*R R@!+G@@B`TA9 7qLTG@@BҁT{DcG[FSE!+C@CRkkTKRC@{DSE[FcGC_{S*!GS $@?!G4@A@9a44~|@!G{4@!0,<<{@@==5aR*!,Ea Rc$,CG?@@BҠT3R4RRBRc,R{H*S@SI_{CSG@'SRG'@@B T7C+"RB!'@"R>+JG@@BT"`R`@`5{ASB@xCG{CS[#@Ҁ>+@?Rw@a@5Q_qT>+wG@@BT!'>+"R@E#@{ASB[CC_{CSG@'SRG'@@B T6C(>pp   $ELF@H@8@DDPPP  $$PtdȠȠȠttQtdRtdPPPGNU5m[SV "HO(j B0@(,0$BDJLɃ#RL &!VWXYZ[\]^_`abcdeghiklmnopqrtuwyz{|}~Ek<<ϹoCQ}t_aR㧗*\GvsaW^Ub%UZ &EeH /-وS8't-X-P.-ܔC)uxk-%3 da$ XVJ}M} NVvswl9Sf2` vBZ]=7 fҮ X@:sC<]}vQK_ϓI!_)O XK}5eP.5nYd*'Y>n\ iEƹP'4:C"Cd`FR ) gUzAC fi .(]6N[=aX^iYRV j 7 C PR, WP' lXQ dl Z R`q B4 Dj >$: X `l iK X r dh` @  \ 8_ H @$G o A J P I 0kP ]P X_< F h?Z x@  hPk rL XWc f  {, d  0 h B4 (mH <  ,tR At L MXf |e8 <4 & p < d  8[\ pn ?  C\ D t<T  H2 n _8 D TiH_ HK ] dMN |Y x5 Ј- D@ | @$_init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize__deregister_frame_info__register_frame_infostderrfputsmallocstrdupstrrchropenatfdopenfdopendir__stack_chk_guardvsnprintfrealloc__stack_chk_failgetlinestrlenstrcmpreaddirfstatatclosedirunlinkatfopenregcompfcloseregerrorfprintfregexecregfreereadlinkat__errno_locationstrlcpyclear_dirfdsrc_is_userrc_set_usersetenvgetenvatexitrc_scriptdirsopen_memstreamfflushferrorfputcunamerc_scriptdirfdsrc_sysconfdirrc_usrconfdirrc_runleveldirrc_runlevel_unstackunlinkrc_svcdirrc_dirfd__assert_failmkdiratrc_runlevel_startingfaccessatrc_runlevel_stoppingrc_runlevel_getfgetsrc_runlevel_setrc_runlevel_existsrc_runlevel_stacksymlinkrc_service_resolverc_service_existsrc_service_descriptionpopenpcloserc_service_in_runlevelaccessrc_service_value_setrc_service_schedule_startsymlinkatrc_service_schedule_clearrc_service_markrc_service_adddirnamerealpathstrncmprc_service_deleterc_find_pidssscanfreadlinkgetcrc_newer_thanrc_older_thanrc_yesnostrcasecmprc_getfilefilenofstatfreadrc_service_value_getrc_proc_getentstrseprc_config_valuestrchrrc_stringlist_newrc_stringlist_addrc_runlevel_listrc_services_scheduledrc_service_extra_commandsrc_services_scheduled_byrc_deptree_loadrc_deptree_load_filerc_deptree_dependrc_config_listrc_stringlist_addurc_stringlist_deleterc_stringlist_findrc_stringlist_splitrc_stringlist_sortrc_stringlist_freerc_runlevel_stacksrc_services_in_runlevelrc_services_in_runlevel_stackedrc_services_in_staterc_service_daemon_setmemsetrenamerc_service_started_daemonrc_service_daemons_crashedfscanfkillrc_service_staterc_deptree_freerc_deptree_dependsrc_deptree_orderrc_deptree_update_neededmkdirstrerrortimefnmatchrc_config_loadrc_conf_valuetolowerrc_systoupperrc_deptree_updaterc_environ_fdlibc.musl-aarch64.so.1librc.so.1  !/?S(08@HPX`h pgx   Zpo (08@|HPX`h p`x"yh#$%&'()~*l+,-.0 1(20384@5H6P7X8`9h:p;x<j=>@rsABCDEFG\HI_J K(L0M8]@eHPNX`hOpPxQRSTfUP?{{_{F0    F0 F0 F0 "F1 &F"1 *FB1 .Fb1 2F1 6F1 :F1 >F1 BF2 FF"2 JFB2 NFb2 RF2 VF2 ZF2 ^F2 bF3 fF"3 jFB3 nFb3 rF3 vF3 zF3 ~F3 F4 F"4 FB4 Fb4 F4 F4 F4 F4 F5 F"5 FB5 Fb5 F5 F5 F5 F5 F6 F"6 FB6 Fb6 F6 F6 F6 F6 F7 F"7 FB7 Fb7 F7 F7 F7 F7 G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> G> G> `!`?T!Ga_`!`!"A !ABGb_{ `bA97G@JG@ R`b9 @{¨_G@{@!{G{@ # RK{, G@ # R?{_{{_֠{@G@ #k R)_{_{S` @`@`bSA{è_{R .@ @{¨_{6RS*1 Tq#c:!!\#*ax`*LSA{¨_{RS1`T*`*9SA{¨_{S1`T*{`*'SA{¨_{ s"`@"`@ @{¨_{SG[ c k Cs  @7Qc)<<<@K|@SA[BcC{Ĩ_Tj 8.hTs@`{ S[c-!G"@!*!D$@R6R!GH"@cT#**Tj48`@` RM`5s"@qIT c-@SA[B{Ĩ_C{ Cc X*BGS [ C@G# 5@3@6?Tһ3@R@ @qT*lGG@@BT[?T3R*N@9q`T*Nrd@z.v3R{I*SJ[KcLC_{SsB`@qmTxusFT@SA{è_PC9_@A9! 7{!R"RSt"a"9B9!!$ $i $!!%s">!!%b @`b9 $& G@ d&$ R %!!4%G@ l% R!!&`"`@a`"SA{¨_ B @9@ !@_G{S@#`@@4G@ # R@Rx"<5@"R &3@`&'A!`&'!\'RC5 C'"RG@@B@T{ZS[_{S[uB&@B@@sB@`B`&@[BSA{Ĩ_Rrl1T&@"&z!" _ @9`6 @_ @9`6 @_ '{CSG@Ҍ!!'l@*!Gq@"@c@T!{ASB_ @9`6 @_ ({S[c@qT|@Bzvq T*8q@T T1T*SA[BcC{Ĩ_֠4!xv#! c!P((R<qTRr*>RRr*:/Rr*BaB*RR*rz6*1T@qT*=R;1T@DqTBR*r*z6{RRR!!(Lq{_{RRR!! )?q{_{RSR!!<)w,R:aj`8?(qATj 8`@9`5SA {¨d))9SA{¨_{ R!"HR!<)K`@ R @{è_R!G{ CS"@G@R!GG@"@c@T>@94!!$ 4!!#4Rl#R5@ @qS@{I_C{S!G#"@1@7R!G@"@cT %6!!)C>V#!!'6@*HFq#@{BSCC_{SBG[c3C@!!(R@R!#CTt@ @TV@p 5 @ @`@R @`@!G@"@cT`R3@{BSC[DcE_!G{ S [ c "@OGO@@BaT{JSK[LcM_@9?qT!GO@"@c@Tu{JSK[LcM*@Rc R5+@ (@qaT@R'@#c^`@Rc R5+@ (@q!TR'@#cI7u)@BCx @c@4"!G{ CS "@GҠRRGG@@BT$iT`_8?qT_8?qT_8qTAR#5@ R?jTRRP3R{I*SJ_{S!G"@@9 #2?qc0c!!)C* @!!:e#T@h@G@@BT$0{BSC_{CGS@!!'@Ry*!Gq@"@c@T@{ASB_{S R=R`4a@DqTR@*SA{è_ RR_*1`TR3R*"HRFR{S[R*SA[B{è_!6`Rr=R4@DqT`RhR!*1TR*R4*q*ag{S`RH**V7@qSA{¨_R{C[*!GScks"@ҸqT`!@bAkT`! @*R4#R!G@"@cҠT!R**`5q@R@z T"qs!DzsR*`@`QqPz T@RRqaT RR}`R8 (x.`@w@*k@T q@THTqTq`TqTsB5*RR54BqATR*K1 T**R1TqT RL@Rw8@@Rm{ASB[CcDkEsF_{[!GSc3"@G7ARRG@@B T6!R`7!!X*5X4n**Q4N!Rn*#!!(,@8`5AR@640C!!' @Zq3@*{BSC[DcE_{SG@ @C!!' @*!Gq@"@c@T{BSC_OC{GS[#ck*s@ <*<<d@4!!,_4!!P+Z4RC{ CS !G[ c"@G!!0=v#5@`@C@``@@3R8mGG@@BҠTd!@`4`@RRc@*{ISJ[KC_{SG@^!!,@#CR!G @@"@c@T{BSC_{cGS[k@ !-!: Cl@T @6֊/l#&@FAR @G@@BҠTK5jw8?qHTB'6?qAT{BSC[DcEkF_{S[/s@t@RLj`5jv8qT@SA[B{Ĩ_s@{{_{S@`` @``B SA{è_{S@`~@` `"SA{è_C{ CS *G[ c *@G*`GG@@BҠT`N@9qTquNT#R=5@ @qT#R2`5Ts`B@9q!T`F@9qT`J@9qaT{ISJ[KcLC_{{BR` {S`R*W*SA"R{¨!G{S[3"@/@!!T-@!!:G@@B THCcCT@/a#@@94$3@{CSD[E_{C+GS[c@8`RM* ( G@@BTL6A@RR5B+@{ASB[CcD_{[GS+@C!. @.b@BvG@@BTC @@C!. @+@{BSC[D_BG{S[cks C@R{?ֆ29.@}@TG@@BTo3 5,@+sqaT!/ !(/5@`@94! / sqT@K@94@4*@#{DSE[FcGkHsI_{RY{!H/|` y{S2@8G AR@SA{Ĩ_@@3a@s@{S*G[ck@ *Rj/#C @T)oG@@BҠT@8?q$IzT)TRZ`jz8(qATj:8{BSC[DcEkF_` }{[GS@ !p/`5`c! /SD@@9q`T!/cG@@9@ 4aj`8?(qATj 8!/ !/@@Yda@`5@ hv8qT@`G@@BҀTCs@{CSD[E_{S@SA{è*`@@`4s@!RSA{è_{S[@!RRvV@@ 5` @ ` @_] RSA[B{Ĩ_ր{S@SA{¨_`@ 4s@{CSG[@`*G@@BT{ASB[C_{S[ck@S@x@x@ ` @@v`"T@a t `@@P`7@y SA[BcCkD{Ũ_`{S@@SA{èV@_$@ T{S[@6yVRBR~@SA@[B{ĨL@ G!/@c0o@ 1s R)b@Us@(A@@SA[B{Ĩ__{S?= @SA{è_!G{CS["@#*TG@@BaT{ASB[C_@"Rxt @b@A"@aG!15@@@T{ASB[CR@@!ҁT{A[C"RSB{S@@SA{è_ր@@b@A"@a@{Sq T*RB!BA@CAkT@"RSA{èR!81@SA{è_ּN"R@@b@A"@acM{ S[cksc-G@1RRGH@BҠT:Rq:IRN`1  R@46RS=R4@DqTD!1B@!\# 1,(2#@R?`N@9qT@dN@-@95@@@6'ZRYzyCе"22R4Rf c-*SA[BcCkDsE{ƨ_C{CS@!G[#"@`T*kҡq T*!1@*oG@@BҀTkRn K`* L@9?q TLp`6*R#@*{ASB[CC_{s GS[ck@Rt**9c2 /``N@9q@TjaNR  RN@lG@@BT@@@A@9A45uS@T"!t2?5s@!25t3@!2`5m!2@@T!2c@!:JS!+hqLy5@4R1T@ q4zҖ9Rus`@~Sa@!}#`@?!@@"RR`@R@9RRD{D*SE[FcGkHsI_{S![*3R@366,@4q@Ts26`RuR`*SA[B{è_ր@kRR5@s*@qsB gRR5s2K{S[5R*SA[B{è_!2`4!34!(3 4!@34]7!d)`4!`35!3 4|@5A Rj=6{ST@c*k+[R4+@*SA[BcCkD{ƨ_֓@*6#qT q`T6R 4U@6 7|@6@6 raT{S[@t@w@ @@@A` `A@a@ `@@SA[B{Ĩ_{S[c*!3@6@SA[BcC{Ĩ_ց@@@r T@ERRo7@ER$Rg`6`@B4@`4@ERRU`6`@ @ERRK`6`@ @RRA7@R$R97B4@W @RR.`7@%RR&`7@%R*`6`@B6@V@@`@@B`@@@6@@@6@77X4@G7`@@ SA[BcC{Ĩg4@RR6]Z4@%RR6P{S[*cksv@@v@w3?6 73- !3a@[BcCkDsESA{Ȩj@ `4@@`@@@w@\@4@?@5RZ@3@*7@<@x@@3.3@62@7@2@A@ 63@2!3c@@@J*@@@3a@3@52g@B@a@5SA[BcCkDsE{Ȩ_{S[ck* 4`X*s@YR |SSA[BcCkD{Ũ_a@s@*#{S[4c*b`X*B 4!1\4!`3W@5@R<R9@b@A"@aR/@b@A"@a!2!P4~!(3z!3v2qoSA[BcC{Ĩ_g)g)4@b@A"@a R@b@A"@aB6@46@{ [ GS c ks@O=R{@4!@DqT@sG`@!d4EdR^c!H/R` 5;@R#*94C! TRH4"R{R?4"Rr?q@zs*s6R/4"RcR'4"R[q@zs*R!4@Wd@z`T@GO@@BT3Rk @"Rxw4 @"Rxw+q@zs*@"R` Ra*@3{J*SK[LcMkNsO_C{C#*S!G["@!4@5l@@@@xG@@BTrL"R5@`@@a@:@Ys@@a@#@{ASB[CC_{S"l@?@SA{è_a@s@` @/{l!4@!B@C@a#@A{{SB[Gcks@`:@@!G@"@c@T{BSC[DcEkFsG>!`:! 6Rs:@R.*TRR`255a25` @!BB8@C@a#@ABR9/u:@*6s:@!l5!5@5Bu@:UG@@B!T@@CHw@@@@`4@ h{8qT @@@4@Q?dqhTV9@94qT{6S@!x6 7`7*!D77R7K4*!8`78!878!,9 78!d9` 7R91` 4R:, 56 Q?dqhTP9@9 5`@95SA{¨_!x65x6!656!656!656!h65h6!,65,6!6 4!555!555Rp848!D:7!::7; R\;4`@9 4!5~4!6y56R;5!<<<``65ѠG{CS[ck s @'#!:<5MP = @#@!T.z )ҠR8T9R'xTj;8?=t@@3@@@@W@/@@94@`4u Җ@@44@@4p&3@9 44`5i/4iT_8?qT_8?qT_8qT @@?qT= 53.@@4!2`4!(34!P45@`@@kt8j48N@kw8k78T@r4n`4@\@A@ |@@X@ @`@@z@@A` @ @@ @aA@@Z@ @+u@3@a@ @`u@ZG2U Д!B`@@@@&@B@A@@@6@w@@5@@@!\=\a>ya>0@@@@m$@J!2!(3!P43t@3T G/2>u@5R?"HR!H/@t@Zs?T4R @@R+4"HR5@1UG'@@B@T=@ R'`@@3 @W@@@@`5@3@@@`@ A@@@W@C@ E4@B@@ @@vr@@@DqT@@@o@ ?@@u@@x @@@{~@E@ДG@R!?nZ@i@a0@ДG@R!4YURr4R[ORQ{E*SF[GcHkIsJ_{{_out of memory wxasprintf: unable to format a buffer ..file_regex: %s/proc/%u/cmdlineyesRC_USER_SERVICESXDG_CONFIG_HOME%s/rc%s/.config/rcXDG_CONFIG_HOME and HOME unset. %s/runlevelsXDG_RUNTIME_DIRXDG_RUNTIME_DIR unset. %s/openrcRC_SCRIPTDIRSRC_LIBEXECDIR/usr/libexec/rcRC_UNAME/etc/runlevels%s/%s/%s/run/openrc../src/librc/librc.cdirnames[dir]rc.startingrc.stoppingsoftlevelsysinit../%s%s/init.d/%s. '%s'; echo "${description%s%s}"boot/etc/init.d/procRC_OPENRC_PID/proc/self/statusenvID: 0/proc/self/ns/pid/proc/%d/ns/pid/proc/%d/proc/%d/stat/proc/%d/statusenvID:true1nofalse%s/options/%s/%s/proc/cmdline. '%s'; echo $extra_commands $extra_started_commands $extra_stopped_commandsexec=%sargv_0=%spidfile=%sdepinfo_=servicedeptree#export "'%s=%s=%sLoop detected in stacked runlevels attempting to enter runlevel %s! Ancestors: %s singlescheduled%s/daemons/%s/%s%s/daemons/%s/%03dexec= pidfile= argv_%d=%sexecargv_namepidfilechroot%s%sineedneedsmeiwantwantsmeshutdowniafterprovidedbyiprovideRC_SVCNAMERC_BOOTLEVELiusemkdir '%s': %s rc.confrc.conf.ddepconfig*.conf/etc/conf.d/rcrc_interactiverc_parallelXEN0WSLPODMANXENUSYSTEMD-NSPAWNRKTUMLVSERVERDOCKEROPENVZLXCrc_sys/proc/cpuinfo(s_context|VxID):[[:space:]]*[1-9]/proc/vz/veinfoenvID:[[:space:]]*[1-9]/proc/vz/versioncontainer=lxc/proc/1/environcontainer=rktcontainer=systemd-nspawn/run/.containerenv/.dockerenvcontainer=dockermicrosoft/proc/sys/kernel/osreleaseWSL_DISTRO_NAME/proc/sys/fs/binfmt_misc/WSLInterop/proc/xencontrol_d/proc/xen/capabilities/usr/libexec/rc/sh/gendepends.shibeforekeywordService '%s' needs non existent service '%s' brokenError: %s is the name of a real and virtual service. depinfo_%zu_service='%s' depinfo_%zu_%s_%zu='%s' fopen '%s/deptree': %s fopen '%s/depconfig': %s usesmestartedstoppedwasinactivehotpluggedfailedcrashed/usr/local/etc/usr/etc/usr/local/etc/user/usr/etc/userdaemonsoptionsexclusivetmprc_dirfd;tm(dĎ X0tP| <8<t`Ȕ @0Xȕ<(\\ @d 4,h8|X|<ء 4 @T H  0 t ̩ P DL t 0 X 0 з й p$ ̻` X t ̼  p0P̾t L(l4,\|hL`(  XdD 4<Pl< th(PX8zRx d0,< @`A BTd4DG(C8AL AE(@BKAA 0XA0BR ,d0A CG$PphA CS A $xLA CL A $ԋHA BL A <A BK@ AA"!B DBBCU@0\|AA"!B DBBCO tDA BM xA BE A $HA BH A $(@A BF A 4 @TAC DBJ4D\pA@E P@E4|A@BBCV A 0 A@F |@D4PAABEBH$ TA0BDMH< $\44E DB@$$P<ACBH0dA@BBDN A   $$0ЖA0ABbXD$0lTA@DT A 4AKИ4AK,A C_ B E `\A0BQ A 4ACBh(X0APABEn48ApA BFC@ACDR A Q A $@ACBy$(A@AB(PA@ABDd(|A0BDO A ,,A0CF A $XA BP A < ApA BE C4@ApA BEBn$xA@ABe@`BA G BBB$0AABc$ AABc 4 A BM A ,X AABF|$ ̬A@ABc8 D\ApA BFL0 dA@BCBX A  AE @ XA0BR d PA0BP0 TAABFJ 8 AC 8<A BK, P8ApCDE40 XA`A BFr,h A`ABEB{< AC F r AD ( A@BBR A 88 8ApA BGBt , A`ABD`, h`A0BF A M, A@BBZ A $ HA BH A (@ A@ABDa4l AP DBs0 HPB0BCE A F8 dPD@BCBY A m$xXA0CQ@<HA@CCZ A a A M(A0BBM A 4A0CQ A M A @ A` H! `G,(tLAPBBFG<XAA BG ,0A0BDY A ,A0CF A <A` B BCCBI A ,8B@CCe@hA@BBBR A  A PAB C B CB` A {88AP BBBCX A 4<A@BBDJ A <txAA BH ,4APABFB(XA0CL A  $ 8 HAP@X4AA B CFU A $x A DC A <p@ AC F /,/dns:.FA>UJN.6:FA>JU N\œ'ʜМGGz P' PXo h   h o$0'# %`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`' |librc.so.1.debugWw.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink $ox( hh0  8BBhh L0'0' VP'P'G`'`'P\..i bhȘȘpȠȠt~@@PPXX``  XXXXpELF|@@8 @@@@\\\T)T)hhh  888$$Ptdp'p'p'TTQtdRtdhhhGNU[RF8cըYpV/lib/ld-musl-aarch64.so.17@78 ycqUE\" ( L =B %j,L^ 7t z !__cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_mainmallocstderrfputsexitstrdup__stack_chk_guardstrrchreerrorxaccess__errno_location__stack_chk_failopenatstrerrorstrtokfreeumaskfstatmemsetreadlinkatclosemkdirateerrormkfifoatfchmodfchownprintfstrsepgeteuidgetgidoptarggetopt_longoptindstrtoulstrchrsscanfgetpwuidgetgrgidgetpwnamgetgrnamsetenvrc_sysputcharrc_set_userstrlenlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo  &4(08@HPX ` h p x!"#$%' (()0*8+@,H-P.X/`0h1p2x3456hGDDDDDDa{{_{G8    G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> {c*GS[ks @I;@Rr@9G%0.@RR) B*.1TG@?kkT R&s`B))t@Rq,TPq,TqTq T q T RgTQqT! !X`x`! 5RuR @@9?q(TR@!@9a5?)TgR"@.@H @ARy38`@94!\$qT3@4Z@94!\qaT3@ZZdZ 4"@.@hR/ R!"RzRw qT.@.4!Lh@RR!|"Rb@B_q T_qT!|"R!|G RURC5@:R>y@98A4_8?qT"@8_q`TT@959R~c@9*3@9*B)@q@s*9?k TG@@B@T_{D*SE[FcGkHsI_!/|ЄGA@cGG!?T!Ga_!!"A !ABGb_{ `@97G@G # R`9 @{¨_G@{! x{{ G@pg RE{_֠{@G@pX R6_{_{ C!G#S*[ck*s"@gRx7q`RrAzQ`@9qT,@AR04@qAT45!Gg@"@cҠ/TR` *1 T,@@n qZ@95`#H'#q@`T_qT@@**1!TR*50Xt q`TqTqT x@2*o@***1aT,@@"d yRQ'@**1T,@@ c@91T,@t@@ [@ (@qTc@4,@ F?@v@ @R6@@*I?@T,@d @*oqt*jl@ZQ* *}D **1T'@DqT3,@  **#1!T@DqT3,@( #*1AT@ [@  q T@qT *q T @qT qT@qTT 94!,?kT q@T_@?qT,@ (@qT,@ **T`4,@@>@ 6@c@kT#@g@k T q@T_@qT,@,[@ (@qT,@@Z@*#@*`4,@@ *R @qAT{MSN[OcPkQsR_{GS[s%cֺkws @  @@ Rr,@! p!0!@pb@b@`@cg9Qxq` #{`*@ G@pJ R({ Cs"FqTR!KR{{_out of memory %s: empty or relative path/%s: unable to open the root directory: %s%s: %s: could not open %s: %s%s: %s: unable to stat %s: %s%s: %s: symbolic link %s not owned by root%s: symbolic link destination changed%s: creating file%s: creating directory%s: mkdirat: %s%s: creating fifo%s: mkfifo: %s%s: open: %sfstat: %s: %s%s: is a directory%s: is a file%s: is a fifo%s: chmod: Too many hard links to %s%s: chmod: %s is a symbolic link%s: correcting mode%s: chmod: %s%s: chown: Too many hardlinks to %s%s: chown: %s is a symbolic link%s: correcting owner%s: chown: %sUsage: %s [options] path1 [path2] [...] Options: [ %s ] %3s --%s %s%*s%s: invalid mode '%s'%d%s: owner '%s' not foundNOEINFO_COLOR%s (OpenRC [%s]0.63.2) %sYESEINFO_VERBOSEEINFO_QUIETEERROR_QUIETCreate a directory if not existsCreate/empty directoryCreate a file if not existsTruncate fileCreate a named pipe (FIFO) if not existsMode to checkOwner to check (user:group)follow symbolic links (irrelevant on linux)Check whether the path is writable or notDisplay this help outputDisable color outputDisplay software versionRun verboselyRun quietly (repeat to suppress errors)Run in user mode[arg]directory-truncatefile-truncatepipesymlinkswritablehelpnocolorverbosequietuser_R\ztdDfFpm:o:sWChqVvU;T PPlP$hzRx 0,< @ `A BTd\4DGp8AL(@BKAA@AA H CDB0TAA E CCBC@HAA BG #,=#d&DP#f&F&p#m$o&s&W&h&CT&V&v&q'U %+%B%^%l%%%%%&.&C&\&j&&  !hpox R P0 X  o$#(%-!n$&&checkpath.debugxd8.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 X8R@X X JB0 0 PT(^Od  j!!p!!xp'p'T''hhppxxx    H 4ELF @@8 @@@@\\\\\XXX  888$$Ptdlll44QtdRtdXXXGNU n]{.5EF/lib/ld-musl-aarch64.so.1@ "  ( B 5^ t z ` __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchreerrorxgetenvrc_yesnorc_set_userrc_service_statestrcmpsscanfrc_service_started_daemon__stack_chk_failrc_service_daemons_crashed__errno_locationlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  08@HPX ` h p xXWUX{{_{G<    G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {CS[c*G4@+@R@"q-Tt@t@9@5"@55P6@61*"@Ҡ~|hw5 @5!6 55~t@qTsA!6@Ҝ*&T?j R!G@"@c TjT` @!6xqTt@!6u@5z 6{@4q<7+@{ASB[CcD_!3|GA@cGG_       ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G: R`"9 @{¨_G@{!@: {{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESservice_started_daemon%dservice_crashed%s: unknown appletservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failed;0tH$\`pzRx 0,< @`A BTd$4DG4$A`A BCE|,  $5H\ FQ_  ` X`ox   o$#%v ` service_stopping.debugUru.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 @8@JBT^O d  j` ` p2p p xll4XX``hh @$ . .. msdos.ko.gz  vfat.ko.gz fat.ko.gz '}ELF @@8 @@@@\\\\\XXX  888$$Ptdlll44QtdRtdXXXGNU n]{.5EF/lib/ld-musl-aarch64.so.1@ "  ( B 5^ t z ` __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchreerrorxgetenvrc_yesnorc_set_userrc_service_statestrcmpsscanfrc_service_started_daemon__stack_chk_failrc_service_daemons_crashed__errno_locationlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  08@HPX ` h p xXWUX{{_{G<    G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {CS[c*G4@+@R@"q-Tt@t@9@5"@55P6@61*"@Ҡ~|hw5 @5!6 55~t@qTsA!6@Ҝ*&T?j R!G@"@c TjT` @!6xqTt@!6u@5z 6{@4q<7+@{ASB[CcD_!3|GA@cGG_       ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G: R`"9 @{¨_G@{!@: {{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESservice_started_daemon%dservice_crashed%s: unknown appletservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failed;0tH$\`pzRx 0,< @`A BTd$4DG4$A`A BCE|,  $5H\ FQ_  ` X`ox   o$#%v ` service_wasinactive.debugUru.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 @8@JBT^O d  j` ` p2p p xll4XX``hh @ (ELF@@8 @@@@\\\D D ppp888$$PtdPPP44QtdRtdpppGNU>ImUh2Z /lib/ld-musl-aarch64.so.1 @  . "U m 6   @_init_fini__cxa_finalize__libc_start_mainputcharisalnumlibc.musl-aarch64.so.1__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info   p {{_{G>    G"> GB> Gb> G> G> G> {[*c RS3k,T@RRSA[BcC{Ĩ_{s`TR@9t5s*q!6|GA@cGG      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G " R`"9 @{¨_G@{!@ "{{{_;4L `\tzRx 0,< @`A BTd4DG4PA@BBCJ A >  @pxox px o$#%`@shell_var.debugd%.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 88@xJBT^Od`` j@@pPP4~ppxxpp8ELF@@8 @@@@\\\P888$$Ptd44QtdRtd88GNUk+f\ǁ/lib/ld-musl-aarch64.so.19@9: H6"Mo<, ( vP B }\i%c^ t Hz __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchrstrcmpecolorprintfexit__errno_locationstrtoimaxeerrorxstrchrmemcpyatoistrcasecmpunsetenvgettimeofdayebeginvaccessnanosleepeendv__stack_chk_failopen_memstreamstderrfputsfputcfflushferrorfcloseelogeindenteoutdenteindentveoutdentveerrorfreeeinfonewarnewarnneerrornebegineendewendeinfoveinfovnewarnvewarnvnewendvlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo08@H P X `hpx#$%+,67 ( 0 8 @ HPX`hpx !"&'()*-./0123457 8VUU{{_{F7    G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< {[Sck*G@@R@"!@05@R`RRRR Rt0BR5QqT!14!14!1~@4!1y4A1u 5@R!@`@94R`4R`@55 QB@A1\ 5j@V43P!1P4!1K@5@Rk@@2;#! @9Q$qTJ1T qT@|2sBa@`5` @`25Q @`2b"RRu5@[34 &k-TzszsR  41TcqmT@@?T@@?য়@5Zs R!36RG@@BTs|q-TC#ҙ G@3 R;RzvkT@55@!t44!44!44!44!44`4!P4@4!4 4!14!14!1@5@*R!3K!p4y 4!4t 4!4o 4!4j` 4!4e@ 4!1` 4!1[ 4! 5V`50!05O`5!5H`5.!,5A`5 T54RЄG@ 3?@*ZDЄGЄGЄGЄGЄGЄGcGcGЄGЄGЄGЄGЄGcGvcGs*!3`?־Ҁ?ֺ#*`?ֵ{R*SS[TcUkV_!`/|ЄGA@cGG       `!`?T!Ga_`!`!"A !ABGb_{ `bC97G@ZG`7s R`b9 @{¨_G@{!`7{{{_eval_ecolorsGOOD='%s' WARN='%s' BAD='%s' HILITE='%s' BRACKET='%s' NORMAL='%s' veendvewendewaitfileesyslogelog%s: invalid log level `%s'%s: not enough argumentsEINFO_LOG%s: invalid timeoutWaiting for %stimed out waiting for %sout of memory eerroreerrornveinfoveinfonvewarnvewarnnvebeginveindentveoutdent%s: unknown appletalertcritdebugemergerrnonenoticepanicwarning;4@`L`t,zRx  0,(< @P`A BTd4DG8AA BDl  H ox0 V x  ( o$(# %1`````````````````````````````````````Hhnsy-vebegin.debug!.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 800V@ (JB xT(( ^HHO``pd jp2x4@ELF@@8 @@@@\\\P888$$Ptd44QtdRtd88GNUk+f\ǁ/lib/ld-musl-aarch64.so.19@9: H6"Mo<, ( vP B }\i%c^ t Hz __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchrstrcmpecolorprintfexit__errno_locationstrtoimaxeerrorxstrchrmemcpyatoistrcasecmpunsetenvgettimeofdayebeginvaccessnanosleepeendv__stack_chk_failopen_memstreamstderrfputsfputcfflushferrorfcloseelogeindenteoutdenteindentveoutdentveerrorfreeeinfonewarnewarnneerrornebegineendewendeinfoveinfovnewarnvewarnvnewendvlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo08@H P X `hpx#$%+,67 ( 0 8 @ HPX`hpx !"&'()*-./0123457 8VUU{{_{F7    G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< {[Sck*G@@R@"!@05@R`RRRR Rt0BR5QqT!14!14!1~@4!1y4A1u 5@R!@`@94R`4R`@55 QB@A1\ 5j@V43P!1P4!1K@5@Rk@@2;#! @9Q$qTJ1T qT@|2sBa@`5` @`25Q @`2b"RRu5@[34 &k-TzszsR  41TcqmT@@?T@@?য়@5Zs R!36RG@@BTs|q-TC#ҙ G@3 R;RzvkT@55@!t44!44!44!44!44`4!P4@4!4 4!14!14!1@5@*R!3K!p4y 4!4t 4!4o 4!4j` 4!4e@ 4!1` 4!1[ 4! 5V`50!05O`5!5H`5.!,5A`5 T54RЄG@ 3?@*ZDЄGЄGЄGЄGЄGЄGcGcGЄGЄGЄGЄGЄGcGvcGs*!3`?־Ҁ?ֺ#*`?ֵ{R*SS[TcUkV_!`/|ЄGA@cGG       `!`?T!Ga_`!`!"A !ABGb_{ `bC97G@ZG`7s R`b9 @{¨_G@{!`7{{{_eval_ecolorsGOOD='%s' WARN='%s' BAD='%s' HILITE='%s' BRACKET='%s' NORMAL='%s' veendvewendewaitfileesyslogelog%s: invalid log level `%s'%s: not enough argumentsEINFO_LOG%s: invalid timeoutWaiting for %stimed out waiting for %sout of memory eerroreerrornveinfoveinfonvewarnvewarnnvebeginveindentveoutdent%s: unknown appletalertcritdebugemergerrnonenoticepanicwarning;4@`L`t,zRx  0,(< @P`A BTd4DG8AA BDl  H ox0 V x  ( o$(# %1`````````````````````````````````````Hhnsy-veend.debug!.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 800V@ (JB xT(( ^HHO``pd jp2x4@ELF@@8 @@@@\\\P888$$Ptd44QtdRtd88GNUk+f\ǁ/lib/ld-musl-aarch64.so.19@9: H6"Mo<, ( vP B }\i%c^ t Hz __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchrstrcmpecolorprintfexit__errno_locationstrtoimaxeerrorxstrchrmemcpyatoistrcasecmpunsetenvgettimeofdayebeginvaccessnanosleepeendv__stack_chk_failopen_memstreamstderrfputsfputcfflushferrorfcloseelogeindenteoutdenteindentveoutdentveerrorfreeeinfonewarnewarnneerrornebegineendewendeinfoveinfovnewarnvewarnvnewendvlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo08@H P X `hpx#$%+,67 ( 0 8 @ HPX`hpx !"&'()*-./0123457 8VUU{{_{F7    G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< {[Sck*G@@R@"!@05@R`RRRR Rt0BR5QqT!14!14!1~@4!1y4A1u 5@R!@`@94R`4R`@55 QB@A1\ 5j@V43P!1P4!1K@5@Rk@@2;#! @9Q$qTJ1T qT@|2sBa@`5` @`25Q @`2b"RRu5@[34 &k-TzszsR  41TcqmT@@?T@@?য়@5Zs R!36RG@@BTs|q-TC#ҙ G@3 R;RzvkT@55@!t44!44!44!44!44`4!P4@4!4 4!14!14!1@5@*R!3K!p4y 4!4t 4!4o 4!4j` 4!4e@ 4!1` 4!1[ 4! 5V`50!05O`5!5H`5.!,5A`5 T54RЄG@ 3?@*ZDЄGЄGЄGЄGЄGЄGcGcGЄGЄGЄGЄGЄGcGvcGs*!3`?־Ҁ?ֺ#*`?ֵ{R*SS[TcUkV_!`/|ЄGA@cGG       `!`?T!Ga_`!`!"A !ABGb_{ `bC97G@ZG`7s R`b9 @{¨_G@{!`7{{{_eval_ecolorsGOOD='%s' WARN='%s' BAD='%s' HILITE='%s' BRACKET='%s' NORMAL='%s' veendvewendewaitfileesyslogelog%s: invalid log level `%s'%s: not enough argumentsEINFO_LOG%s: invalid timeoutWaiting for %stimed out waiting for %sout of memory eerroreerrornveinfoveinfonvewarnvewarnnvebeginveindentveoutdent%s: unknown appletalertcritdebugemergerrnonenoticepanicwarning;4@`L`t,zRx  0,(< @P`A BTd4DG8AA BDl  H ox0 V x  ( o$(# %1`````````````````````````````````````Hhnsy-veindent.debug!.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 800V@ (JB xT(( ^HHO``pd jp2x4@ELF@@8 @@@@\\\P888$$Ptd44QtdRtd88GNUk+f\ǁ/lib/ld-musl-aarch64.so.19@9: H6"Mo<, ( vP B }\i%c^ t Hz __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchrstrcmpecolorprintfexit__errno_locationstrtoimaxeerrorxstrchrmemcpyatoistrcasecmpunsetenvgettimeofdayebeginvaccessnanosleepeendv__stack_chk_failopen_memstreamstderrfputsfputcfflushferrorfcloseelogeindenteoutdenteindentveoutdentveerrorfreeeinfonewarnewarnneerrornebegineendewendeinfoveinfovnewarnvewarnvnewendvlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo08@H P X `hpx#$%+,67 ( 0 8 @ HPX`hpx !"&'()*-./0123457 8VUU{{_{F7    G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< {[Sck*G@@R@"!@05@R`RRRR Rt0BR5QqT!14!14!1~@4!1y4A1u 5@R!@`@94R`4R`@55 QB@A1\ 5j@V43P!1P4!1K@5@Rk@@2;#! @9Q$qTJ1T qT@|2sBa@`5` @`25Q @`2b"RRu5@[34 &k-TzszsR  41TcqmT@@?T@@?য়@5Zs R!36RG@@BTs|q-TC#ҙ G@3 R;RzvkT@55@!t44!44!44!44!44`4!P4@4!4 4!14!14!1@5@*R!3K!p4y 4!4t 4!4o 4!4j` 4!4e@ 4!1` 4!1[ 4! 5V`50!05O`5!5H`5.!,5A`5 T54RЄG@ 3?@*ZDЄGЄGЄGЄGЄGЄGcGcGЄGЄGЄGЄGЄGcGvcGs*!3`?־Ҁ?ֺ#*`?ֵ{R*SS[TcUkV_!`/|ЄGA@cGG       `!`?T!Ga_`!`!"A !ABGb_{ `bC97G@ZG`7s R`b9 @{¨_G@{!`7{{{_eval_ecolorsGOOD='%s' WARN='%s' BAD='%s' HILITE='%s' BRACKET='%s' NORMAL='%s' veendvewendewaitfileesyslogelog%s: invalid log level `%s'%s: not enough argumentsEINFO_LOG%s: invalid timeoutWaiting for %stimed out waiting for %sout of memory eerroreerrornveinfoveinfonvewarnvewarnnvebeginveindentveoutdent%s: unknown appletalertcritdebugemergerrnonenoticepanicwarning;4@`L`t,zRx  0,(< @P`A BTd4DG8AA BDl  H ox0 V x  ( o$(# %1`````````````````````````````````````Hhnsy-veinfo.debug!.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 800V@ (JB xT(( ^HHO``pd jp2x4@ELF@@8 @@@@\\\P888$$Ptd44QtdRtd88GNUk+f\ǁ/lib/ld-musl-aarch64.so.19@9: H6"Mo<, ( vP B }\i%c^ t Hz __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchrstrcmpecolorprintfexit__errno_locationstrtoimaxeerrorxstrchrmemcpyatoistrcasecmpunsetenvgettimeofdayebeginvaccessnanosleepeendv__stack_chk_failopen_memstreamstderrfputsfputcfflushferrorfcloseelogeindenteoutdenteindentveoutdentveerrorfreeeinfonewarnewarnneerrornebegineendewendeinfoveinfovnewarnvewarnvnewendvlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo08@H P X `hpx#$%+,67 ( 0 8 @ HPX`hpx !"&'()*-./0123457 8VUU{{_{F7    G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< {[Sck*G@@R@"!@05@R`RRRR Rt0BR5QqT!14!14!1~@4!1y4A1u 5@R!@`@94R`4R`@55 QB@A1\ 5j@V43P!1P4!1K@5@Rk@@2;#! @9Q$qTJ1T qT@|2sBa@`5` @`25Q @`2b"RRu5@[34 &k-TzszsR  41TcqmT@@?T@@?য়@5Zs R!36RG@@BTs|q-TC#ҙ G@3 R;RzvkT@55@!t44!44!44!44!44`4!P4@4!4 4!14!14!1@5@*R!3K!p4y 4!4t 4!4o 4!4j` 4!4e@ 4!1` 4!1[ 4! 5V`50!05O`5!5H`5.!,5A`5 T54RЄG@ 3?@*ZDЄGЄGЄGЄGЄGЄGcGcGЄGЄGЄGЄGЄGcGvcGs*!3`?־Ҁ?ֺ#*`?ֵ{R*SS[TcUkV_!`/|ЄGA@cGG       `!`?T!Ga_`!`!"A !ABGb_{ `bC97G@ZG`7s R`b9 @{¨_G@{!`7{{{_eval_ecolorsGOOD='%s' WARN='%s' BAD='%s' HILITE='%s' BRACKET='%s' NORMAL='%s' veendvewendewaitfileesyslogelog%s: invalid log level `%s'%s: not enough argumentsEINFO_LOG%s: invalid timeoutWaiting for %stimed out waiting for %sout of memory eerroreerrornveinfoveinfonvewarnvewarnnvebeginveindentveoutdent%s: unknown appletalertcritdebugemergerrnonenoticepanicwarning;4@`L`t,zRx  0,(< @P`A BTd4DG8AA BDl  H ox0 V x  ( o$(# %1`````````````````````````````````````Hhnsy-veoutdent.debug!.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 800V@ (JB xT(( ^HHO``pd jp2x4@ELF@@8 @@@@\\\P888$$Ptd44QtdRtd88GNUk+f\ǁ/lib/ld-musl-aarch64.so.19@9: H6"Mo<, ( vP B }\i%c^ t Hz __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchrstrcmpecolorprintfexit__errno_locationstrtoimaxeerrorxstrchrmemcpyatoistrcasecmpunsetenvgettimeofdayebeginvaccessnanosleepeendv__stack_chk_failopen_memstreamstderrfputsfputcfflushferrorfcloseelogeindenteoutdenteindentveoutdentveerrorfreeeinfonewarnewarnneerrornebegineendewendeinfoveinfovnewarnvewarnvnewendvlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo08@H P X `hpx#$%+,67 ( 0 8 @ HPX`hpx !"&'()*-./0123457 8VUU{{_{F7    G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< {[Sck*G@@R@"!@05@R`RRRR Rt0BR5QqT!14!14!1~@4!1y4A1u 5@R!@`@94R`4R`@55 QB@A1\ 5j@V43P!1P4!1K@5@Rk@@2;#! @9Q$qTJ1T qT@|2sBa@`5` @`25Q @`2b"RRu5@[34 &k-TzszsR  41TcqmT@@?T@@?য়@5Zs R!36RG@@BTs|q-TC#ҙ G@3 R;RzvkT@55@!t44!44!44!44!44`4!P4@4!4 4!14!14!1@5@*R!3K!p4y 4!4t 4!4o 4!4j` 4!4e@ 4!1` 4!1[ 4! 5V`50!05O`5!5H`5.!,5A`5 T54RЄG@ 3?@*ZDЄGЄGЄGЄGЄGЄGcGcGЄGЄGЄGЄGЄGcGvcGs*!3`?־Ҁ?ֺ#*`?ֵ{R*SS[TcUkV_!`/|ЄGA@cGG       `!`?T!Ga_`!`!"A !ABGb_{ `bC97G@ZG`7s R`b9 @{¨_G@{!`7{{{_eval_ecolorsGOOD='%s' WARN='%s' BAD='%s' HILITE='%s' BRACKET='%s' NORMAL='%s' veendvewendewaitfileesyslogelog%s: invalid log level `%s'%s: not enough argumentsEINFO_LOG%s: invalid timeoutWaiting for %stimed out waiting for %sout of memory eerroreerrornveinfoveinfonvewarnvewarnnvebeginveindentveoutdent%s: unknown appletalertcritdebugemergerrnonenoticepanicwarning;4@`L`t,zRx  0,(< @P`A BTd4DG8AA BDl  H ox0 V x  ( o$(# %1`````````````````````````````````````Hhnsy-vewarn.debug!.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 800V@ (JB xT(( ^HHO``pd jp2x4@ELF@@8 @@@@\\\P888$$Ptd44QtdRtd88GNUk+f\ǁ/lib/ld-musl-aarch64.so.19@9: H6"Mo<, ( vP B }\i%c^ t Hz __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardstrrchrstrcmpecolorprintfexit__errno_locationstrtoimaxeerrorxstrchrmemcpyatoistrcasecmpunsetenvgettimeofdayebeginvaccessnanosleepeendv__stack_chk_failopen_memstreamstderrfputsfputcfflushferrorfcloseelogeindenteoutdenteindentveoutdentveerrorfreeeinfonewarnewarnneerrornebegineendewendeinfoveinfovnewarnvewarnvnewendvlibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo08@H P X `hpx#$%+,67 ( 0 8 @ HPX`hpx !"&'()*-./0123457 8VUU{{_{F7    G8 G"8  GB8 Gb8 G8 G8 G8 G8 "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< {[Sck*G@@R@"!@05@R`RRRR Rt0BR5QqT!14!14!1~@4!1y4A1u 5@R!@`@94R`4R`@55 QB@A1\ 5j@V43P!1P4!1K@5@Rk@@2;#! @9Q$qTJ1T qT@|2sBa@`5` @`25Q @`2b"RRu5@[34 &k-TzszsR  41TcqmT@@?T@@?য়@5Zs R!36RG@@BTs|q-TC#ҙ G@3 R;RzvkT@55@!t44!44!44!44!44`4!P4@4!4 4!14!14!1@5@*R!3K!p4y 4!4t 4!4o 4!4j` 4!4e@ 4!1` 4!1[ 4! 5V`50!05O`5!5H`5.!,5A`5 T54RЄG@ 3?@*ZDЄGЄGЄGЄGЄGЄGcGcGЄGЄGЄGЄGЄGcGvcGs*!3`?־Ҁ?ֺ#*`?ֵ{R*SS[TcUkV_!`/|ЄGA@cGG       `!`?T!Ga_`!`!"A !ABGb_{ `bC97G@ZG`7s R`b9 @{¨_G@{!`7{{{_eval_ecolorsGOOD='%s' WARN='%s' BAD='%s' HILITE='%s' BRACKET='%s' NORMAL='%s' veendvewendewaitfileesyslogelog%s: invalid log level `%s'%s: not enough argumentsEINFO_LOG%s: invalid timeoutWaiting for %stimed out waiting for %sout of memory eerroreerrornveinfoveinfonvewarnvewarnnvebeginveindentveoutdent%s: unknown appletalertcritdebugemergerrnonenoticepanicwarning;4@`L`t,zRx  0,(< @P`A BTd4DG8AA BDl  H ox0 V x  ( o$(# %1`````````````````````````````````````Hhnsy-vewend.debug!.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 800V@ (JB xT(( ^HHO``pd jp2x4@ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_crashed.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @ (ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_failed.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @ (ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_hotplugged.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @$,ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_inactive.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @ (ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_started.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @ (ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_starting.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @ (ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_stopped.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @ (ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_stopping.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @ (ELFH @@8 @@@@\\\HHH  888$$Ptd44QtdRtdHHHGNU*&r!BӜ /lib/ld-musl-aarch64.so.1@ &" ( B  ^ t z __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvstrrchreerrorxrc_yesnorc_set_userstrncmpstrcmprc_service_mark__stack_chk_failsscanfkill__errno_locationstrerroreerrorlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  (08@H P X ` h pxHWUb{{_{Gb<    G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> G> G> {C[*GSc+@6@R@"q-T@t@956P7@6"@!75b1`~|hu5a @!57s&ATmd@zAT!G`R@"@cTx57a!08qAT@ARo4@"@@M*<8O+@{ASB[CcD_!3|GA@cGGj      ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@G< R`"9 @{¨_G@{!@<,{{{_RC_SVCNAME%s: no service specifiedRC_USER_SERVICESmark_%s: unknown appletRC_OPENRC_PID%d%s: failed to signal parent %d: %sservice_startedservice_stoppedservice_inactiveservice_startingservice_stoppingservice_hotpluggedservice_wasinactiveservice_failedservice_crashed;0H\@pzRx 0,< @`A BTd4DG4A`A BDCnl 2BRct-8F  HPox  0 o$#%]                  ` mark_service_wasinactive.debuga.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 p8@JB00T^O  @d` ` @ j p2 x4HHPPXX @$,ELF@@8 @@@@\\\\ \    000888$$Ptd 44QtdRtd  GNU (ڀ-Vj/lib/ld-musl-aarch64.so.1@ X" ( B ^ t Xz @ __cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guardgetenvsscanfkill__errno_locationstrerroreerrorx__stack_chk_faillibeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   X`hpx    @,{{_{GB=    Gb= G= G= G= G= G> G"> GB> Gb> G> G> G{@@)S!\)qT@AR4@@@h) R!G@"@c@T{B_!4|GA@cGG    ! ?T!Ga_ ! !"A !ABGb_{ `"@97G@vG*{ R`"9 @{¨_G@{!@*{{{_RC_PID%drc-abort: failed to signal parent %d: %s;0H\(pzRx l0,< @`A BTd4DGA0Cg  X @  (oxp 4 @8 o$@#%ppppppppppp0X@@ rc-abort.debug.shstrtab.note.gnu.build-id.interp.gnu.hash.dynsym.dynstr.rela.dyn.rela.plt.relr.dyn.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.data.bss.gnu_debuglink 88$\\&oxx,0 8pp4@JB88T@@^XXOppd@@ j@ @ p2P P 3x 4   ((00@@8ELF@@8 @@@@\\\==  888$$Ptd:::ddQtdRtdhhGNU\pgC|!}߲,/lib/ld-musl-aarch64.so.14@45 ~N0"ZiF ( +pB !a(:5w/^ At z 5__cxa_finalize__deregister_frame_info_ITM_registerTMCloneTable_ITM_deregisterTMCloneTable__register_frame_info_init_fini__libc_start_main__stack_chk_guard__stack_chk_failmemcpygetrandom__errno_locationreadopenatstrerroreerrorunlinkatfsyncclosememsetopenioctlprintfstrdupstderrfputsexitstrsepfreestrrchrgetopt_longgetuideerrorxoptargsetenvrc_sysputcharrc_set_userumaskclock_gettimemkdirflockewarnstrtoulpollstrncpywriterenameatlibrc.so.1libeinfo.so.1libc.musl-aarch64.so.1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeinfo %1@HPX`hp x    !" #($0&8'@(H)P*X+`,h-p.x/0123GDDD?1{{_{G8    "G9 &G"9 *GB9 .Gb9 2G9 6G9 :G9 >G9 BG: FG": JGB: NGb: RG: VG: ZG: ^G: bG; fG"; jGB; nGb; rG; vG; zG; ~G; G< G"< GB< Gb< G< G< G< G< G= G"= GB= Gb= G= G= G= G= G> G"> GB> Gb> {cS[*ks G@@_Rx@Д*Yg).R*@1ATssR@ 4.@qTTXqTT q`TTq T RqTRaq`TqTqT!DT"R SG@!"RY qT.@!0@RRgb@B_q T_qAT!D"R!D7RRȜ"aOl#AnA'O!`+a5a+=!|/R)Ag)!RCRҴC8R96@DqT.@tR*@6@.@AR7*R`1R*zS1AT2R sy9*` 6@.@m R 7 6@ss""R T@q!TR! !Ry6@Rql TD@>k@RRSBKC @"@T`T T T} B҅`BR7sC*#R!jq @R`*`7jTn@Kqs~@s*eKa@.@2!Ag)!.RR&!T8R_TrhBXA}BH"a* R"HR=*`6.@.@2"G_A@B@T@HT*@q`T@ T @.@2#sS*7x4*a*6@.@2{($ *SA[BcCkDsE{ƨ_! 0|ЄGA@cGG  !?T!Ga_!!"A !ABGb_{ `@97G@JG,c R`9 @{¨_G@{!,{{!GOS[cks"@occc#D)O@a+B4)@T@BT} @TcCT@}p@xA@}p@x@T@T@T#@Tx@