PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i5h-3LL

HOME


5h-3LL 1.0
DIR: /var/lib/dpkg/info
/var/lib/dpkg/info/
Upload File:
Current File : /var/lib/dpkg/info/grub-pc.postinst
#!/bin/bash
set -e

merge_debconf_into_conf()
{
  local tmpfile; tmpfile="$1"
  local setting; setting="$2"
  local template; template="$3"

  db_get "$template"
  local value; value="$(echo "$RET" | sed -e 's,[$`"\],\\&,g')"
  if grep -q "^${setting}=" "$tmpfile"; then
    value="$(echo "$value" | sed -e 's,[\@],\\&,g')"
    sed -i -re "s@^(${setting}=).*@\1\"${value}\"@" "$tmpfile"
  else
    echo >> "$tmpfile"
    echo "${setting}=\"${value}\"" >> "$tmpfile"
  fi
}

get_wubi_device()
{
  if [ ! -x /usr/share/lupin-support/grub-mkimage ] || \
     ! /usr/share/lupin-support/grub-mkimage --test; then
    return 1
  fi

  local bootdev="$(grub-probe --target=device /boot)" || true
  local loop_file=
  case $bootdev in
    /dev/loop/*|/dev/loop[0-9])
      loop_file="$(losetup "$bootdev" | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/")"
      # If it's loop-mounted from another device, it isn't Wubi.
      case $loop_file in
        /dev/*) return 1 ;;
      esac
    ;;
    *) return 1 ;;
  esac

  echo "$bootdev"
}

# This only works on a Linux system with udev running.  This is probably the
# vast majority of systems where we need any of this, though, and we fall
# back reasonably gracefully if we don't have it.
cached_available_ids=
available_ids()
{
  local id path

  if [ "$cached_available_ids" ]; then
    echo "$cached_available_ids"
    return
  fi

  [ -d /dev/disk/by-id ] || return
  cached_available_ids="$(
    for path in /dev/disk/by-id/*; do
      [ -e "$path" ] || continue
      printf '%s %s\n' "$path" "$(readlink -f "$path")"
    done | sort -k2 -s -u | cut -d' ' -f1
  )"
  echo "$cached_available_ids"
}

# Returns non-zero and no output if no mapping can be found.
device_to_id()
{
  local id
  for id in $(available_ids); do
    if [ "$(readlink -f "$id")" = "$(readlink -f "$1")" ]; then
      echo "$id"
      return 0
    fi
  done
  # Fall back to the plain device name if there's no by-id link for it.
  if [ -e "$1" ]; then
    echo "$1"
    return 0
  fi
  return 1
}

devices_to_ids()
{
  local device id ids
  ids=
  for device; do
    id="$(device_to_id "$device" || true)"
    if [ "$id" ]; then
      ids="${ids:+$ids, }$id"
    fi
  done
  echo "$ids"
}

all_disks()
{
  local id
  for id in $(available_ids); do
    case $id in
      *-part*) ;;
      *) echo "$id" ;;
    esac
  done
}

all_partitions()
{
  local id ids
  ids=
  for id in $(available_ids); do
    if [ "$id" != "$1" ] && [ "${id%-part*}" = "$1" ]; then
      ids="${ids:+$ids }$id"
    fi
  done
  echo "$ids"
}

# In order to determine whether we accidentally ran grub-install without
# upgrade-from-grub-legacy on versions older than 1.98+20100617-1, we need
# to be able to scan a disk to determine whether GRUB 2 was installed in its
# boot sector.  This is specific to i386-pc (but that's the only platform
# where we need it).
scan_grub2()
{
  if ! dd if="$1" bs=512 count=1 2>/dev/null | grep -aq GRUB; then
    # No version of GRUB is installed.
    return 1
  fi

  # The GRUB boot sector always starts with a JMP instruction.
  initial_jmp="$(dd if="$1" bs=2 count=1 2>/dev/null | od -Ax -tx1 | \
                 head -n1 | cut -d' ' -f2,3)"
  [ "$initial_jmp" ] || return 1
  initial_jmp_opcode="${initial_jmp%% *}"
  [ "$initial_jmp_opcode" = eb ] || return 1
  initial_jmp_operand="${initial_jmp#* }"
  case $initial_jmp_operand in
    47|4b|4c|63)
      # I believe this covers all versions of GRUB 2 up to the package
      # version where we gained a more explicit mechanism.  GRUB Legacy
      # always had 48 here.
      return 0
    ;;
  esac

  return 1
}

# for Linux
sysfs_size()
{
  local num_sectors sector_size size
  # Try to find out the size without relying on a partitioning tool being
  # installed. This isn't too hard on Linux 2.6 with sysfs, but we have to
  # try a couple of variants on detection of the sector size.
  if [ -e "$1/size" ]; then
    num_sectors="$(cat "$1/size")"
    sector_size=512
    if [ -e "$1/queue/logical_block_size" ]; then
      sector_size="$(cat "$1/queue/logical_block_size")"
    elif [ -e "$1/queue/hw_sector_size" ]; then
      sector_size="$(cat "$1/queue/hw_sector_size")"
    fi
    size="$(expr "$num_sectors" \* "$sector_size" / 1000 / 1000)"
  fi
  [ "$size" ] || size='???'
  echo "$size"
}

# for kFreeBSD
camcontrol_size()
{
  local num_sectors sector_size size=

  if num_sectors="$(camcontrol readcap "$1" -q -s -N)"; then
    sector_size="$(camcontrol readcap "$1" -q -b)"
    size="$(expr "$num_sectors" \* "$sector_size" / 1000 / 1000)"
  fi

  [ "$size" ] || size='???'
  echo "$size"
}

# Returns value in $RET, like a debconf command.
describe_disk()
{
  local disk id base size
  disk="$1"
  id="$2"

  model=
  case $(uname -s) in
    Linux)
      if which udevadm >/dev/null 2>&1; then
        size="$(sysfs_size "/sys$(udevadm info -n "$disk" -q path)")"
      else
        base="${disk#/dev/}"
        base="$(printf %s "$base" | sed 's,/,!,g')"
        size="$(sysfs_size "/sys/block/$base")"
      fi

      if which udevadm >/dev/null 2>&1; then
        model="$(udevadm info -n "$disk" -q property | sed -n 's/^ID_MODEL=//p')"
        if [ -z "$model" ]; then
          model="$(udevadm info -n "$disk" -q property | sed -n 's/^DM_NAME=//p')"
          if [ -z "$model" ]; then
            model="$(udevadm info -n "$disk" -q property | sed -n 's/^MD_NAME=//p')"
            if [ -z "$model" ] && which dmsetup >/dev/null 2>&1; then
              model="$(dmsetup info -c --noheadings -o name "$disk" 2>/dev/null || true)"
            fi
          fi
        fi
      fi
    ;;
    GNU/kFreeBSD)
      disk_basename=$(basename "$disk")
      size="$(camcontrol_size "$disk_basename")"
      model="$(camcontrol inquiry "$disk_basename" | sed -ne "s/^pass0: <\([^>]*\)>.*/\1/p")"
    ;;
  esac

  [ "$model" ] || model='???'

  db_subst grub-pc/disk_description DEVICE "$disk"
  db_subst grub-pc/disk_description SIZE "$size"
  db_subst grub-pc/disk_description MODEL "$model"
  db_metaget grub-pc/disk_description description
}

# Returns value in $RET, like a debconf command.
describe_partition()
{
  local disk part id path diskbase partbase size
  disk="$1"
  part="$2"
  id="$3"
  path="$4"

  if which udevadm >/dev/null 2>&1; then
    size="$(sysfs_size "/sys$(udevadm info -n "$part" -q path)")"
  else
    diskbase="${disk#/dev/}"
    diskbase="$(printf %s "$diskbase" | sed 's,/,!,g')"
    partbase="${part#/dev/}"
    partbase="$(printf %s "$partbase" | sed 's,/,!,g')"
    size="$(sysfs_size "/sys/block/$diskbase/$partbase")"
  fi

  db_subst grub-pc/partition_description DEVICE "$part"
  db_subst grub-pc/partition_description SIZE "$size"
  db_subst grub-pc/partition_description PATH "$path"
  db_metaget grub-pc/partition_description description
}

usable_partitions()
{
  local last_partition path partition partition_id

  last_partition=
  for path in / /boot /boot/grub; do
    partition="$(grub-probe -t device "$path" || true)"
    if [ -z "$partition" ] || [ "$partition" = "$last_partition" ]; then
      continue
    fi
    partition_id="$(device_to_id "$partition" || true)"
    echo "$path:$partition_id"
    last_partition="$partition"
  done | sort -t: -k2
}

get_mountpoint()
{
  local relpath boot_mountpoint

  relpath="$(grub-mkrelpath "$1")"
  boot_mountpoint="${1#$relpath}"
  echo "${boot_mountpoint:-/}"
}

config_item()
{
  for x in /etc/default/grub /etc/default/grub.d/*.cfg; do
    if [ -e "$x" ]; then
      . "$x"
    fi
  done
  if [ "$(eval echo "\${$1+set}")" = set ]; then
    eval echo "\$$1"
  else
    return
  fi
}

running_in_container()
{
  type running-in-container >/dev/null 2>&1 && running-in-container >/dev/null
}

run_grub_install()
{
    if ! grub-install $@ ; then
        echo "Failed: grub-install $@" >&2
        echo "WARNING: Bootloader is not properly installed, system may not be bootable" >&2
    fi
}

case "$1" in
  configure)
    . /usr/share/debconf/confmodule

    if dpkg --compare-versions "$2" lt-nl 1.99-1; then
      # Force dpkg to replace this directory with a symlink.
      if [ ! -L /usr/share/doc/grub-pc ] && [ -d /usr/share/doc/grub-pc ]; then
        if rmdir /usr/share/doc/grub-pc 2>/dev/null; then
          ln -sf grub-common /usr/share/doc/grub-pc
        fi
      fi
    fi

    devicemap_regenerated=

    if egrep -q '^[[:space:]]*post(inst|rm)_hook[[:space:]]*=[[:space:]]*(/sbin/|/usr/sbin/)?update-grub' /etc/kernel-img.conf 2>/dev/null; then
      echo 'Removing update-grub hooks from /etc/kernel-img.conf in favour of' >&2
      echo '/etc/kernel/ hooks.' >&2
      sed -ri /etc/kernel-img.conf -e '\%^[[:space:]]*post(inst|rm)_hook[[:space:]]*=[[:space:]]*(/sbin/|/usr/sbin/)?update-grub%d'
    fi

    case grub-pc in
      grub-pc)
        mkdir -p /boot/grub

        if test -e /boot/grub/device.map && ! test -e /boot/grub/core.img && \
           ! test -e /boot/grub/i386-pc/core.img; then
          # Looks like your device.map was generated by GRUB Legacy, which
          # used to generate broken device.map (see #422851).  Avoid the risk
          # by regenerating it.
          grub-mkdevicemap --no-floppy
          devicemap_regenerated=1
        fi
      ;;
    esac

    if test -z "$devicemap_regenerated" && test -s /boot/grub/device.map && \
       dpkg --compare-versions "$2" lt-nl 1.98+20100702-1 && \
       test "$(uname -s)" = Linux; then
      # Earlier versions of GRUB used unstable device names in device.map,
      # which caused a variety of problems.  There is some risk associated with
      # regenerating it (so we prompt the user if it's non-trivial), but on the
      # whole it's less risky to move to /dev/disk/by-id/.
      devicemap_lines="$(egrep -v '^[[:space:]]+#' /boot/grub/device.map | wc -l)"
      grub-mkdevicemap --no-floppy
      devicemap_regenerated=1
      if test "$devicemap_lines" != 1; then
        db_input critical grub2/device_map_regenerated || true
        db_go || true
      fi
    fi

    if test -z "$devicemap_regenerated" && \
       dpkg --compare-versions "$2" lt-nl 1.99~20101210-2 && \
       grep -qs /md-uuid- /boot/grub/device.map; then
      echo "Removing MD devices from device.map, since the BIOS cannot read from these." >&2
      sed -i '/\/md-uuid-/d' /boot/grub/device.map
    fi

    tmp_default_grub="$(mktemp -t grub.XXXXXXXXXX)"
    trap "rm -f ${tmp_default_grub}" EXIT
    cp -p /usr/share/grub/default/grub ${tmp_default_grub}

    merge_debconf_into_conf "$tmp_default_grub" GRUB_CMDLINE_LINUX grub2/linux_cmdline
    merge_debconf_into_conf "$tmp_default_grub" GRUB_CMDLINE_LINUX_DEFAULT grub2/linux_cmdline_default

    case grub-pc in
      grub-pc)
        merge_debconf_into_conf "$tmp_default_grub" GRUB_TIMEOUT grub-pc/timeout
        sed -i -e 's/^\(GRUB_TIMEOUT=\)"\([0-9][0-9]*\)"/\1\2/' "$tmp_default_grub"
        db_get grub-pc/hidden_timeout
        if [ "$RET" = false ]; then
          sed -i -e 's/^GRUB_HIDDEN_TIMEOUT=/#&/' "$tmp_default_grub"
        fi
      ;;
    esac

    ucf --three-way --debconf-ok --sum-file=/usr/share/grub/default/grub.md5sum ${tmp_default_grub} /etc/default/grub
    package="$(ucfq --with-colons /etc/default/grub | cut -d : -f 2)"
    if echo $package | grep -q "^grub-" ; then
      ucfr --force grub-pc /etc/default/grub
    else
      ucfr grub-pc /etc/default/grub
    fi

    case grub-pc in
      grub-pc)

        fix_mixed_system=
        if test -e /boot/grub/stage2 && test -e /boot/grub/menu.lst && \
           ! test -e /boot/grub/grub2-installed && \
           test -z "$UPGRADE_FROM_GRUB_LEGACY"; then
          # Unfortunately, it's still possible that the user upgraded fully
          # to GRUB 2 in some way other than running
          # upgrade-from-grub-legacy; perhaps they ran grub-install by hand
          # for some reason.  It's really quite difficult to detect this
          # situation, because the only difference between this and a
          # working chainloaded setup is that in this case grub-setup has
          # been run.  So, to try to tell the difference, we scan the boot
          # sectors of all disks for a GRUB 2 boot sector.  Hopefully this
          # won't cause too much to explode, since I can't think of a better
          # method.
          grub2_disks=
          for disk in $(all_disks); do
            if scan_grub2 "$disk"; then
              grub2_disks="${grub2_disks:+$grub2_disks }$(readlink -f "$disk")"
            fi
          done
          if [ "$grub2_disks" ]; then
            # No || true here; it's vital that the user sees this, and it's
            # better to throw an error than to do the wrong thing.
            db_subst grub-pc/mixed_legacy_and_grub2 DISKS "$grub2_disks"
            db_fset grub-pc/mixed_legacy_and_grub2 seen false
            db_input critical grub-pc/mixed_legacy_and_grub2
            db_go
            db_get grub-pc/mixed_legacy_and_grub2
            if [ "$RET" = true ]; then
              db_reset grub-pc/install_devices
              UPGRADE_FROM_GRUB_LEGACY=1
              fix_mixed_system=1
              # Fall through to normal installation logic.
            fi
          fi
        fi

        # Make sure that Wubi users never see confusing device prompts.
        # Wubi is a very specialised hack that does complicated things with
        # grub-install diversions to create an image that's chained from the
        # Windows boot loader to boot an operating system from a file on a
        # Windows file system.  In these circumstances, prompting for where
        # to install GRUB is not going to help anyone.
        wubi_device="$(get_wubi_device)" || true
        if [ "$wubi_device" ]; then
          db_set grub-pc/install_devices "$wubi_device"
          db_fset grub-pc/install_devices seen true
        fi

        if test -e /boot/grub/stage2 && test -e /boot/grub/menu.lst && \
           ! test -e /boot/grub/grub2-installed && \
           test -z "$UPGRADE_FROM_GRUB_LEGACY"; then
          db_get grub-pc/chainload_from_menu.lst
          if $RET ; then
            # Create core.img (but do not risk writing to MBR).
            # Using grub-probe instead of "(hd0)" avoids (UUID=) hack slowness
            # in case /boot/grub is not on (hd0) in device.map.
            echo "Generating core.img" >&2
            grub-install --target=i386-pc --no-floppy --grub-setup=/bin/true "$(grub-probe -t drive /boot/grub)" > /dev/null

            # Update menu.lst to reflect that:
            # - core.img is present now
            # - core.img has to be the first option
            echo "Saving menu.lst backup in /boot/grub/menu.lst_backup_by_grub2_postinst" >&2
            cp /boot/grub/menu.lst{,_backup_by_grub2_postinst}
            echo "Running update-grub Legacy to hook our core.img in it" >&2
            LET_US_TRY_GRUB_2=true /usr/lib/grub-legacy/update-grub 2>&1 | sed -e "s/^/    /g" >&2
            # We just hooked GRUB 2 in menu.lst; then also generate grub.cfg.
            touch /boot/grub/grub.cfg
          fi
        elif running_in_container; then
          # Skip grub-install in containers.
          :
        elif test -z "$2" || test -e /boot/grub/core.img || \
             test -e /boot/grub/i386-pc/core.img || \
             test "$UPGRADE_FROM_GRUB_LEGACY" || test "$wubi_device"; then
          question=grub-pc/install_devices
          priority=high
          device_map="$(grub-mkdevicemap -m - | grep -v '^(fd[0-9]\+)' || true)"
          devices="$(echo "$device_map" | cut -f2)"
          if dpkg --compare-versions "$2" lt 1.98+20100702-1 && \
             test "$(uname -s)" = Linux && [ -z "$wubi_device" ]; then
            # Migrate to new by-id naming scheme.
            db_get grub-pc/install_devices
            old_devices="$(echo "$RET" | sed 's/, / /g')"
            new_devices=
            # Common-case optimisation: if the list of devices is
            # identical to the LHS of grub-mkdevicemap's output, then
            # there's no point asking again; just install to all disks.
            # (This handles e.g. "(hd0)" with one disk.)
            if [ "$(echo "$device_map" | cut -f1 | sort)" = \
                 "$(echo "$old_devices" | xargs -n1 | sort)" ]; then
              new_devices="$(devices_to_ids $devices)"
              db_set grub-pc/install_devices "$new_devices"
            # Alternatively, we might be installing to a single partition
            # on a single disk, and we can deal with that too if there's
            # only one available disk and it has an appropriate partition.
            # This doesn't necessarily work for multiple disks because now
            # the order matters.
            elif [ "$(echo "$device_map" | wc -l)" = 1 ] && \
                 [ "$(echo "$old_devices" | wc -w)" = 1 ] && \
                 echo "$old_devices" | grep -q ,; then
              old_device="${old_devices#(}"
              old_device="${old_device%)}"
              old_disk="${old_device%,*}"
              old_partition="${old_device##*,}"
              new_device="$(echo "$device_map" | grep "^($old_disk)" | \
                            cut -f2)"
              new_device="$(device_to_id $new_device)"
              if [ "$new_device" ]; then
                new_device="$new_device-part$old_partition"
                # Run through device_to_id again to check for existence.
                new_device="$(device_to_id $new_device)"
              fi
              if [ "$new_device" ]; then
                new_devices="$new_device"
                db_set grub-pc/install_devices "$new_device"
              fi
            fi
            if [ -z "$new_devices" ]; then
              new_devices="$(devices_to_ids $old_devices)"
              db_set grub-pc/install_devices "$new_devices"
              # Common-case optimisation: if all devices are translatable
              # to by-id and the number of devices there is the same as
              # the number of devices GRUB can see, then there's no point
              # asking again.  (This handles e.g. "/dev/sda" with one
              # disk.)
              old_devices_count="$(echo "$old_devices" | wc -w)"
              new_devices_count="$(echo "$new_devices" | wc -w)"
              devices_count="$(echo "$devices" | wc -w)"
              if [ "$old_devices_count" != "$new_devices_count" ] || \
                 [ "$new_devices_count" != "$devices_count" ]; then
                db_fset grub-pc/install_devices seen false
                db_fset grub-pc/install_devices_empty seen false
              fi
            fi
          else
            db_get grub-pc/install_devices
            valid=1
            for device in $RET; do
              if [ ! -e "${device%,}" ]; then
                valid=0
                break
              fi
            done
            if [ "$valid" = 0 ]; then
              question=grub-pc/install_devices_disks_changed
              priority=critical
              db_set "$question" "$RET"
              db_fset "$question" seen false
              db_fset grub-pc/install_devices_empty seen false
            fi
          fi

          while :; do
            ids=
            descriptions=
            partitions="$(usable_partitions)"
            for device in $devices; do
              disk_id="$(device_to_id "$device" || true)"
              if [ "$disk_id" ]; then
                ids="${ids:+$ids, }$disk_id"
                describe_disk "$(readlink -f "$device")" "$disk_id"
                RET="$(printf %s "$RET" | sed 's/,/\\,/g')"
                descriptions="${descriptions:+$descriptions, }$RET"
                for partition_pair in $partitions; do
                  partition_id="${partition_pair#*:}"
                  if [ "${partition_id#$disk_id-part}" != "$partition_id" ]; then
                    ids="${ids:+$ids, }$partition_id"
                    describe_partition "$(readlink -f "$device")" "$(readlink -f "$partition_id")" "$partition_id" "$(get_mountpoint "${partition_pair%%:*}")"
                    RET="$(printf %s "$RET" | sed 's/,/\\,/g')"
                    descriptions="${descriptions:+$descriptions, }$RET"
                  fi
                done
              fi
            done
            # Some "partitions" may in fact be at the disk level, e.g. RAID.
            # List these as well if they haven't already been listed.
            for partition_pair in $partitions; do
              partition_id="${partition_pair#*:}"
              if [ "${partition_id#*-part}" = "$partition_id" ]; then
                case ", $ids, " in
                  ", $partition_id, ") ;;
                  *)
                    ids="${ids:+$ids, }$partition_id"
                    describe_disk "$(readlink -f "$partition_id")" "$partition_id"
                    RET="$(printf %s "$RET" | sed 's/,/\\,/g')"
                    descriptions="${descriptions:+$descriptions, }$RET"
                    ;;
                esac
              fi
            done
            db_subst "$question" RAW_CHOICES "$ids"
            db_subst "$question" CHOICES "$descriptions"
            db_input "$priority" "$question" || true
            db_go
            db_get "$question"
            failed_devices=
            for i in `echo $RET | sed -e 's/, / /g'` ; do
              real_device="$(readlink -f "$i")"
              if grub-install --target=i386-pc --force --no-floppy $real_device ; then
                # We just installed GRUB 2; then also generate grub.cfg.
                touch /boot/grub/grub.cfg
              else
                failed_devices="$failed_devices $real_device"
              fi
            done

            if [ "$question" != grub-pc/install_devices ]; then
              db_set grub-pc/install_devices "$RET"
              db_fset grub-pc/install_devices seen true
            fi

            if [ "$failed_devices" ]; then
              if [ "$UPGRADE_FROM_GRUB_LEGACY" ]; then
                db_subst grub-pc/install_devices_failed_upgrade FAILED_DEVICES "$failed_devices"
                db_fset grub-pc/install_devices_failed_upgrade seen false
                if db_input critical grub-pc/install_devices_failed_upgrade; then
                  db_go
                  db_get grub-pc/install_devices_failed_upgrade
                  if [ "$RET" = true ]; then
                    db_fset "$question" seen false
                    db_fset grub-pc/install_devices_failed_upgrade seen false
                    continue
                  else
                    exit 1
                  fi
                else
                  exit 1 # noninteractive
                fi
              else
                db_subst grub-pc/install_devices_failed FAILED_DEVICES "$failed_devices"
                db_fset grub-pc/install_devices_failed seen false
                if db_input critical grub-pc/install_devices_failed; then
                  db_go
                  db_get grub-pc/install_devices_failed
                  if [ "$RET" = true ]; then
                    break
                  else
                    db_fset "$question" seen false
                    db_fset grub-pc/install_devices_failed seen false
                    continue
                  fi
                else
                  break # noninteractive
                fi
              fi
            fi

            db_get grub-pc/install_devices
            if [ -z "$RET" ]; then
              # Reset the seen flag if the current answer is false, since
              # otherwise we'll loop with no indication of why.
              db_get grub-pc/install_devices_empty
              if [ "$RET" = false ]; then
                db_fset grub-pc/install_devices_empty seen false
              fi
              if db_input critical grub-pc/install_devices_empty; then
                db_go
                db_get grub-pc/install_devices_empty
                if [ "$RET" = true ]; then
                  break
                else
                  db_fset "$question" seen false
                  db_fset grub-pc/install_devices_empty seen false
                fi
              else
                break # noninteractive
              fi
            else
              break
            fi
          done
        fi

        # /boot/grub/ has more chances of being accessible by GRUB
        for i in /usr/share/grub/unicode.pf2 ; do
          if test -e $i ; then
            mkdir -p /boot/grub
            cp $i /boot/grub/
          fi
        done

        if [ "$fix_mixed_system" ]; then
          # These never contain any valuable information, and they aren't
          # useful for boot any more, since we just overwrote MBR/PBR.
          rm -f /boot/grub/{{xfs,reiserfs,e2fs,fat,jfs,minix}_stage1_5,stage{1,2}}
          # Remove marker file used to indicate that grub-install was run
          # rather than upgrade-from-grub-legacy.  Since stage2 has been
          # removed, we don't need this any more.
          rm -f /boot/grub/grub2-installed
        fi
      ;;

      grub-efi-ia32|grub-efi-amd64|grub-efi-ia64|grub-efi-arm|grub-efi-arm64)
        bootloader_id="$(config_item GRUB_DISTRIBUTOR | tr A-Z a-z | \
                         cut -d' ' -f1)"
        case $bootloader_id in
          kubuntu) bootloader_id=ubuntu ;;
        esac
        if [ "$bootloader_id" ] && [ -d "/boot/efi/EFI/$bootloader_id" ]; then
          case grub-pc in
            grub-efi-ia32)  target=i386-efi ;;
            grub-efi-amd64) target=x86_64-efi ;;
            grub-efi-ia64)  target=ia64-efi ;;
            grub-efi-arm)   target=arm-efi ;;
            grub-efi-arm64) target=arm64-efi ;;
          esac
          db_get grub2/force_efi_extra_removable
          if [ "$RET" = true ]; then
            FORCE_EXTRA_REMOVABLE="--force-extra-removable"
          fi
          run_grub_install --target="$target" "$FORCE_EXTRA_REMOVABLE"
        fi

        # /boot/grub/ has more chances of being accessible by GRUB
        for i in /usr/share/grub/unicode.pf2 ; do
          if test -e $i ; then
            mkdir -p /boot/grub
            cp $i /boot/grub/
          fi
        done
      ;;

      grub-ieee1275)
        case $(dpkg --print-architecture) in
          ppc64el)
            # Output may be empty; if so, just update the core image but
            # don't install it to any PReP partition.
            prep_bootdev="$(/usr/lib/grub/powerpc-ieee1275/prep-bootdev)"
            run_grub_install --target=powerpc-ieee1275 $prep_bootdev
          ;;
        esac
      ;;

      grub-yeeloong)
        run_grub_install --target=mipsel-loongson
      ;;

      grub-xen)
        # Install for x86_64 regardless of arch, since a 32-bit userspace can still boot with a 64-bit kernel.
        mkdir -p /boot/xen
        run_grub_install --target=x86_64-xen
        case $(dpkg --print-architecture) in
          i386)
            run_grub_install --target=i386-xen
          ;;
        esac
      ;;
    esac

    # If grub.cfg has been generated, update it.
    if test -e /boot/grub/grub.cfg && ! running_in_container; then
      update-grub 3>&-
    fi
  ;;
  abort-upgrade|abort-remove|abort-deconfigure)
  ;;
  *)
    echo "postinst called with unknown argument \`$1'" >&2
    exit 1
  ;;
esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.



exit 0