From 80e3559d0df2dd55fdef045b1435d8203f345955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erkan=20I=C5=9EIK?= Date: Mon, 10 Aug 2026 16:51:35 +0300 Subject: [PATCH] refactor: split huge jobs/mod.rs into modular files & modernize slideshow - Split src/jobs/mod.rs into specialized domain files under src/jobs/ (autologin, bootloader, execution, finish, keyboard, location, netinstall, network, partition, users) for better modularity and cleaner architecture. - Integrated chrono-tz and enabled serde features on chrono in Cargo.toml. - Added missing assets (remixicon font, icons, slides images/configs). - Integrated localized slideshow presentation directly into UI, reading configurations from TOML. - Updated Makefile to correctly target and install slideshow files into system directories. - Cleaned up obsolete bin utility slides_test.rs. --- Cargo.toml | 7 +- Makefile | 6 + assets/icons/YALI_icon_DARK.png | Bin 0 -> 45041 bytes assets/icons/YALI_icon_LIGHT.png | Bin 0 -> 54671 bytes assets/icons/lock.png | Bin 0 -> 6107 bytes assets/icons/yellowcheck.png | Bin 0 -> 73661 bytes assets/remixicon.ttf | Bin 0 -> 613136 bytes locales/en.toml | 6 +- locales/tr.toml | 20 +- slides/img/community-102.png | Bin 0 -> 202103 bytes slides/img/customization-dark.png | Bin 0 -> 3517 bytes slides/img/customization-light.png | Bin 0 -> 3038 bytes slides/slides_en.toml | 267 ++-- slides/slides_tr.toml | 4 +- src/bin/slides_test.rs | 83 -- src/branding.rs | 8 +- src/funct.rs | 36 +- src/installer.rs | 35 +- src/jobs/autologin.rs | 101 ++ src/jobs/bootloader.rs | 541 +++++++ src/jobs/execution.rs | 442 ++++++ src/jobs/finish.rs | 116 ++ src/jobs/keyboard.rs | 99 ++ src/jobs/location.rs | 171 +++ src/jobs/mod.rs | 2215 ++-------------------------- src/jobs/netinstall.rs | 39 + src/jobs/network.rs | 39 + src/jobs/partition.rs | 846 +++++++++++ src/jobs/users.rs | 134 ++ src/main.rs | 32 +- src/steps/execution.rs | 73 +- src/steps/finish.rs | 9 +- src/steps/location.rs | 32 + src/steps/network.rs | 13 +- src/steps/partition.rs | 148 +- src/steps/rescue.rs | 30 +- src/steps/summary.rs | 35 +- src/steps/users.rs | 86 +- src/ui/slideshow.rs | 413 +----- src/ui/theme.rs | 20 +- 40 files changed, 3264 insertions(+), 2842 deletions(-) create mode 100644 assets/icons/YALI_icon_DARK.png create mode 100644 assets/icons/YALI_icon_LIGHT.png create mode 100644 assets/icons/lock.png create mode 100644 assets/icons/yellowcheck.png create mode 100644 assets/remixicon.ttf create mode 100644 slides/img/community-102.png create mode 100644 slides/img/customization-dark.png create mode 100644 slides/img/customization-light.png delete mode 100644 src/bin/slides_test.rs create mode 100644 src/jobs/autologin.rs create mode 100644 src/jobs/bootloader.rs create mode 100644 src/jobs/execution.rs create mode 100644 src/jobs/finish.rs create mode 100644 src/jobs/keyboard.rs create mode 100644 src/jobs/location.rs create mode 100644 src/jobs/netinstall.rs create mode 100644 src/jobs/network.rs create mode 100644 src/jobs/partition.rs create mode 100644 src/jobs/users.rs diff --git a/Cargo.toml b/Cargo.toml index d033ef0..a44c3e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,16 +16,13 @@ sysinfo = "0.30" rust-i18n = "3.1" lazy_static = "1.4" async-trait = "0.1" -chrono = "0.4" +chrono = { version = "0.4", features = ["serde"] } +chrono-tz = "0.8" xkbcommon = "0.9" [[bin]] name = "yali-rs" path = "src/main.rs" -[[bin]] -name = "slides_test" -path = "src/bin/slides_test.rs" - [patch.crates-io] # Yerel mudur veya comar-api kütüphaneleri buraya eklenebilir diff --git a/Makefile b/Makefile index c29e16b..2b0cdff 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ BINDIR ?= $(PREFIX)/bin DATADIR ?= $(PREFIX)/share/yali LOCALEDIR ?= $(DATADIR)/locales ASSETSDIR ?= $(DATADIR)/assets +SLIDESDIR ?= $(DATADIR)/slides DESKTOPDIR ?= $(PREFIX)/share/applications PIXMAPDIR ?= $(PREFIX)/share/pixmaps @@ -128,6 +129,10 @@ install: release install -dm755 $(DESTDIR)$(LOCALEDIR) install -m644 locales/*.toml $(DESTDIR)$(LOCALEDIR)/ + # Slayt dosyaları + install -dm755 $(DESTDIR)$(SLIDESDIR) + cp -r slides/* $(DESTDIR)$(SLIDESDIR)/ + # .desktop girdisi install -Dm644 assets/yali.desktop $(DESTDIR)$(DESKTOPDIR)/yali.desktop @@ -141,6 +146,7 @@ uninstall: rm -rf $(DESTDIR)$(DATADIR) rm -f $(DESTDIR)$(DESKTOPDIR)/yali.desktop rm -f $(DESTDIR)$(PIXMAPDIR)/yali.png + rm -rf $(DESTDIR)$(SLIDESDIR) @echo "$(BOLD)$(GREEN)✓ Kaldırıldı$(RESET)" # ── Temizlik ───────────────────────────────────────────────────────────────── diff --git a/assets/icons/YALI_icon_DARK.png b/assets/icons/YALI_icon_DARK.png new file mode 100644 index 0000000000000000000000000000000000000000..1846480486ca1a9a9acdbe345da44e134d30146e GIT binary patch literal 45041 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 literal 0 HcmV?d00001 diff --git a/assets/icons/YALI_icon_LIGHT.png b/assets/icons/YALI_icon_LIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..5c12f3fce6a039fa40de0196554b874444f52a83 GIT binary patch literal 54671 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 IM6N<$f*h}yBLDyZ literal 0 HcmV?d00001 diff --git a/assets/icons/lock.png b/assets/icons/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..ead4f40db071bee852c7ff5523657ad05dc5b0a0 GIT binary patch literal 6107 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 literal 0 HcmV?d00001 diff --git a/assets/icons/yellowcheck.png b/assets/icons/yellowcheck.png new file mode 100644 index 0000000000000000000000000000000000000000..173dcd432baa94643f1007b572e797113a1a2780 GIT binary patch literal 73661 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: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 Bx!M2# literal 0 HcmV?d00001 diff --git a/assets/remixicon.ttf b/assets/remixicon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..efab79e8bd21e7ca25803a6db93f38abed7e78f6 GIT binary patch literal 613136 zcmeF)Rk&AG+cx~sW6U}KgrX=|s2~U^jfkj7BPeMXNK2}y*rI}k-GLq0SlHd2D0bH* zR-g!q@?GaT-|zUIjc@aPx8B7(ez(H~jQ=&R>)d#rd(5?NrIk{JIzw62ap0)^`n0&9 z)k#X}9`e=E!$x)J+~>7J4wHXhApbsQ-1M=t-dHSD)rFXNz+c8SUqNOXQi9Y zQE}?5$rHwo@6fbOC;7AAiSCo-3+d6ugJu1UXgPWM>^V;_-mpRTTcK2^LDOcA8{6)@ zrAeuu+snTXoj!KXtOnCnDZjtD{P`9$#!jCwcHW&IsxN8NEf%**8XP`a<^%?!{!e5; zzKue@M?=12Mk)Ee6?`8@^9B4~i)QoXtN5;q_VQ2pZV~yqYj$wmpK6!byS^HXVpb@Rozr~wTtSZ zc2zyqZmO5sUA}i^Pt{xPrTVD8s-Nnw2B?8*kQ%J^RzuWKwU63Y4O7F_2sKiTQlr&= zYJYWrI#3;?4pxV#L)BsGaCL+lqsFQu)i^a?O;8inBsE!0QAeq%YMPp^W~iBJmO5G; zqmEUx)p6>0b%L6sPE;qUlhrBeRCSsTESn%~$8BbJcn3e070Zpe|Gw zsf*Pm>QZ%?x?EkMu2fg4tJO8?T6wNh*Q*=ULUp6MN!_e&QManw)a~jHb*H*ZEmC)@ zd(^$^K6Sr(Ks~4ytB2IX>Jjy*d{4|0^|*RMJ*l2jPs{ftJ*%Em&#M>Ii|QryvU)|m zs$NsC%kzdjZ>qP{+v*+lu6j?suRc&8s*lvi>Jzn8eX2fF%hc!U3-zV?N_{QgBlN9& zzti{X2lb=+NuHnO`9=MzepA28_cAS4E7VH0N>!<9RikRvYW0WuQ>{^dskLgI`dj^@ z)~kQje`0xh`}?H_#1rBi&eUq&L=0^d@>!-BfR;H`mQ{bG?P$ zQg5ZV*4yY7dRx7n-d?xVt@IAMwQi$#)NOS;-Cpmcch((rN8L$x)?IX0-A#AbyXYQz zSKU+ZrhCb=yWT_Zse9|abRXSU_tX9L06kC-(u4KhdWasX_tE?6VS2b8p-1XbdbHk8 z@2?Ng2kL|L!TJz=s6I>|u8+`T^jLkQ9;e6a33{TQq$les`Y1hBPt()&3_VlN(nrg4 zj6BEc+4?wrygotC(I@JY^vU`ZeX2f9pRUi)bM=|}EPb|~r|0W)^tt*xeZIaxFVGk2 zi}c0vT%s@4m+8y(75YkjmA+bEqp#K1>Ff0kdZE5io}1*kS)N<;t@<{7yS_u;sqfN@ z^xgU%dG6Ks>HGBq`a!)|KcpYlkLXABV|s~xTtA_o)KBTB^)vce{hWSYzo1{#FX@-{ zEBaOantolsq2JVR>9_Se`d$5=eqVo}Khz)TkM$>dss2=drkCl@^%wd}{gwV&f1|(E z-|6r55Bf*_lm1!%qJP!D>ECs!m+KXJrCz10bhWP0wR*MwL;tDQ=)d$@y-xqF|IzF9 zzxqGD!6>7RG1fTaO)$|UlbPHUreYeHhNh8eY&J3*nW~RB>!fa`_ zGFzK%ObfHE+0JZlTAEg72h-ZLF*};Jrk!bTb}~Dg4yL2&Bu{74#dI~@On0-3>0x#? zJWm)YIyVfHk=&0eOD>1+C#{$_v~Xa9_I%_uY4>}U2j z2bcrRLFQm{h&j|8W)3$;m@#IoIns1KwRX=a(D%`xU! zGus?zjyETmIp#!jk~!I&Voo)unbXY~X0AEYoMp~7^UQp6jyczyXU;blm<8rSbCJ2& zTw*RYmzm4W73NBFmATqnW3DyVnd{9BW}&&!++=Pxx0qYaZRU1!hq=?-Wfqyc%{}H` zbDz22JYXJ_XR&$6JZv5@kDABK67#ru!aQl7GEbXl%(Lb>^SpV%yl7rBFPm4)tL8QH zx_QIAY2Gq#n|I8+<~{Si`M`W=J~AJhPs~#Dsrk$-GoPC;%$MdX^R@ZLd~3cl-%2b(ZQ)6n)YV(Kr)2uOnnYCt}`P=+s)|-FLe`bSK zR$F7Ob=KQpqfIumxh-tPHn0tCBiq<+WH+`=>?ZPTYMa{4?B=$aZEm-)TiUJc)^;0t zTG(yvc6NK)(zdcY*w(g<-O;wS?QDCyligXK4)S!goor{@#dfvbYH(eeEzi+>Wp#?I=6i?q~P62iODc zLH1yKh&|LEW)HVV*fDmjJ<^V|2`*lX=mA^?J@RPJKG*- zkGCh-Irc<*l0Dg;Vo$ZF+0*SAcCJ0so@LLr^W>Rt&#~v)^X&Qd0=vLoXfLuC+e_@F z_A-09y~18;ud-L$YwWf5I(xmn!7j8n+MDdn_7;1qz0KZk@342;yX+!+x4p;SYwxr7 z+Xw7}cCmfPK5QSckJ`uV68pG)!aixAvQOJ*?6dYc`@DU@zGz>vFWXn_tM)bfx_!gG zY2UJM+js1{_C5Q){lI=`Ke8X&PwZ0rsr}3@v!B~9?3eZ{`?dYXervz8-`gMTkM<|~ zv;D>XYJao8+tMz#E9^?U%2wHGTVreOYWs)%)2^|9*|m0^{oDRy*V}*Xe|Cd>yQp@? zS?8R0!9|x`=5klKifiB+x<;+HI?uCANw?sjoK+^(*t+s*ZIySqKy zp02ms%k^=6T|d{~4R8b9AUD|U?S{CaZXdU=8|H?)5pJX#x-2UzWcc44S9qbNq zhq}Yu;qC}|#<;QWNH@-ncN5%1H_1(QQ`}K*s+;DfyBTh#o8^vn$GBtNYfXKtDM+SL;^0Kir>gjr+^3b?e;U?jN__{pxAI&2ZF~#A zt>4aX?_2s-eh1&$xA8mrw!WQj?|1S$`wqUN@8moCF21Yp=DYh{d=I~?@9B5*z5MQe z55K4H?f3G1d|%(s_xA(*KtIS2_IvvweyHEa@9T&8;eLc4=|}m|em}pzKfoX85Ap~5 zL;RusFn_o|!jJJ|{gHm0AMYpliGGrw?5Fsn{8T^9PxmwYOh3yX?T_)t`q}^o)9`j55U-7T{*Zk}L4gaQp z%fId4@$dTg{QLd`|DpfLf9yZ;OZ}(*Gr!D#?!WL~`mg-g{u_C|_22pL{SW>}|C9gO z|Kfj@=QsbmFa2`ALY|d=m9O&EzQ))3)&39vr(fg$@@xG%|F{3gulN7@|NMraf(|Cw z;DQe!#E?Q3@=(ZA2@OKS&?qzx8-Cjg`Go(&@prhokN$J`!=x}dObJJYsbN}}9%h7@VOBUg921TWv%_)W_;5m) z6HW{#g_FZ6;nZ+iI6a&Z=7uxFS>fz3FU$|;gmc4r;rwtxSP(7@7ln(%CE?O=S-3o0 z5v~kZg{#9g;o5LrxIWwv7KR(cP2uKnOSm=M7H$uBgge7sVNtj{+!O8%_l5hz1L482 zI6M>{4v&OK!((Adcsx82o(xZgr^7Sh+3;L=KD-cK3@?S3!z zD((Ud4OHeMI6k2l1H@y2*lygA+yZ;iLb+v6Sa&UjZ`6z`7r#Czj?@&5Qgd@wGK55exk59xW<5ThJ_)L5@J{O;lFT@w)OY!CSN_;iG7GIBV$n$1=E504yiSNeu z;`{M~_+k7gejGoEOXH{Uv$!mN9>0iR#;@Yn@tgQ<{4RbUe~3TEpW@H)m-uV^E&d+M zxIC_qXQe!=s#u8;r5|Kf(El1?VsHZsYLFVHMyYYyC~cgYq)pPMscG6QZJwH?=4p$xW!frjowi9W(za>4w0&xsTBRLQ z>(nOgnA)axseRfh?VLKKj;T}XoVuj0saxuvc1b@hNPispR{ipmWHPhX=ECeMyLJK{^@{pU^*xroDNBcro+4-EY zjZH_UacO*-kS5AADNRmO(otz@nwF-g8EIykm5xrwq+{ioosLV#rxVhgbYeOwot#cd zr>4`=>FJC#H=UWzN@u5eX?{8DqK%x<1{I7N#51P3h)zOS(1PmTpgXq&w4HX^}j4%X5!B_sVl$x<5UT9!!hnc_=-c z9!Za;$I_DYczPl|nVw2dr)Sc$>ACcLdLg}-UP>>gSJJELwe)&=BfXj4N^hrk(!1%s z^nUsveV9H8td0`X+swzDwVyAJUKV{FHu9zocK&Z|V0` zrsZixTA5a*s#Kk7Qf*qD{z!kOHR-RkHmys4r+?D=^l$nvZOBxnGn3iOWj+g8%u<$R zc~)eVtU=Z=Ym_z4Hp({6nq-?~n`TY3&9cq2W?A!Wi)_nmt8D9Ro2*5)ZMI#uebzE- zmF))-mgpb$PUa7$_~yB z$qvm9%MQ){+4yWiHZhx&P0prdM`cs9Y1#B_Mm95>l^vZOlO3DQ&W_8D z&rZnZWG7}PWhZB+WT(n=T6TJNMm9G)6aPI#c2;(FHZPl>os*rLotK@TU63uvF3c{< zF3v8=F3m2>F3+yWuFS5=uFkH>uFbB?uE&3Kk=>9j%x=tX%5KhX$!^VV%Wlu^$nMPU z$`)mJXZK|HX7^?HXAfi#W{b0jvWK%rvPZMWvL)H$*%R55*;Com*)!R**>lX1`^>XJxiLTam5IR%KOLbykzrW~;M5vOlvm z*`BwSX`8IireA|4xeEYm*-YVZAZ=JWvcg)-7?eg~dPWjGx zhrDCnDes(j$-Cy=^6vRAd5?V8yl1{!-Yefd-y`2M@15_J_sRR_{qp|#fP7#+C?A~f zoe#-}=KJLP$}>!!;qr`-XJkGqAD!=)@1Gx#ADADMADkbOADSPQAD$nPkIBd8N9N=5 z@%e;&Vm>LKoKMM*%BSYj^6B}Ed}cl?KRQ1qKQ^D8AD17WpODYVPs~rsPtH%tPt8xu zPtVVgXKsFGepY^VJ};l2pOc@PpO>GXUyv`zFU&8>FU~K?FU>E@FVC;YugtH?ugHL}e+59|c_4&W~fBA+&6}m8m zEnMN{|7eUwDzYLkilS09C>j=xipIr8#l}UGVv}OiqG_>Nv3b#~XkKhlY*}noY+YO#V$pUV%MT) zv0Krr*uB`J*t6(e>{awB`WF3){>6Y|U@@o|EYIG>kYZ@DPqA+?tQcO5C`J~eiqXY> z#s0+s#eu~^#li9%QXE;_~8(;>zNx;_Bj>;@aZ6;`-u-VqtM(aZ_<~aZ7P)aa(bF zaYu1yaaXaZxVyNgxVN~kxW9Oyc(7PpJXAbfJW@PbJXS0z9xt9Ko-Cd!o-Up#o-Lj$ zo-bY~UMyZJUM^lKUM*fLUN7D#-YniK-Y(uL-YwoM-Y-5VJ}f>eJ}y2fmKL8DpB2lB z&xgi5TWN><4$MWs?{P-$3cRB2q< zsIqaTNoAADrj@3Z%_^H$npK)twy11b*{ZU2Wt&Qi%C?p5D%)3DR$5hdsI;!Msq9#3 zTWMEmU)ia$bEQM2W2IB2bEQkAYo%MIdu5kOkIJr0Q~Y(x=k5 z(y!9LGN3ZBGN>}RvUg=jWoTue%D$ChmEn~UN@@JutpD48RnUN|r?Cx{g}7ZJ+&7i- zGrs^ozpRw|D!{!}DK}4m8>mw5vH*8lrF0bV6UoX*ax0}u`MG6)pI=sHBsW#6lshiK zT~}F<++L|tssg#kQe^{@8!c5fB)QvCWh0VXE>$)rx$jb?{KPfDPhKlGCb<<=y3Z>rpeD%MNpAI2*@onPPnA28-1MokEyb=qB=?!B+=~>x z)`#SdQKvg+_{epHo%Np4D2xi`t3sVaw% z+@7j(D9JslD)%9|QB~!>BzLQ-97b}>s> zs@#v{hE|pPliby+@&J-sTU8!Na(}DJgGg?2Re3PUovtbmA-UaE<)I|^ysA8ms`3buTVPd=A-NA$S_gRIJlBzMWGoJ4Y~ ztjftG_sgoBLUPlr%A-i`oK-oMJjq?RDo-G}^;YE^lKXE}o=9>NuF8{0 z?!;AjGRf_@Do-J~Cs*aEBsb=&JdNb;T$QJj+@h=U43hhFRn8@auboM9$F9n=NN(Fz zc{a(tyDI0A+`y}HKFM9YD$gOgl~?7tB=_^GJdfn2UX|yQ+}W%00+QQ%RW2a8$5-Wr zBsco1yols(UzHb=-14jP5|aCVRbEPR^RLRwNZtWZ<>e%A1E}%}lJ^2sc_qmk0;;@< z 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 euTr?6=2K>yOE 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

xoN@AHzJ6hxOsn>^&<(*A)xOA;TrIK;wD2aaS1 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

|-ZN&0?kkXk&uAx2&C~^m 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 z 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‰!}OQX#b>Y*XW!#;=)_lo%^$d=?s_&75x9 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 z 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 LNkvXXu0mjffe@V& literal 0 HcmV?d00001 diff --git a/slides/img/customization-dark.png b/slides/img/customization-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..35a89f052c6214f8e43b75e3b7487e6f96fee0d5 GIT binary patch literal 3517 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 literal 0 HcmV?d00001 diff --git a/slides/slides_en.toml b/slides/slides_en.toml index f083747..a61a773 100644 --- a/slides/slides_en.toml +++ b/slides/slides_en.toml @@ -3,56 +3,155 @@ # ╚══════════════════════════════════════════════════════════════════╝ # Slide transition duration (seconds) -interval_secs = 6 +interval_secs = 12 [[items]] icon = "slides/img/pisilinux-logo.png" title = "Welcome to Pisi GNU/Linux" -description = "Pisi is a Turkish-supported GNU/Linux distribution that combines speed, stability, and ease of use." +description = "Pisi GNU/Linux is a Linux distribution developed by the free software community, based on PiSi, Turkey's first native package management system. It focuses on easy installation, easy use, and meeting daily desktop requirements for end users." [[items]] icon = "slides/img/pisi-software-center.png" -title = "PISI Package Manager" -description = "Access thousands of packages with a single command. Install anything you need easily with `pisi install `." +title = "Native Software Components" +description = "Pisi GNU/Linux, equipped with native software components, stands out with original technologies such as YALI installation software, KAPTAN settings wizard, MÜDÜR for fast system startup, and ÇOMAR for hardware settings." [[items]] -icon = "slides/img/community.png" -title = "Community Support" -description = "Our active community at forum.pisilinux.org is ready to answer your questions. Our wiki pages are always accessible." +icon = "slides/img/community-102.png" +title = "Extensive Software Repository" +description = "Pisi GNU/Linux offers thousands of applications that users need through its extensive software repository and keeps them regularly updated." [[items]] icon = "slides/img/pisi_speed.png" -title = "Speed & Performance" -description = "Thanks to an optimized kernel and startup services, PisiLinux boots in seconds and uses minimal resources." +title = "Modern Desktop Experience" +description = "The free and open-source Pisi GNU/Linux comes with the KDE Plasma desktop environment by default, offering modern and comprehensive features. For users who prefer a desktop with lower system resource consumption, the lightweight, fast, and customizable XFCE desktop environment is also offered as an alternative." [[items]] icon = "slides/img/securety.png" -title = "Security First" -description = "Keep your system secure with regular security updates, AppArmor profiles, and secure default settings." +title = "Versatile Usage" +description = "Pisi GNU/Linux is a versatile operating system that can be easily used at home, office, and daily use. It provides a powerful infrastructure for music, movies, 3D modeling, graphic design, and professional applications, while also offering a comprehensive gaming platform for gaming enthusiasts." [[items]] -icon = "slides/img/customization.png" +icon = "slides/img/customization-dark.png" title = "Customization" -description = "Tailor everything to your taste — from the desktop environment and theme colors to panel layout and keyboard shortcuts." +description = "Customize everything from the desktop environment to theme colors, from panel layout to keyboard shortcuts according to your taste." + +# ── XFCE ────────────────────────────────────────────────────────── + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce.png" +title = "PisiLinux XFCE" +description = "Lightweight, fast and user-friendly XFCE desktop environment. Low resource consumption, high performance." + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce_panel.png" +title = "XFCE Panel" +description = "With the traditional panel layout, taskbar, application menu and system tray are always at your fingertips." + +[[items]] +desktop = "xfce" +icon = "slides/img/file_manager.png" +title = "Thunar File Manager" +description = "Easily perform file operations with the fast and lightweight Thunar. Offers tree view, tabbed navigation and customizable features." + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce_settings.png" +title = "Settings Center" +description = "A modern alternative to the classic application menu. Find applications easily and organize your favorites with Whisker Menu." + +# ── KDE Plasma ──────────────────────────────────────────────────── + +[[items]] +desktop = "kde" +icon = "slides/img/kde.png" +title = "PisiLinux KDE Plasma" +description = "Meet the modern, customizable and powerful KDE Plasma desktop environment. Everything is at your fingertips." + +[[items]] +desktop = "kde" +icon = "slides/img/file_manager.png" +title = "Dolphin File Manager" +description = "Dolphin makes managing your files easy with tabbed browsing, dual panel and powerful search features." + +[[items]] +desktop = "kde" +icon = "slides/img/kde_connect.png" +title = "KDE Connect" +description = "Connect your phone to your computer. Notifications, file transfer and clipboard sharing are possible with KDE Connect." + +[[items]] +desktop = "kde" +icon = "slides/img/discover.png" +title = "Discover Software Center" +description = "Easily find, install and update applications from the visual interface with Discover." + +# ── GNOME ───────────────────────────────────────────────────────── + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome.png" +title = "PisiLinux GNOME" +description = "Reduce distractions and focus on your work with the clean and focused GNOME desktop environment." + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome_search.png" +title = "GNOME Search" +description = "Press the Super key and start typing. Instantly reach applications, files and settings." + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome_extensions.png" +title = "GNOME Extensions" +description = "Shape your desktop to your needs with hundreds of extensions from extensions.gnome.org." + +# ── MATE ────────────────────────────────────────────────────────── + +[[items]] +desktop = "mate" +icon = "slides/img/mate.png" +title = "PisiLinux MATE" +description = "MATE for those who love the traditional desktop layout. Developed with GTK+ 3 for a modern and smooth experience." + +[[items]] +desktop = "mate" +icon = "slides/img/file_manager.png" +title = "Caja File Manager" +description = "Easily perform file operations with MATE's powerful Caja. Offers dual panel, tabbed navigation and rich features." + +[[items]] +desktop = "mate" +icon = "slides/img/mate_settings.png" +title = "MATE Settings" +description = "Customize your MATE desktop with comprehensive settings for appearance, display, keyboard and more." + +[[items]] +desktop = "mate" +icon = "slides/img/customization.png" +title = "Rich Application Suite" +description = "MATE offers a wide range of well-integrated classic applications from text editor to image viewer." # ── Budgie ──────────────────────────────────────────────────────── + [[items]] desktop = "budgie" icon = "slides/img/budgie.png" title = "PisiLinux Budgie" -description = "A modern, clean, and elegant Budgie desktop. Built on the GNOME stack and user-friendly." +description = "Modern, clean and stylish Budgie desktop. Built on GNOME infrastructure, user-friendly." [[items]] desktop = "budgie" icon = "slides/img/budgie_applets.png" title = "Budgie Desktop Applets" -description = "Easily add tools like weather, system monitor, and calendar via Budgie's panel applets." +description = "Easily add tools like weather, system monitor and calendar via Budgie's panel applets." [[items]] desktop = "budgie" icon = "slides/img/budgie_raven.png" title = "Raven Notification Center" -description = "Access volume, media controls, notifications, and quick settings from the Raven panel." +description = "Access volume level, media controls, notifications and quick settings from the Raven panel." [[items]] desktop = "budgie" @@ -61,6 +160,7 @@ title = "GTK Theme Support" description = "Budgie runs GTK themes and GNOME applications seamlessly, ensuring visual consistency." # ── Cinnamon ────────────────────────────────────────────────────── + [[items]] desktop = "cinnamon" icon = "slides/img/cinnamon.png" @@ -71,7 +171,7 @@ description = "Cinnamon combines the traditional desktop experience with modern desktop = "cinnamon" icon = "slides/img/cinnamon_panel.png" title = "Cinnamon Panel" -description = "Customize your panel with applets, launchers, and system indicators for a classic yet powerful desktop." +description = "Customize your panel with applets, launchers and system indicators; experience a classic but powerful desktop." [[items]] desktop = "cinnamon" @@ -83,161 +183,58 @@ description = "Fine-tune every aspect of your Cinnamon desktop through the compr desktop = "cinnamon" icon = "slides/img/cinnamon_desklets.png" title = "Cinnamon Desklets" -description = "Keep notes, clocks, and system info always visible on your desktop with Cinnamon Desklets." - -# ── GNOME ───────────────────────────────────────────────────────── -[[items]] -desktop = "gnome" -icon = "slides/img/gnome.png" -title = "PisiLinux GNOME" -description = "Reduce distractions and focus on your work with the clean and focused GNOME desktop environment." - -[[items]] -desktop = "gnome" -icon = "slides/img/gnome_search.png" -title = "GNOME Search" -description = "Press the Super key and start typing. Instantly reach applications, files, and settings." - -[[items]] -desktop = "gnome" -icon = "slides/img/gnome_extensions.png" -title = "GNOME Extensions" -description = "Shape your desktop to your needs with hundreds of extensions from extensions.gnome.org." - -# ── KDE ─────────────────────────────────────────────────────────── -[[items]] -desktop = "kde" -icon = "slides/img/kde.png" -title = "PisiLinux KDE Plasma" -description = "Meet the modern, customizable, and powerful KDE Plasma desktop. Everything is at your fingertips." - -[[items]] -desktop = "kde" -icon = "slides/img/file_manager.png" -title = "Dolphin File Manager" -description = "Dolphin makes managing your files easy with tabbed browsing, dual-panel view, and powerful search." - -[[items]] -desktop = "kde" -icon = "slides/img/kde_connect.png" -title = "KDE Connect" -description = "Connect your phone to your computer. Notifications, file transfer, and clipboard sharing — all with KDE Connect." - -[[items]] -desktop = "kde" -icon = "slides/img/discover.png" -title = "Discover Software Center" -description = "Easily find, install, and update applications from the visual interface with Discover." +description = "Keep notes, clocks and system info always visible on your desktop with Cinnamon Desklets." # ── LXQt ────────────────────────────────────────────────────────── + [[items]] desktop = "lxqt" icon = "slides/img/lxqt.png" title = "PisiLinux LXQt" -description = "A lightweight, fast, and modern LXQt desktop environment. Low resource consumption, high performance." +description = "Lightweight, fast and modern LXQt desktop environment. Low resource consumption, high performance." [[items]] desktop = "lxqt" -icon = "slides/img/lxqt_panel.png" +icon = "slides/img/file_manager.png" title = "LXQt Panel" -description = "The traditional panel layout puts the taskbar, application launcher, and system tray always within reach." +description = "The traditional panel layout puts the taskbar, application launcher and system tray always within reach." [[items]] desktop = "lxqt" icon = "slides/img/file_manager.png" title = "PCManFM-Qt File Manager" -description = "Manage files effortlessly with the lightweight and fast PCManFM-Qt. Tabbed navigation and a customizable interface." +description = "Manage file operations easily with the lightweight and fast PCManFM-Qt. Offers tabbed navigation and customizable interface." # ── LXDE ────────────────────────────────────────────────────────── + [[items]] desktop = "lxde" icon = "slides/img/lxde.png" title = "PisiLinux LXDE" -description = "The legendary lightweight LXDE desktop. Known for extremely low resource usage and a reliable build." +description = "The legendary lightweight LXDE desktop. Known for very low resource consumption and reliable structure." [[items]] desktop = "lxde" -icon = "slides/img/lxde_openbox.png" +icon = "slides/img/lxde.png" title = "Openbox-Based" -description = "LXDE uses the Openbox window manager. Fine-tune it for a smooth and responsive experience." +description = "LXDE uses the Openbox window manager. Offers a smooth experience with fine-tuning." [[items]] desktop = "lxde" icon = "slides/img/file_manager.png" title = "PCManFM File Manager" -description = "PCManFM speeds up your file operations with its fast and lightweight build, supporting tree view and tabs." +description = "PCManFM facilitates your file operations with its fast and lightweight structure, supports tree view and tabs." # ── Lumina ──────────────────────────────────────────────────────── + [[items]] desktop = "lumina" icon = "slides/img/lumina.png" title = "PisiLinux Lumina" -description = "A lightweight and independent Lumina desktop. Qt-based, designed to run cleanly on BSD and Linux systems." +description = "Lightweight and independent Lumina desktop. Qt-based, minimal environment that works properly on BSD and Linux systems." [[items]] desktop = "lumina" -icon = "slides/img/lumina_applications.png" -title = "Application Support" -description = "Lumina works well with core utilities and many popular Qt apps, providing a practical everyday experience." - -[[items]] -desktop = "lumina" -icon = "slides/img/lumina_theme.png" +icon = "slides/img/customization.png" title = "Theme Customization" -description = "Easily customize color schemes and interface styles with Lumina's flexible theme system." - -[[items]] -desktop = "lumina" -icon = "slides/img/lumina_panel.png" -title = "Lumina Panel" -description = "A clean panel with a taskbar, application launcher, and system tray keeps your desktop organized." - -# ── MATE ────────────────────────────────────────────────────────── -[[items]] -desktop = "mate" -icon = "slides/img/mate.png" -title = "PisiLinux MATE" -description = "MATE for those who love the traditional desktop layout. Developed with GTK+ 3 for a modern and smooth experience." - -[[items]] -desktop = "mate" -icon = "slides/img/file_manager.png" -title = "Caja File Manager" -description = "Manage your files easily with MATE's powerful Caja. Dual panel, tabbed navigation, and rich features." - -[[items]] -desktop = "mate" -icon = "slides/img/mate_settings.png" -title = "MATE Settings" -description = "Customize your MATE desktop with comprehensive settings for appearance, display, keyboard, and more." - -[[items]] -desktop = "mate" -icon = "slides/img/mate_applications.png" -title = "Rich Application Suite" -description = "MATE comes with a rich set of classic applications — from text editors to image viewers, all well-integrated." - -# ── XFCE ────────────────────────────────────────────────────────── -[[items]] -desktop = "xfce" -icon = "slides/img/xfce.png" -title = "PisiLinux XFCE" -description = "A lightweight, fast, and user-friendly XFCE desktop environment. Low resource consumption, high performance." - -[[items]] -desktop = "xfce" -icon = "slides/img/xfce_panel.png" -title = "XFCE Panel" -description = "The traditional panel layout puts the taskbar, application menu, and system tray always within reach." - -[[items]] -desktop = "xfce" -icon = "slides/img/file_manager.png" -title = "Thunar File Manager" -description = "Manage your files easily with the fast and lightweight Thunar. Tree view, tabbed navigation, and customizable features." - -[[items]] -desktop = "xfce" -icon = "slides/img/xfce_settings.png" -title = "Whisker Menu" -description = "A modern alternative to the classic application menu. Find apps easily and organize your favorites with Whisker Menu." +description = "Easily customize color schemes and interface style with Lumina's theme system." diff --git a/slides/slides_tr.toml b/slides/slides_tr.toml index 7c0178e..0c8cfe3 100644 --- a/slides/slides_tr.toml +++ b/slides/slides_tr.toml @@ -16,7 +16,7 @@ title = "Yerli Yazılım Bileşenleri" description = "Yerli yazılım bileşenleriyle donatılmış olan Pisi GNU/Linux; kurulum yazılımı YALI, ayar sihirbazı KAPTAN, sistemin hızlı açılmasını sağlayan MÜDÜR ve donanım ayarları için kullanılan ÇOMAR gibi özgün teknolojileriyle öne çıkan yerli bir GNU/Linux dağıtımıdır." [[items]] -icon = "slides/img/community.png" +icon = "slides/img/community-102.png" title = "Geniş Yazılım Deposu" description = "Pisi GNU/Linux, geniş yazılım deposu sayesinde kullanıcıların ihtiyaç duyduğu binlerce uygulamayı sunar ve bunları düzenli olarak güncel tutar." @@ -31,7 +31,7 @@ title = "Çok Yönlü Kullanım" description = "Pisi GNU/Linux; evde, ofiste ve günlük kullanımda rahatlıkla kullanılabilen çok yönlü bir işletim sistemidir. Müzik, film, 3D modelleme, grafik tasarım ve profesyonel uygulamalar için güçlü bir altyapı sunarken, oyun tutkunları için de kapsamlı bir oyun platformu sağlar." [[items]] -icon = "slides/img/customization.png" +icon = "slides/img/customization-dark.png" title = "Özelleştirme" description = "Masaüstü ortamından tema renklerine, panel düzeninden klavye kısayollarına kadar her şeyi zevkinize göre ayarlayın." diff --git a/src/bin/slides_test.rs b/src/bin/slides_test.rs deleted file mode 100644 index 8524a8a..0000000 --- a/src/bin/slides_test.rs +++ /dev/null @@ -1,83 +0,0 @@ -//! Slayt gösterisini test etmek için bağımsız GUI binary'si. -//! -//! Gerçek kurulum ekranındaki slideshow boyutlarında ve konumda görüntüler. -//! -//! Kullanım: -//! cargo run --bin slides_test [desktop] [lang] -//! -//! desktop: "default" (varsayılan), "kde", "gnome", "xfce", "mate" vb. -//! lang: "tr", "en" (varsayılan), "de" vb. — branding_{lang}.toml yüklenir - -use eframe::egui; - -fn main() -> eframe::Result<()> { - let args: Vec = std::env::args().collect(); - let desktop = args.get(1).cloned().unwrap_or_else(|| "default".to_string()); - let lang = args.get(2).cloned().unwrap_or_else(|| "tr".to_string()); - - let options = eframe::NativeOptions { - viewport: egui::ViewportBuilder::default() - .with_inner_size([1200.0, 900.0]) - .with_min_inner_size([1080.0, 720.0]) - .with_title(format!("Slides Test - {} ({})", desktop, lang)), - ..Default::default() - }; - - eframe::run_native( - "Slideshow Test", - options, - Box::new(move |cc| { - egui_extras::install_image_loaders(&cc.egui_ctx); - - let branding = yali_rs::branding::BrandingConfig::load_for_lang(&lang); - let icons: std::collections::HashMap = branding.slides.icons - .iter() - .map(|(k, v)| (k.clone(), yali_rs::branding::path_to_file_uri(v))) - .collect(); - - Box::new(SlidesApp { - slideshow: yali_rs::ui::slideshow::Slideshow::new( - &desktop, - icons, - branding.slides.items.clone(), - ), - }) - }), - ) -} - -struct SlidesApp { - slideshow: yali_rs::ui::slideshow::Slideshow, -} - -impl eframe::App for SlidesApp { - fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { - egui::CentralPanel::default() - .frame(egui::Frame::none().fill(yali_rs::ui::theme::c_bg_dark())) - .show(ctx, |ui| { - let available_w = ui.available_width(); - let available_h = ui.available_height(); - let slide_h = (available_h * 0.45).max(280.0); - - ui.allocate_ui(egui::vec2(available_w, slide_h), |ui| { - ui.vertical(|ui| { - ui.add_space(8.0); - yali_rs::ui::theme::section_heading(ui, "Slideshow Test"); - ui.label( - egui::RichText::new("Gerçek kurulum boyutlarında slayt gösterisi") - .color(yali_rs::ui::theme::c_text_dim()) - .size(13.0), - ); - ui.add_space(16.0); - - self.slideshow.show(ui); - ui.add_space(10.0); - ui.horizontal(|ui| { - if ui.small_button("‹").clicked() { self.slideshow.previous(); } - if ui.small_button("›").clicked() { self.slideshow.advance(); } - }); - }); - }); - }); - } -} \ No newline at end of file diff --git a/src/branding.rs b/src/branding.rs index 981a1ee..455eeec 100644 --- a/src/branding.rs +++ b/src/branding.rs @@ -134,11 +134,11 @@ pub struct OemConfig { // ── Varsayılan değerler ─────────────────────────────────────────────────────── -fn default_title() -> String { "YALI Installation Tool".to_string() } +fn default_title() -> String { "PisiLinux Install".to_string() } fn default_subtitle() -> String { "PiSi GNU/LINUX".to_string() } -fn default_yali_logo() -> String { "assets/icons/YALI_icon_LIGHT.svg".to_string() } -fn default_pisi_logo_dark() -> String { "assets/pisi-logo-dark.png".to_string() } -fn default_pisi_logo_light() -> String { "assets/pisi-logo-light.png".to_string() } +fn default_yali_logo() -> String { "assets/icons/YALI_icon_DARK.png".to_string() } +fn default_pisi_logo_dark() -> String { "assets/icons/YALI_icon_DARK.png".to_string() } +fn default_pisi_logo_light() -> String { "assets/icons/YALI_icon_DARK.png".to_string() } fn default_interval() -> u64 { 6 } fn default_primary() -> String { "#1a73e8".to_string() } fn default_accent() -> String { "#34a853".to_string() } diff --git a/src/funct.rs b/src/funct.rs index 7e3e0ec..22bc55d 100644 --- a/src/funct.rs +++ b/src/funct.rs @@ -45,19 +45,18 @@ pub fn form_input_password( show_password: &mut bool, ) -> eframe::egui::Response { let width_percent = 0.90; - let height = 32.0; + let height = 18.0; let toplam_genislik = ui.available_width() * width_percent; - let buton_genislik = 32.0; + let buton_genislik = 18.0; let alan_genislik = toplam_genislik - buton_genislik - 4.0; let mut response: Option = None; ui.visuals_mut().override_text_color = Some(eframe::egui::Color32::from_rgb(30, 30, 30)); - // SVG içeriklerini string olarak tanımlıyoruz - let goz_acik_svg = r#""#; - let goz_kapali_svg = r#""#; + // Remixicon karakterlerini kullanıyoruz + let goz_ikonu = if *show_password { "\u{ECB5}" } else { "\u{ECB7}" }; eframe::egui::Frame::none() .fill(eframe::egui::Color32::WHITE) @@ -71,27 +70,18 @@ pub fn form_input_password( eframe::egui::vec2(alan_genislik, height), eframe::egui::TextEdit::singleline(text) .password(!*show_password) - .frame(false) + .frame(false) ); response = Some(r); - // Duruma göre ilgili SVG string'ini seçip byte dizisine (&[u8]) çeviriyoruz - let (uri, svg_bytes) = if *show_password { - ("bytes://goz_acik.svg", goz_acik_svg.as_bytes()) - } else { - ("bytes://goz_kapali.svg", goz_kapali_svg.as_bytes()) - }; - - // Image::from_bytes kullanarak imajı güvenli bir şekilde yüklüyoruz - let svg_gosterici = eframe::egui::Image::from_bytes(uri, svg_bytes) - .tint(eframe::egui::Color32::from_rgb(120, 120, 120)) - .max_width(18.0) - .max_height(18.0); - - // 2. SVG İkonlu Buton - let btn = eframe::egui::Button::image(svg_gosterici) - .frame(false) - .min_size(eframe::egui::vec2(buton_genislik, height)); + // 2. Remixicon İkonlu Buton + let btn = eframe::egui::Button::new( + eframe::egui::RichText::new(goz_ikonu) + .size(14.0) + .color(eframe::egui::Color32::from_rgb(120, 120, 120)) + ) + .frame(false) + .min_size(eframe::egui::vec2(buton_genislik, height)); if ui.add(btn).on_hover_cursor(eframe::egui::CursorIcon::PointingHand).clicked() { *show_password = !*show_password; diff --git a/src/installer.rs b/src/installer.rs index f81360e..a0064b6 100644 --- a/src/installer.rs +++ b/src/installer.rs @@ -184,6 +184,8 @@ pub struct CustomPartition { pub luks_password: String, /// LUKS harici adı (ör. "cryptroot") pub luks_name: String, + /// false = biçimlendir, true = olduğu gibi bırak (mevcut bölümleri koru) + pub skip_format: bool, } /// Kurulum boyunca toplanan tüm veriler. @@ -241,17 +243,12 @@ pub struct GlobalState { /// true olmadan kurulum ilerleyemez. pub oem_password_changed: bool, pub selected_package_groups: Vec, - /// branding.toml [slides.icons] tablosundan yüklenen ikon → dosya URI eşlemesi. - /// Slideshow bu map üzerinden çalışma zamanında görsel yollarını çözümler. - pub branding_icons: std::collections::HashMap, /// Sidebar için koyu tema logo URI'si. pub branding_yali_dark: String, pub branding_pisi_dark: String, /// Sidebar için açık tema logo URI'si. pub branding_yali_light: String, pub branding_pisi_light: String, - /// branding.toml dosyasından yüklenen slaytlar. - pub branding_slides: Vec, } impl Default for GlobalState { @@ -305,12 +302,10 @@ impl Default for GlobalState { display_manager: "sddm".to_string(), autologin: false, desktop_environment: detect_desktop_environment(), - branding_icons: std::collections::HashMap::new(), branding_pisi_dark: String::new(), branding_pisi_light: String::new(), branding_yali_dark: String::new(), branding_yali_light: String::new(), - branding_slides: Vec::new(), } } } @@ -455,24 +450,24 @@ impl InstallerStep for WelcomeStep { for check in &self.checks { match check.status { CheckStatus::Pass => { - ui.add( - egui::Image::new(egui::include_image!("../assets/icons/check.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_success()) + ui.label( + egui::RichText::new("\u{EB7B}") + .color(theme::c_success()) + .size(18.0) // SVG max_width/height yerine font boyutu ); } CheckStatus::Warn => { - ui.add( - egui::Image::new(egui::include_image!("../assets/icons/warning-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_warning()) - ); + ui.label( + egui::RichText::new("\u{EA21}") + .color(theme::c_warning()) + .size(18.0) + ); } CheckStatus::Fail => { - ui.add( - egui::Image::new(egui::include_image!("../assets/icons/fail-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_error()) + ui.label( + egui::RichText::new("\u{F4C6}") + .color(theme::c_error()) + .size(18.0) ); } } diff --git a/src/jobs/autologin.rs b/src/jobs/autologin.rs new file mode 100644 index 0000000..45465fe --- /dev/null +++ b/src/jobs/autologin.rs @@ -0,0 +1,101 @@ +use super::{Job, UiSender}; + +/// Otomatik oturum açma ayarını hedef sisteme uygular. +/// +/// Ekran yöneticisi (sddm/lightdm/gdm) yapılandırması ISO'da hazır olduğu +/// için burada değiştirilmez; yalnızca kullanıcının seçtiği "otomatik oturum +/// açma" bilgisi mevcut konfigürasyona eklenir. Autologin kapalıysa hiçbir +/// şeye dokunulmaz (ISO varsayılanında otomatik giriş yoktur). +pub struct ConfigureAutologinJob { + pub mount: String, + pub display_manager: String, + pub autologin: bool, + pub username: String, + pub desktop_environment: String, +} + +#[async_trait::async_trait] +impl Job for ConfigureAutologinJob { + fn name(&self) -> &str { "job_autologin" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + if !self.autologin { + ui.log("Otomatik oturum açma kapalı, değişiklik yapılmıyor."); + return Ok(()); + } + + ui.log(format!( + "Otomatik oturum açma uygulanıyor: {} ({})", + self.username, self.display_manager + )); + + let session = match self.desktop_environment.as_str() { + "plasma" => "plasmax11.desktop", + "xfce" => "xfce.desktop", + "gnome" => "gnome.desktop", + "cinnamon" => "cinnamon.desktop", + "budgie" => "budgie-desktop.desktop", + "lxde" => "LXDE.desktop", + "lxqt" => "lxqt.desktop", + "mate" => "mate.desktop", + "lumina" => "lumina-desktop.desktop", + _ => "plasmax11.desktop", + }; + + match self.display_manager.as_str() { + "sddm" => { + // ISO'nun /usr/lib/sddm/sddm.conf.d içeriğine dokunmadan + // ayrı bir drop-in dosyası ile autologin eklenir. + let dir = format!("{}/usr/lib/sddm/sddm.conf.d", self.mount); + tokio::fs::create_dir_all(&dir).await + .map_err(|e| format!("sddm.conf.d oluşturulamadı: {}", e))?; + let content = format!( + "[Autologin]\nUser={}\nSession={}\n", + self.username, session + ); + tokio::fs::write(format!("{}/autologin.conf", dir), content) + .await + .map_err(|e| format!("autologin.conf yazılamadı: {}", e))?; + } + "lightdm" => { + let dir = format!("{}/etc/lightdm", self.mount); + let _ = tokio::fs::create_dir_all(&dir).await; + let conf = format!("{}/lightdm.conf", dir); + let mut content = tokio::fs::read_to_string(&conf) + .await + .unwrap_or_default(); + if !content.contains("[Seat:*]") { + content.push_str("[Seat:*]\n"); + } + if !content.contains("autologin-user=") { + content.push_str(&format!("autologin-user={}\n", self.username)); + content.push_str(&format!("autologin-session={}\n", self.desktop_environment)); + } + tokio::fs::write(&conf, content) + .await + .map_err(|e| format!("lightdm.conf yazılamadı: {}", e))?; + } + "gdm" => { + let dir = format!("{}/etc/gdm", self.mount); + let _ = tokio::fs::create_dir_all(&dir).await; + let conf = format!("{}/custom.conf", dir); + let content = format!( + "[daemon]\nAutomaticLoginEnable=true\nAutomaticLogin={}\nDefaultSession={}\n", + self.username, session + ); + tokio::fs::write(&conf, content) + .await + .map_err(|e| format!("gdm/custom.conf yazılamadı: {}", e))?; + } + _ => { + ui.log(format!( + "⚠ Bilinmeyen ekran yöneticisi: {} — autologin uygulanmadı", + self.display_manager + )); + } + } + + ui.log("✓ Otomatik oturum açma yapılandırması tamamlandı"); + Ok(()) + } +} diff --git a/src/jobs/bootloader.rs b/src/jobs/bootloader.rs new file mode 100644 index 0000000..fcd49e3 --- /dev/null +++ b/src/jobs/bootloader.rs @@ -0,0 +1,541 @@ +use std::sync::atomic::Ordering; +use super::{blkid_uuid, DEMO_MODE, get_fs_type, is_mount_point, part_path, run_cmd, run_chroot, Job, UiSender}; + +/// initramfs yeniler (GRUB öncesi zorunlu). +/// PisiLinux `dracut` kullanıyorsa `dracut -f --regenerate-all`, +/// mkinitcpio kullanıyorsa `mkinitcpio -P`. +pub struct GenerateInitramfsJob { + pub mount: String, + pub encrypt_root: bool, + pub lvm_active: bool, +} + +#[async_trait::async_trait] +impl Job for GenerateInitramfsJob { + fn name(&self) -> &str { "job_initramfs" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // LVM için initramfs'e lvm modülü/hook'u ekleyen konfigürasyon + if self.lvm_active && !self.encrypt_root { + ui.log("LVM algılandı: initramfs LVM ayarlanıyor…"); + + // dracut: add lvm module + let dracut_conf = format!("{}/etc/dracut.conf.d/99-lvm.conf", self.mount); + let _ = tokio::fs::create_dir_all(format!("{}/etc/dracut.conf.d", self.mount)).await; + let _ = tokio::fs::write(&dracut_conf, "add_dracutmodules+=\" lvm \"\n").await; + + // mkinitcpio: add lvm2 hook + // Hem HOOKS="..." hem HOOKS=(... ) sözdizimi desteklenir. + let mkinitcpio_conf = format!("{}/etc/mkinitcpio.conf", self.mount); + if tokio::fs::metadata(&mkinitcpio_conf).await.is_ok() { + if let Ok(content) = tokio::fs::read_to_string(&mkinitcpio_conf).await { + if content.contains("HOOKS=") && !content.contains("lvm2") { + let new_content = content + .replace("HOOKS=\"", "HOOKS=\"lvm2 ") + .replace("HOOKS=(", "HOOKS=(lvm2 "); + let _ = tokio::fs::write(&mkinitcpio_conf, new_content).await; + } + } + } + } + + // LUKS için initramfs'e cryptsetup ekleyen konfigürasyon + if self.encrypt_root { + ui.log("LUKS algılandı: initramfs cryptsetup ayarlanıyor…"); + + // dracut: add crypt module + let dracut_conf = format!("{}/etc/dracut.conf.d/99-luks.conf", self.mount); + tokio::fs::create_dir_all( + format!("{}/etc/dracut.conf.d", self.mount) + ).await.map_err(|e| format!("dracut.conf.d oluşturulamadı: {}", e))?; + tokio::fs::write(&dracut_conf, "add_dracutmodules+=\" crypt lvm \"\n") + .await.map_err(|e| format!("dracut luks conf yazılamadı: {}", e))?; + + // mkinitcpio: add encrypt hook + // Hem HOOKS="..." hem HOOKS=(... ) sözdizimi desteklenir. + let mkinitcpio_conf = format!("{}/etc/mkinitcpio.conf", self.mount); + if tokio::fs::metadata(&mkinitcpio_conf).await.is_ok() { + let content = tokio::fs::read_to_string(&mkinitcpio_conf) + .await.unwrap_or_default(); + if content.contains("HOOKS=") && !content.contains("encrypt") { + let new_content = content + .replace("HOOKS=\"", "HOOKS=\"encrypt ") + .replace("HOOKS=(", "HOOKS=(encrypt "); + let _ = tokio::fs::write(&mkinitcpio_conf, new_content).await; + } + } + } + + // PisiLinux /sbin/mkinitramfs, dracut, mkinitcpio sırasıyla dene + let cmds: &[&[&str]] = &[ + &["mkinitramfs", "-f"], + &["dracut", "-f", "--regenerate-all"], + &["mkinitcpio", "-P"], + ]; + for cmd in cmds { + if run_chroot(&self.mount, cmd).await.is_ok() { + ui.log(format!("initramfs oluşturuldu ({})", cmd[0])); + return Ok(()); + } + } + Err("initramfs oluşturulamadı: mkinitramfs, dracut, mkinitcpio denendi".to_string()) + } +} + + + +/// GRUB bootloader kurulumu (UEFI veya BIOS). +pub struct InstallGrubJob { + pub disk: String, + pub mount: String, + pub is_uefi: bool, + pub boot_device: String, + pub timeout: u32, + pub password: String, + pub kernel_options: String, + pub encrypt_root: bool, +} + +#[async_trait::async_trait] +impl Job for InstallGrubJob { + fn name(&self) -> &str { "job_bootloader" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // Ana dizinleri oluştur (demo modunda rsync çalışmaz) + let etc_default = format!("{}/etc/default", self.mount); + let _ = tokio::fs::create_dir_all(&etc_default).await; + let grub_d = format!("{}/etc/grub.d", self.mount); + let _ = tokio::fs::create_dir_all(&grub_d).await; + + // GRUB şifresi (varsa) — grub-mkpasswd-pbkdf2 ile hash üretilir, + // düz metin asla diske yazılmaz. + if !self.password.is_empty() { + ui.log("GRUB şifresi PBKDF2 ile hashleniyor…"); + + // grub-mkpasswd-pbkdf2 şifreyi stdin'den iki kez okur (şifre + doğrulama) + use tokio::io::AsyncWriteExt; + let pw_input = format!("{}\n{}\n", self.password, self.password); + let mut child = tokio::process::Command::new("grub-mkpasswd-pbkdf2") + .stdin(std::process::Stdio::piped()) + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::null()) + .spawn() + .map_err(|e| format!("grub-mkpasswd-pbkdf2 başlatılamadı: {}", e))?; + + if let Some(mut stdin) = child.stdin.take() { + stdin.write_all(pw_input.as_bytes()).await + .map_err(|e| format!("grub-mkpasswd-pbkdf2 stdin hatası: {}", e))?; + } + + let output = child.wait_with_output().await + .map_err(|e| format!("grub-mkpasswd-pbkdf2 bekleme hatası: {}", e))?; + + // Çıktıdan "grub.pbkdf2.sha512...." token'ını ayrıştır + let stdout = String::from_utf8_lossy(&output.stdout); + let hash = stdout + .lines() + .find_map(|l| { + let pos = l.find("grub.pbkdf2")?; + Some(l[pos..].trim().to_string()) + }) + .ok_or("grub-mkpasswd-pbkdf2 çıktısında hash bulunamadı")?; + + let custom_grub = format!( + "#!/bin/sh\nset superusers=\"root\"\npassword_pbkdf2 root {}\n", + hash + ); + let pw_path = format!("{}/etc/grub.d/40_custom", self.mount); + tokio::fs::write(&pw_path, custom_grub) + .await + .map_err(|e| format!("GRUB şifre dosyası yazılamadı: {}", e))?; + run_cmd("chmod", &["+x", &pw_path]).await?; + ui.log("GRUB şifresi PBKDF2 hash olarak yazıldı."); + } + + // GRUB timeout ayarı + ui.log(format!("GRUB timeout ayarlanıyor: {}s", self.timeout)); + let default_path = format!("{}/etc/default/grub", self.mount); + let mut grub_default = tokio::fs::read_to_string(&default_path) + .await + .unwrap_or_default(); + // timeout satırını bul/değiştir + let timeout_line = format!("GRUB_TIMEOUT={}", self.timeout); + let found_timeout = grub_default.lines() + .any(|l| l.trim_start().starts_with("GRUB_TIMEOUT=")); + if found_timeout { + let mut lines: Vec = grub_default.lines() + .map(|l| { + if l.trim_start().starts_with("GRUB_TIMEOUT=") { + timeout_line.clone() + } else { + l.to_string() + } + }) + .collect(); + lines.push(String::new()); + grub_default = lines.join("\n"); + } else { + grub_default.push_str(&format!("\n{}\n", timeout_line)); + } + // kernel cmdline + let mut cmdline = self.kernel_options.clone(); + if self.encrypt_root { + // Kök bölüm UUID'sini blkid'den al (LUKS başlık UUID'si) + let (root_num, _swap_num): (u32, u32) = if self.is_uefi { (3, 2) } else { (2, 1) }; + let root_part = part_path(&self.disk, root_num); + let root_uuid = blkid_uuid(&root_part).await.unwrap_or_default(); + let crypt_arg = format!("cryptdevice=UUID={}:cryptroot root=/dev/mapper/cryptroot", root_uuid); + if cmdline.is_empty() { + cmdline = crypt_arg; + } else { + cmdline = format!("{} {}", crypt_arg, cmdline); + } + } + if !cmdline.is_empty() { + let cmdline_line = format!("GRUB_CMDLINE_LINUX=\"{}\"", cmdline); + let found_cmdline = grub_default.lines() + .any(|l| l.trim_start().starts_with("GRUB_CMDLINE_LINUX=")); + if found_cmdline { + let mut lines: Vec = grub_default.lines() + .map(|l| { + if l.trim_start().starts_with("GRUB_CMDLINE_LINUX=") { + cmdline_line.clone() + } else { + l.to_string() + } + }) + .collect(); + lines.push(String::new()); + grub_default = lines.join("\n"); + } else { + grub_default.push_str(&format!("{}\n", cmdline_line)); + } + } + tokio::fs::write(&default_path, grub_default) + .await + .map_err(|e| format!("/etc/default/grub yazılamadı: {}", e))?; + + // Chroot içinde grub2-install çalıştır (UEFI veya BIOS) + let mut grub_args = vec!["grub2-install"]; + let install_dev = if self.boot_device.is_empty() { self.disk.as_str() } else { self.boot_device.as_str() }; + + if self.is_uefi { + // /boot/efi mevcut değilse veya bağlı değilse bağla + let host_efi_dir = format!("{}/boot/efi", self.mount); + let efi_dir = std::path::Path::new(&host_efi_dir); + if !efi_dir.exists() || !is_mount_point(efi_dir) { + ui.log("/boot/efi bağlanmamış, ESP taranıyor…"); + tokio::fs::create_dir_all(&host_efi_dir).await + .map_err(|e| format!("{}/boot/efi oluşturulamadı: {}", self.mount, e))?; + // Önyükleyici aygıtında ESP bölümü ara (önce 1, sonra 2) + for part_num in &[1u32, 2] { + let esp_candidate = part_path(install_dev, *part_num); + if let Ok(fs_type) = get_fs_type(&esp_candidate).await { + if fs_type == "vfat" { + ui.log(format!("{} ESP olarak /boot/efi'ye bağlanıyor…", esp_candidate)); + let _ = run_cmd("mount", &[&esp_candidate, &host_efi_dir]).await; + break; + } + } + } + } + + let efi_dir_arg = "--efi-directory=/boot/efi"; + ui.log(format!("GRUB UEFI modu {} aygıtına kuruluyor (chroot içinde)…", install_dev)); + grub_args.extend_from_slice(&[ + "--target=x86_64-efi", + efi_dir_arg, + "--bootloader-id=PisiLinux", + "--recheck", + install_dev, + ]); + } else { + ui.log(format!("GRUB BIOS modu {} aygıtına kuruluyor (chroot içinde)…", install_dev)); + grub_args.extend_from_slice(&[ + "--target=i386-pc", + install_dev, + "--recheck", + ]); + } + + run_chroot(&self.mount, &grub_args).await?; + + // device.map: tüm diskleri kapsayan bir mapping oluştur + ui.log("GRUB device.map oluşturuluyor…"); + let mut device_map = String::new(); + if let Ok(entries) = std::fs::read_dir("/dev") { + let mut devices: Vec = entries + .filter_map(|e| e.ok()) + .filter(|e| { + let name = e.file_name(); + let s = name.to_string_lossy(); + let s = s.as_ref(); + match s { + x if x.starts_with("sd") || x.starts_with("vd") => { + // sdX / vdX = disk; sdX1 / vdX1 = partition + x.len() <= 3 || !x[3..].chars().any(|c| c.is_ascii_digit()) + } + x if x.starts_with("nvme") => { + // nvme0n1 = disk; nvme0n1p1 = partition + !x.contains('p') + } + x if x.starts_with("mmcblk") => { + // mmcblk0 = disk; mmcblk0p1 = partition + !x.contains('p') + } + _ => false, + } + }) + .map(|e| format!("/dev/{}", e.file_name().to_string_lossy())) + .collect(); + devices.sort(); + for (i, dev) in devices.iter().enumerate() { + device_map.push_str(&format!("(hd{}) {}\n", i, dev)); + } + } + if !device_map.is_empty() { + let dm_path = format!("{}/boot/grub2/device.map", self.mount); + let _ = tokio::fs::write(&dm_path, device_map).await; + } + + // /etc/grub.d/30_uefi-firmware: EFI firmware menüsü + Windows EFI taraması + let uefi_script = r#"#!/bin/sh +set -e + +# GRUB2 Helper Script - Pisi Linux / Custom ISO +prefix="/usr" +exec_prefix="/usr" +datarootdir="/usr/share" + +export TEXTDOMAIN=grub +export TEXTDOMAINDIR="${datarootdir}/locale" + +. "${datarootdir}/grub/grub-mkconfig_lib" + +# 1. EFI Firmware (BIOS Setup) Menü Eklentisi +efi_vars_dir=/sys/firmware/efi/efivars +EFI_GLOBAL_VARIABLE=8be4df61-93ca-11d2-aa0d-00e098032b8c +OsIndications="$efi_vars_dir/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE" + +if [ -e "$OsIndications" ] && \ + [ "$(( $(printf 0x%x \'"$(cat $OsIndications | cut -b1)") & 1 ))" = 1 ]; then + LABEL="System setup" + + cat << EOF +if [ "\$grub_platform" = "efi" ]; then + fwsetup --is-supported + if [ "\$?" = 0 ]; then + menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' { + fwsetup + } + fi +fi +EOF +fi + +# 2. Dinamik Windows EFI Taraması (Disk Bağımsız) +if [ -d /sys/firmware/efi ]; then + + TEMP_MOUNT="/tmp/grub_win_detect" + WIN_UUID="" + + # Sistemdeki vfat (EFI) bölümlerini al + EFI_PARTS=$(lsblk -list -no NAME,FSTYPE 2>/dev/null | awk '$2=="vfat" {print $1}') + + for part in $EFI_PARTS; do + DEV="/dev/$part" + + MNT=$(findmnt -n -o TARGET "$DEV" 2>/dev/null || true) + WAS_MOUNTED=1 + + if [ -z "$MNT" ]; then + WAS_MOUNTED=0 + MNT="$TEMP_MOUNT" + mkdir -p "$MNT" + mount -o ro "$DEV" "$MNT" 2>/dev/null || continue + fi + + if [ -f "$MNT/EFI/Microsoft/Boot/bootmgfw.efi" ]; then + WIN_UUID=$(blkid -s UUID -o value "$DEV" 2>/dev/null || true) + if [ "$WAS_MOUNTED" -eq 0 ]; then + umount "$MNT" 2>/dev/null || true + fi + break + fi + + if [ "$WAS_MOUNTED" -eq 0 ]; then + umount "$MNT" 2>/dev/null || true + fi + done + + rm -rf "$TEMP_MOUNT" + + if [ -n "$WIN_UUID" ]; then +cat << EOF +menuentry "Windows Boot Manager (UEFI)" --class windows --class os { + insmod part_gpt + insmod fat + insmod search_fs_uuid + insmod chain + search --fs-uuid --set=root ${WIN_UUID} + chainloader /EFI/Microsoft/Boot/bootmgfw.efi +} +EOF + fi + +fi +"#; + let uefi_script_path = format!("{}/etc/grub.d/30_uefi-firmware", self.mount); + if let Err(e) = tokio::fs::write(&uefi_script_path, uefi_script).await { + ui.log(format!("/etc/grub.d/30_uefi-firmware yazılamadı: {}", e)); + } else { + ui.log("30_uefi-firmware güncellendi (EFI firmware + Windows taraması)."); + } + + ui.log("grub2-mkconfig çalıştırılıyor…"); + // grub2-mkconfig'teki set -e'yi geçici olarak set +e yap; + // böylece grub2-probe hataları script'i durdurmaz, os-prober hatayı atlayıp + // sonraki aygıtlarla devam edebilir. stderr'deki probe uyarıları bastırılır. + let _ = run_chroot(&self.mount, &["sh", "-c", + "cp /usr/sbin/grub2-mkconfig /usr/sbin/grub2-mkconfig.bak 2>/dev/null; \ + sed -i 's/^set -e/set +e/' /usr/sbin/grub2-mkconfig 2>/dev/null; \ + GRUB_DISABLE_OS_PROBER=false grub2-mkconfig -o /boot/grub2/grub.cfg 2>/dev/null; \ + cp /usr/sbin/grub2-mkconfig.bak /usr/sbin/grub2-mkconfig 2>/dev/null; \ + rm -f /usr/sbin/grub2-mkconfig.bak 2>/dev/null", + ]).await; + + let grub_cfg_path = format!("{}/boot/grub2/grub.cfg", self.mount); + let grub_cfg_ok = std::path::Path::new(&grub_cfg_path).exists() + && std::fs::metadata(&grub_cfg_path).map(|m| m.len() > 0).unwrap_or(false); + + if grub_cfg_ok { + ui.log("GRUB yapılandırması başarıyla oluşturuldu."); + Ok(()) + } else { + ui.log("grub2-mkconfig başarısız, minimal yapılandırma oluşturuluyor…"); + generate_minimal_grub_cfg(ui, &self.mount, &self.disk, &self.boot_device, self.is_uefi, &self.kernel_options).await + } + } +} + +/// grub2-mkconfig başarısız olursa elle minimal bir grub.cfg oluşturur. +/// Windows ESP tespit edilirse chainloader girişi de ekler. +async fn generate_minimal_grub_cfg( + ui: &UiSender, mount: &str, disk: &str, boot_device: &str, is_uefi: bool, kernel_options: &str, +) -> Result<(), String> { + let boot_dir = format!("{}/boot", mount); + let grub_dir = format!("{}/boot/grub2", mount); + tokio::fs::create_dir_all(&grub_dir).await + .map_err(|e| format!("{} oluşturulamadı: {}", grub_dir, e))?; + + let (root_num, _swap_num) = if is_uefi { (3u32, 2u32) } else { (2u32, 1u32) }; + let root_part = part_path(disk, root_num); + let root_uuid = blkid_uuid(&root_part).await + .map_err(|e| format!("Kök UUID okunamadı: {}", e))?; + + let mut kernel_file: Option = None; + let mut initrd_files: Vec = Vec::new(); + let mut ucode_files: Vec = Vec::new(); + + if let Ok(mut entries) = tokio::fs::read_dir(&boot_dir).await { + while let Ok(Some(entry)) = entries.next_entry().await { + let name = entry.file_name().to_string_lossy().to_string(); + if name.starts_with("kernel-") || name.starts_with("vmlinuz-") { + kernel_file = Some(name); + } else if name.starts_with("initramfs-") || name.starts_with("initrd-") { + initrd_files.push(name); + } else if name.starts_with("intel-ucode") || name.starts_with("amd-ucode") { + ucode_files.push(name); + } + } + } + + // Demo modunda gerçek dosyalar kopyalanmadığı için /boot boştur; + // sentetik bir kernel adıyla akışın tamamı denenebilir. + let kernel = match kernel_file { + Some(k) => k, + None if DEMO_MODE.load(Ordering::Relaxed) => "kernel-demo".to_string(), + None => return Err(format!("{}/boot/ içinde kernel bulunamadı", mount)), + }; + + let kernel_ver = kernel.strip_prefix("kernel-") + .or_else(|| kernel.strip_prefix("vmlinuz-")) + .unwrap_or(""); + let initrd = if kernel_ver.is_empty() { + initrd_files.first().cloned() + } else { + let matching: Vec = initrd_files.iter() + .filter(|f| f.contains(kernel_ver)) + .cloned() + .collect(); + matching.first().cloned() + }; + + let mut cfg = String::new(); + cfg.push_str("set default=0\n"); + cfg.push_str("set timeout=5\n\n"); + + // PisiLinux girişi + if is_uefi { + cfg.push_str("menuentry \"PisiLinux\" {\n"); + cfg.push_str(" insmod part_gpt\n insmod ext2\n"); + cfg.push_str(&format!(" search --no-floppy --fs-uuid --set=root {}\n", root_uuid)); + cfg.push_str(&format!(" linux /boot/{} root=UUID={} rw quiet", kernel, root_uuid)); + } else { + cfg.push_str("menuentry \"PisiLinux\" {\n"); + cfg.push_str(" insmod ext2\n set root=(hd0,msdos2)\n"); + cfg.push_str(&format!(" linux /boot/{} root=UUID={} rw quiet", kernel, root_uuid)); + } + + if !kernel_options.is_empty() { + cfg.push_str(&format!(" {}", kernel_options)); + } + cfg.push('\n'); + + if !ucode_files.is_empty() || !initrd_files.is_empty() { + let mut initrd_line = String::from(" initrd"); + for ucode in &ucode_files { + initrd_line.push_str(&format!(" /boot/{}", ucode)); + } + if let Some(ref i) = initrd { + initrd_line.push_str(&format!(" /boot/{}", i)); + } else if !initrd_files.is_empty() { + for f in &initrd_files { + initrd_line.push_str(&format!(" /boot/{}", f)); + } + } + cfg.push_str(&initrd_line); + cfg.push('\n'); + } + cfg.push_str("}\n"); + + // Windows chainloader girişi (yalnız UEFI) + if is_uefi && !boot_device.is_empty() && boot_device != disk { + let mut win_uuid: Option = None; + for part_num in &[1u32, 2] { + let esp_candidate = part_path(boot_device, *part_num); + if let Ok(fs_type) = get_fs_type(&esp_candidate).await { + if fs_type == "vfat" { + if let Ok(uuid) = blkid_uuid(&esp_candidate).await { + win_uuid = Some(uuid); + break; + } + } + } + } + if let Some(ref uuid) = win_uuid { + cfg.push_str(&format!("\nmenuentry \"Windows Boot Manager\" {{\n")); + cfg.push_str(" insmod part_gpt\n insmod fat\n"); + cfg.push_str(&format!(" search --no-floppy --fs-uuid --set=root {}\n", uuid)); + cfg.push_str(" chainloader /EFI/Microsoft/Boot/bootmgfw.efi\n"); + cfg.push_str("}\n"); + ui.log("Windows Boot Manager eklendi."); + } + } + + tokio::fs::write(&format!("{}/boot/grub2/grub.cfg", mount), cfg).await + .map_err(|e| format!("grub.cfg yazılamadı: {}", e))?; + + ui.log("Minimal GRUB yapılandırması oluşturuldu."); + Ok(()) +} diff --git a/src/jobs/execution.rs b/src/jobs/execution.rs new file mode 100644 index 0000000..ca861d0 --- /dev/null +++ b/src/jobs/execution.rs @@ -0,0 +1,442 @@ +use std::sync::atomic::Ordering; +use std::time::Instant; +use tokio::io::{AsyncBufReadExt, BufReader}; +use tokio::process::Command; + +use super::{run_cmd, DEMO_MODE, Job, UiSender}; + +/// Sistem dosyalarını kopyala (rsync). +pub struct CopyFilesJob { + /// Canlı sistemin kök dizini; ör. "/run/livecd/squashfs-root/" + pub source: String, + /// Hedef bağlama noktası; ör. "/mnt" + pub target: String, +} + +#[async_trait::async_trait] +impl Job for CopyFilesJob { + fn name(&self) -> &str { "job_copy_files" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + ui.log(format!("[DEBUG] CopyFilesJob başladı")); + ui.log(format!("[DEBUG] Kaynak: '{}'", self.source)); + ui.log(format!("[DEBUG] Hedef: '{}'", self.target)); + + // Kaynak dizini kontrol et + let source_path = std::path::Path::new(&self.source); + let source_exists = source_path.exists(); + let source_readable = source_exists && source_path.is_dir(); + ui.log(format!("[DEBUG] Kaynak mevcut: {}, dizin: {}", source_exists, source_readable)); + + if !source_exists { + ui.log(format!("[DEBUG] Kaynak dizin içeriği aranıyor...")); + // Kaynağın bir üst dizinini dene + let parent = source_path.parent(); + if let Some(p) = parent { + if p.exists() { + if let Ok(entries) = std::fs::read_dir(p) { + for entry in entries.flatten().take(20) { + ui.log(format!("[DEBUG] /{:?}", entry.path())); + } + } + } + } else { + ui.log("[DEBUG] Kaynağın parent'ı yok (kök dizin olabilir)"); + } + } else if source_readable { + // İlk 10 girdiyi listele + if let Ok(entries) = std::fs::read_dir(source_path) { + let mut count = 0; + for entry in entries.flatten().take(10) { + ui.log(format!("[DEBUG] {:?}", entry.path())); + count += 1; + } + ui.log(format!("[DEBUG] (ilk {} girdi listelendi)", count)); + } + } + + ui.log(format!("rsync {} → {}", self.source, self.target)); + ui.copy_started(); + + let is_root_source = self.source.trim_end_matches('/') == ""; + + // ── rsync exclude'leri ── + // Aynı liste hem rsync'e hem de aşağıdaki bilgilendirme amaçlı find + // sayacına uygulanır. İlerleme artık rsync'in kendi bayt-tabanlı + // yüzdesinden (--info=progress2) alındığı için sayım farkları barla + // ilgili değildir; find yalnızca "N dosya kopyalanacak" logu içindir. + let mut excludes: Vec = vec![ + "/proc/**".to_string(), + "/sys/**".to_string(), + "/dev/**".to_string(), + "/run/**".to_string(), + "/tmp/**".to_string(), + "/var/tmp/**".to_string(), + "/var/cache/**".to_string(), + "/home/**".to_string(), + "/root/**".to_string(), + "/lost+found".to_string(), + "*.sqfs".to_string(), + ]; + + // Kaynak canlı sistem köküyse ekstra exclude'ler + if is_root_source { + excludes.extend_from_slice(&[ + "/bootmnt/**".to_string(), + "/ro_branch/**".to_string(), + "/mnt/**".to_string(), + "/media/**".to_string(), + "/var/log/journal/**".to_string(), + "/var/lib/pisi/cache/**".to_string(), + "/var/lib/pisi/archives/**".to_string(), + "/etc/adjtime".to_string(), + "/etc/mtab".to_string(), + "/etc/resolv.conf".to_string(), + "/etc/hostname".to_string(), + "/etc/machine-id".to_string(), + ]); + } + + // ── Önce find ile toplam dosya sayısını bul (yalnızca bilgilendirme) ── + let find_path = self.source.trim_end_matches('/'); + let find_path = if find_path.is_empty() { "/" } else { find_path }; + let _total_files = { + let mut cmd = Command::new("find"); + cmd.arg(find_path); + if is_root_source { + cmd.arg("-xdev"); + } + for ex in &excludes { + if let Some(dir) = ex.strip_suffix("/**") { + cmd.args(["-path", dir, "-prune", "-o"]); + } else if ex.starts_with('/') { + cmd.args(["-path", ex.as_str(), "-prune", "-o"]); + } else { + cmd.args(["-name", ex.as_str(), "-prune", "-o"]); + } + } + cmd.args(["-type", "f", "-print"]); + cmd.stdout(std::process::Stdio::piped()); + cmd.stderr(std::process::Stdio::null()); + match cmd.spawn() { + Ok(mut c) => { + let stdout = c.stdout.take() + .ok_or_else(|| "find stdout alınamadı".to_string())?; + let r = BufReader::new(stdout); + let mut lines = r.lines(); + let mut n: u64 = 0; + while let Ok(Some(_)) = lines.next_line().await { + n += 1; + } + let _ = c.wait().await; + if n > 0 { + ui.log(format!("{} dosya kopyalanacak", n)); + } + n + } + Err(_) => 0 + } + }; + + let mut args: Vec = vec![ + "-aAXH".to_string(), + "--out-format=%n".to_string(), + // Bayt-tabanlı ilerleme (stdout'a \r ile karışır). rsync kendisi + // hesapladığı için %100'e ancak kopyalama gerçekten bitince ulaşır. + "--info=progress2".to_string(), + // Incremental recursion (varsayılan) dosya listesini aktarım + // sırasında büyütür; toplam bayt revize olunca yüzde geriye + // düşebilir (%98 → %65 gibi). Liste önden tam kurulunca yüzde + // monoton ilerler. + "--no-inc-recursive".to_string(), + ]; + for ex in &excludes { + args.push(format!("--exclude={}", ex)); + } + + if let (Ok(source_path), Ok(target_path)) = ( + std::path::Path::new(&self.source).canonicalize(), + std::path::Path::new(&self.target).canonicalize(), + ) { + if let Ok(relative_target) = target_path.strip_prefix(&source_path) { + if !relative_target.as_os_str().is_empty() { + // İçerik hariç tutulur ama dizinin kendisi boş olarak kalır + // (ör. /mnt). Çıplak desen kullanılırsa dizinin kendisi de + // budanır ve kurulu sistemde /mnt hiç oluşmaz. + args.push(format!("--exclude={}/**", relative_target.display())); + } + } + } + + args.push(self.source.clone()); + args.push(self.target.clone()); + + if DEMO_MODE.load(Ordering::Relaxed) { + ui.log("rsync /run/livecd/squashfs-root/ → /mnt (DEMO)"); + let steps = 20; + for i in 0..steps { + let p = (i + 1) as f32 / steps as f32; + ui.current_file(format!("/usr/share/doc/{}/README.md", (i * 137) % 50)); + ui.sub_progress(p); + tokio::time::sleep(std::time::Duration::from_millis(150)).await; + } + ui.copy_finished(); + return Ok(()); + } + + let mut child = Command::new("rsync") + .args(&args) + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::piped()) + .spawn() + .map_err(|e| format!("rsync çalıştırılamadı: {}", e))?; + + let stdout = child.stdout.take() + .ok_or_else(|| "rsync stdout alınamadı".to_string())?; + let stderr = child.stderr.take() + .ok_or_else(|| "rsync stderr alınamadı".to_string())?; + + // Stderr'i arka planda oku (hata birikimi ve tampon taşmasını engelle). + // progress2 satırları stdout'a karıştığı için yalnızca hata metni toplanır. + let stderr_buf = std::sync::Arc::new(tokio::sync::Mutex::new(String::new())); + let stderr_buf_clone = stderr_buf.clone(); + tokio::spawn(async move { + let r = BufReader::new(stderr); + let mut lines = r.lines(); + while let Ok(Some(l)) = lines.next_line().await { + let mut b = stderr_buf_clone.lock().await; + b.push_str(&l); + b.push('\n'); + } + }); + + // Stdout: --out-format=%n ile dosya adları, --info=progress2 ile + // bayt-tabanlı ilerleme satırları aynı akışa, \r ve \n ayraçlarıyla + // karışık olarak yazılır. Her parçayı içeriğine göre sınıflandırırız: + // "%" içerenler ilerleme (yüzde), diğerleri dosya adıdır. + let reader = BufReader::new(stdout); + let mut lines = reader.lines(); + let mut file_count: u64 = 0; + // Son gönderilen yüzde — barın geriye düşmemesi için (--no-inc-recursive + // ile gerekmemesi gerekir ama yine de garanti). + let mut last_sub: f32 = 0.0; + // Son UI güncellemesi — çok sık güncelleme GPU (özellikle Intel UMA) baskısını azaltır + let mut last_update = Instant::now(); + + while let Some(line) = lines.next_line().await + .map_err(|e| format!("rsync çıktısı okunamadı: {}", e))? + { + for segment in line.split('\r') { + let trimmed = segment.trim(); + if trimmed.is_empty() { + continue; + } + + if trimmed.contains('%') { + if let Some(pct) = parse_progress_percent(trimmed) { + if pct >= last_sub { + last_sub = pct; + ui.sub_progress(pct); + } + } + continue; + } + + file_count += 1; + + let now = Instant::now(); + if now.duration_since(last_update) >= std::time::Duration::from_millis(50) + || file_count == 1 + || trimmed.contains("Packages") || trimmed.contains("package") + { + ui.current_file(trimmed.to_string()); + last_update = now; + } + } + } + + let status = child.wait().await + .map_err(|e| format!("rsync beklenemedi: {}", e))?; + + if !status.success() { + let err = stderr_buf.lock().await.clone(); + return Err(format!( + "rsync çıkış kodu: {:?}. Hata: {}", + status.code(), + err.trim() + )); + } + + ui.copy_finished(); + Ok(()) + } +} + +/// /proc, /sys, /dev, /dev/pts dizinlerini chroot hedefine bind-mount yapar. +/// Standart `chroot` için gereklidir; kurulum başında çağrılmalıdır. +pub struct MountBindJob { + pub mount: String, // ör. "/mnt" +} + +#[async_trait::async_trait] +impl Job for MountBindJob { + fn name(&self) -> &str { "job_mount_bind" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let mt = &self.mount; + // (kaynak, hedef) — kaynak sistem üzerindeki gerçek path + let bind_dirs = [ + ("/proc", format!("{}/proc", mt)), + ("/sys", format!("{}/sys", mt)), + ("/dev", format!("{}/dev", mt)), + ("/dev/pts", format!("{}/dev/pts", mt)), + ("/run", format!("{}/run", mt)), // COMAR/dbus için gerekli + ]; + for (src, target) in &bind_dirs { + tokio::fs::create_dir_all(target).await + .map_err(|e| format!("{} oluşturulamadı: {}", target, e))?; + ui.log(format!("mount --bind {} {}", src, target)); + run_cmd("mount", &["--bind", src, target]).await?; + } + + // efivarfs — UEFI kurulumunda grub-install için zorunlu + let efivarfs_target = format!("{}/sys/firmware/efi/efivars", mt); + if std::path::Path::new("/sys/firmware/efi/efivars").exists() { + tokio::fs::create_dir_all(&efivarfs_target).await + .map_err(|e| format!("{} oluşturulamadı: {}", efivarfs_target, e))?; + ui.log(format!("mount --bind /sys/firmware/efi/efivars {}", efivarfs_target)); + run_cmd("mount", &["--bind", "/sys/firmware/efi/efivars", &efivarfs_target]).await?; + } + Ok(()) + } +} + +/// Chroot ve disk bağlantılarını temizler (kurulum sonunda çağrılır). +/// +/// Önce bind-mount'lar, ardından gerçek bölümler (/boot/efi ve kök) +/// ters sırada unmount edilir. FAT32 (ESP) backup boot sektörü yalnızca +/// umount anında güncellendiği için bölümler `-lf` ile hemen lazy +/// unmount edilmez; önce temiz `umount` denenir, sadece "busy" durumunda +/// `umount -lf` ile son çareye düşülür. +pub struct UnmountBindJob { + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for UnmountBindJob { + fn name(&self) -> &str { "job_umount_bind" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let mt = &self.mount; + // Ters sırada umount — en derin path önce + let subdirs = [ + "sys/firmware/efi/efivars", + "dev/pts", + "dev", + "run", + "sys", + "proc", + "boot/efi", + ]; + let mut errors: Vec = Vec::new(); + + // Bind-mount'lar + ESP (/boot/efi) + for subdir in &subdirs { + let target = format!("{}/{}", mt, subdir); + if !umount_clean(&target, ui).await { + let msg = format!("{} temiz unmount edilemedi", target); + errors.push(msg); + } + } + + // Kök bölüm: chroot mount'unun kendisi + if !umount_clean(mt, ui).await { + let msg = format!("{} (kök) temiz unmount edilemedi", mt); + errors.push(msg); + } + + if !errors.is_empty() { + return Err(format!( + "Mount temizleme hatası — bazı dosya sistemleri bağlı kalmış olabilir:\n{}", + errors.join("\n") + )); + } + Ok(()) + } +} + +/// Tek bir mount noktasını önce temiz `umount` ile, başarısızsa `umount -lf` +/// (lazy) ile çözer. "not mounted" / "no such file" gibi beklenen durumlar +/// kritik sayılmaz; yalnızca komut çalıştırılamaması gerçek hatadır. +async fn umount_clean(target: &str, ui: &UiSender) -> bool { + ui.log(format!("umount {}", target)); + match tokio::process::Command::new("umount") + .arg(target).status().await + { + Ok(status) if status.success() => true, + Ok(status) => { + ui.log(format!("⚠ umount temiz deneme başarısız (kod {}): {} → lazy deneniyor", status, target)); + match tokio::process::Command::new("umount") + .args(["-lf", target]).status().await + { + Ok(s) if s.success() => true, + Ok(s) => { + // "not mounted" / "no such file" beklenen durumlar + ui.log(format!("⚠ umount uyarısı (kritik değil, kod {}): {}", s, target)); + true + } + Err(e) => { + let msg = format!("umount komutu başlatılamadı ({}): {}", target, e); + ui.log(format!("✗ {}", msg)); + false + } + } + } + Err(e) => { + let msg = format!("umount komutu başlatılamadı ({}): {}", target, e); + ui.log(format!("✗ {}", msg)); + false + } + } +} + +/// rsync `--info=progress2` satırından bayt-tabanlı yüzdeyi çıkarır. +/// Örnek satır: +/// " 1,234,567 45% 3.21MB/s 0:00:05 (xfr#1, to-chk=999/1000)" +/// Dosya adı bazlı tahminin aksine bu yüzde gerçek aktarılan veriyi yansıtır +/// ve %100'e ancak kopyalama tamamlanınca ulaşır. +fn parse_progress_percent(line: &str) -> Option { + let pct_pos = line.rfind('%')?; + let before = &line[..pct_pos]; + let token = before + .rsplit(|c: char| c.is_whitespace()) + .find(|t| !t.is_empty())?; + let digits: String = token.chars().filter(|c| c.is_ascii_digit()).collect(); + let n: f32 = digits.parse().ok()?; + Some((n / 100.0).clamp(0.0, 1.0)) +} + +#[cfg(test)] +mod tests { + use super::parse_progress_percent; + + #[test] + fn parses_progress2_percent() { + // Gerçek rsync --info=progress2 çıktı parçaları + assert_eq!( + parse_progress_percent(" 32.768 0% 0,00kB/s 0:00:00 "), + Some(0.0) + ); + assert_eq!( + parse_progress_percent(" 20.971.520 99% 587,32MB/s 0:00:00 (xfr#1, to-chk=3/5)"), + Some(0.99) + ); + assert_eq!( + parse_progress_percent(" 21.022.720 100% 571,93MB/s 0:00:00 (xfr#2, to-chk=0/5)"), + Some(1.0) + ); + // Dosya adları yüzde içermez → None + assert_eq!(parse_progress_percent("big.bin"), None); + assert_eq!(parse_progress_percent("sub/"), None); + } +} diff --git a/src/jobs/finish.rs b/src/jobs/finish.rs new file mode 100644 index 0000000..ee9512e --- /dev/null +++ b/src/jobs/finish.rs @@ -0,0 +1,116 @@ +use super::{run_chroot, Job, UiSender}; + +/// COMAR servislerini ve tetikleyicilerini yapılandırır. +pub struct RunComarJob { + #[allow(dead_code)] + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for RunComarJob { + fn name(&self) -> &str { "job_comar" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // pisi configure-pending: paket post-install scriptlerini çalıştırır. + // Yapılandırılacak paket yoksa çıkış kodu sıfır dışı olabilir — fatal değil. + // pisi cp işlemi kurulum sonrası atlanıyor (kullanıcı isteği). + let _ = ui; + // ui.log("pisi paketleri yapılandırılıyor (COMAR)…"); + // match run_chroot(&self.mount, &["pisi", "cp"]).await { + // Ok(_) => { + // ui.log("✓ pisi paketleri yapılandırıldı"); + // } + // Err(e) => { + // // "no packages to configure" gibi durumlar hata değil + // if e.contains("no packages") || e.contains("Nothing to do") { + // ui.log(" pisi: yapılandırılacak paket yok, atlanıyor"); + // } else { + // // Gerçek hata — uyar ama kurulumu durdurma + // ui.log(format!("pisi paketleri yapılandırma uyarısı: {}", e)); + // ui.log("Bu uyarı kritik değilse kurulum devam edecek."); + // } + // } + // } + Ok(()) + } +} + +/// ldconfig: paylaşımlı kütüphane önbelleğini yeniden oluşturur. +pub struct RunLdconfigJob { + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for RunLdconfigJob { + fn name(&self) -> &str { "job_ldconfig" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + ui.log("ldconfig çalıştırılıyor…"); + match run_chroot(&self.mount, &["ldconfig"]).await { + Ok(_) => ui.log("✓ ldconfig tamamlandı"), + Err(e) => ui.log(format!("⚠ ldconfig uyarısı: {}", e)), + } + Ok(()) + } +} + +/// update-environment: PisiLinux init/betiklerini yeniden yapılandırır. +pub struct UpdateEnvironmentJob { + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for UpdateEnvironmentJob { + fn name(&self) -> &str { "job_update_env" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + ui.log("update-environment çalıştırılıyor…"); + match run_chroot(&self.mount, &["update-environment"]).await { + Ok(_) => ui.log("✓ update-environment tamamlandı"), + Err(e) => ui.log(format!("⚠ update-environment uyarısı: {}", e)), + } + Ok(()) + } +} + +/// Live ortam izlerini hedef sistemden temizler. +pub struct CleanupLiveJob { + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for CleanupLiveJob { + fn name(&self) -> &str { "job_cleanup_live" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let mt = &self.mount; + ui.log("Live ortam izleri temizleniyor…"); + + // run/livemedia + let _ = tokio::fs::remove_dir_all(format!("{}/run/livemedia", mt)).await; + // var/cache/pisi/packages + let _ = tokio::fs::remove_dir_all(format!("{}/var/cache/pisi/packages", mt)).await; + // YALI desktop dosyaları + //let _ = tokio::fs::remove_file(format!("{}/usr/share/applications/yali.desktop", mt)).await; + //let _ = tokio::fs::remove_file(format!("{}/usr/share/applications/yali-bin.desktop", mt)).await; + let _ = tokio::fs::remove_dir_all(format!("{}/bootmnt", mt)).await; + //pisi kullanıcısını sil (ev diziniyle birlikte), YALI paketlerini kaldır + let _ = run_chroot(&self.mount, &["userdel", "-r", "pisi"]).await; + let _ = run_chroot(&self.mount, &["pisi", "rm", "yali-rs"]).await; + // live paket deposunu kaldır + let _ = run_chroot(&self.mount, &["pisi", "rr", "live"]).await; + // depolarları yeniden ekle (stable2 + contrib) + ui.log("Depolar Ekleniyor…"); + let _ = run_chroot(&self.mount, &["pisi", "ar", "stable2", "https://stable2.pisilinux.org/pisi-index.xml.xz"]).await; + let _ = run_chroot(&self.mount, &["pisi", "ar", "contrib", "https://contrib.pisilinux.org/pisi-index.xml.xz"]).await; + // depoları aktif et + ui.log("Depolar aktif ediliyor..."); + let _ = run_chroot(&self.mount, &["pisi", "er", "contrib", "stable2"]).await; + // paket listelerini güncelle + ui.log("Depolar Güncelleniyor..."); + let _ = run_chroot(&self.mount, &["pisi", "ur"]).await; + + ui.log("✓ Live temizlik tamamlandı"); + Ok(()) + } +} diff --git a/src/jobs/keyboard.rs b/src/jobs/keyboard.rs new file mode 100644 index 0000000..f6fc4d6 --- /dev/null +++ b/src/jobs/keyboard.rs @@ -0,0 +1,99 @@ +use super::{Job, UiSender}; + +/// Klavye düzenini /etc/vconsole.conf, /etc/conf.d/mudur ve X11 yapılandırmasına yazar. +pub struct ConfigureKeyboardJob { + pub mount: String, + pub layout: String, // ör. "tr" + pub variant: String, // ör. "f" veya "" + pub language: String, // ör. "tr", "de", "fr" +} + +#[async_trait::async_trait] +impl Job for ConfigureKeyboardJob { + fn name(&self) -> &str { "job_keyboard" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // Konsol (TTY) keymap adı: X11 layout'undan farklı olabilir. + // Türkçe'de masaüstü "tr" çalışır ama vconsole keymap'i "trq" (Q) / "trf" (F) olmalı; + // "tr" değeri kbd'de hata verir. + let keymap = match (self.layout.as_str(), self.variant.as_str()) { + ("tr", "") => "trq".to_string(), + ("tr", "f") => "trf".to_string(), + _ => { + if self.variant.is_empty() { + self.layout.clone() + } else { + format!("{}-{}", self.layout, self.variant) + } + } + }; + + // /etc/vconsole.conf (systemd-style TTY) + let vconsole_path = format!("{}/etc/vconsole.conf", self.mount); + let vconsole = format!("KEYMAP={}\nFONT=ter-v16n\n", keymap); + ui.log(format!("Yazılıyor: {}", vconsole_path)); + let _ = tokio::fs::write(&vconsole_path, vconsole).await; + + // /etc/conf.d/mudur (PisiLinux native init) + let mudur_dir = format!("{}/etc/conf.d", self.mount); + let mudur_path = format!("{}/mudur", mudur_dir); + tokio::fs::create_dir_all(&mudur_dir).await + .map_err(|e| format!("{} oluşturulamadı: {}", mudur_dir, e))?; + + let content = tokio::fs::read_to_string(&mudur_path).await.unwrap_or_default(); + let mut lines: Vec = content.lines().map(String::from).collect(); + let mut found_keymap = false; + let mut found_language = false; + + for line in lines.iter_mut() { + let trimmed = line.trim(); + if trimmed.starts_with("keymap=") || trimmed.starts_with("#keymap=") { + *line = format!("keymap=\"{}\"", keymap); + found_keymap = true; + } else if trimmed.starts_with("language=") || trimmed.starts_with("#language=") { + *line = format!("language=\"{}\"", self.language); + found_language = true; + } + } + + if !found_keymap { + lines.push(format!("keymap=\"{}\"", keymap)); + } + if !found_language { + lines.push(format!("language=\"{}\"", self.language)); + } + + let result = lines.join("\n"); + ui.log(format!("Yazılıyor: {}", mudur_path)); + tokio::fs::write(&mudur_path, result).await + .map_err(|e| format!("{} yazılamadı: {}", mudur_path, e))?; + + // /etc/X11/xorg.conf.d/00-keyboard.conf (X11 için) + let x11_dir = format!("{}/etc/X11/xorg.conf.d", self.mount); + let x11_path = format!("{}/00-keyboard.conf", x11_dir); + tokio::fs::create_dir_all(&x11_dir).await + .map_err(|e| format!("{} oluşturulamadı: {}", x11_dir, e))?; + + let options_line = if self.variant.is_empty() { + String::new() + } else { + format!("\n\t\tOption \"XkbVariant\" \"{}\"", self.variant) + }; + + let x11_conf = format!( + "Section \"InputClass\"\n\ + \tIdentifier \"system-keyboard\"\n\ + \tMatchIsKeyboard \"on\"\n\ + \tOption \"XkbLayout\" \"{layout}\"{options}\n\ + EndSection\n", + layout = self.layout, + options = options_line, + ); + ui.log(format!("Yazılıyor: {}", x11_path)); + tokio::fs::write(&x11_path, x11_conf) + .await + .map_err(|e| format!("xorg keyboard conf yazılamadı: {}", e))?; + + Ok(()) + } +} diff --git a/src/jobs/location.rs b/src/jobs/location.rs new file mode 100644 index 0000000..18a719f --- /dev/null +++ b/src/jobs/location.rs @@ -0,0 +1,171 @@ +use super::{run_chroot, Job, UiSender}; + +/// /etc/locale.conf ve /etc/locale.gen'i yazar, sonra locale-gen çalıştırır. +pub struct ConfigureLocaleJob { + pub mount: String, + pub locale: String, // ör. "tr_TR.UTF-8" +} + +#[async_trait::async_trait] +impl Job for ConfigureLocaleJob { + fn name(&self) -> &str { "job_locale" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // Locale değeri doğrulama: yalnızca alfanumerik, '.', '_', '-', '@' + // karakterlerine izin ver. Yol manipülasyonu ve injection önlenir. + let locale_valid = !self.locale.is_empty() + && !self.locale.contains("..") + && !self.locale.contains('/') + && !self.locale.contains('\n') + && self.locale.chars().all(|c| c.is_alphanumeric() || "._-@".contains(c)); + if !locale_valid { + return Err(format!("Geçersiz locale değeri: '{}'", self.locale)); + } + + let etc_dir = format!("{}/etc", self.mount); + let _ = tokio::fs::create_dir_all(&etc_dir).await; + let _ = tokio::fs::create_dir_all(format!("{}/etc/env.d", self.mount)).await; + + // /etc/locale.conf (systemd-style) + let conf_path = format!("{}/etc/locale.conf", self.mount); + let conf = format!( + "LANG={locale}\nLC_ALL={locale}\n", + locale = self.locale + ); + ui.log(format!("Yazılıyor: {}", conf_path)); + let _ = tokio::fs::write(&conf_path, conf).await; + + // /etc/env.d/03locale (PisiLinux native) + let pisi_locale_path = format!("{}/etc/env.d/03locale", self.mount); + let pisi_locale = format!( + "LANG={locale}\nLC_ALL={locale}\n", + locale = self.locale + ); + ui.log(format!("Yazılıyor: {}", pisi_locale_path)); + let _ = tokio::fs::write(&pisi_locale_path, pisi_locale).await; + + // /etc/locale.gen — satırın başındaki # kaldırılır + let gen_path = format!("{}/etc/locale.gen", self.mount); + ui.log(format!("Güncelleniyor: {}", gen_path)); + let content = tokio::fs::read_to_string(&gen_path).await.unwrap_or_default(); + // Her zaman aktif olması gereken yedek yerel ayarlar + let fallback_locales = ["en_US.UTF-8", "C.UTF-8"]; + let mut updated: Vec = content + .lines() + .map(|line| { + let stripped = line.trim_start_matches('#').trim_start(); + if stripped.starts_with(&self.locale) + || fallback_locales.iter().any(|l| stripped.starts_with(l)) + { + stripped.to_string() // yorumu kaldır + } else { + line.to_string() + } + }) + .collect(); + + // Yedek yerel ayarlar dosyada yoksa sona ekle + for loc in fallback_locales { + let present = updated.iter().any(|line| { + line.trim_start_matches('#').trim_start().starts_with(loc) + }); + if !present { + updated.push(format!("{} UTF-8", loc)); + } + } + + let content_to_write = updated.join("\n") + "\n"; + + tokio::fs::write(&gen_path, content_to_write) + .await + .map_err(|e| format!("/etc/locale.gen yazılamadı: {}", e))?; + + // locale.gen çalıştır — kurulum sonrası locale desteği için zorunlu + ui.log("locale.gen çalıştırılıyor…"); + run_chroot(&self.mount, &["locale-gen"]).await?; + + Ok(()) + } +} + +/// Zaman dilimini ayarlar ve hwclock'u senkronize eder. +pub struct ConfigureTimezoneJob { + pub mount: String, + pub timezone: String, // ör. "Europe/Istanbul" +} + +#[async_trait::async_trait] +impl Job for ConfigureTimezoneJob { + fn name(&self) -> &str { "job_timezone" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // Path traversal koruması: timezone değeri yalnızca alfanumerik, + // '/', '_', '-', '+' karakterlerine izin verir; ".." asla geçemez. + let tz = &self.timezone; + let tz_valid = !tz.is_empty() + && !tz.contains("..") + && tz.chars().all(|c| c.is_alphanumeric() || "/._-+".contains(c)); + if !tz_valid { + return Err(format!("Geçersiz timezone değeri: '{}'", tz)); + } + + // Sembolik link: /etc/localtime → /usr/share/zoneinfo/ + let link_target = format!("/usr/share/zoneinfo/{}", self.timezone); + let link_path = format!("{}/etc/localtime", self.mount); + + ui.log(format!("ln -sf {} {}", link_target, link_path)); + // Önce varsa eski linki sil + let _ = tokio::fs::remove_file(&link_path).await; + // tokio'da Unix symlink için spawn_blocking kullan + let lt = link_target.clone(); + let lp = link_path.clone(); + tokio::task::spawn_blocking(move || { + std::os::unix::fs::symlink(<, &lp) + }).await + .map_err(|e| format!("symlink spawn hatası: {}", e))? + .map_err(|e| format!("localtime symlink: {}", e))?; + + // hwclock --systohc + ui.log("hwclock --systohc çalıştırılıyor…"); + // Hata kritik değil, uyar ve devam et + match run_chroot(&self.mount, &["hwclock", "--systohc"]).await { + Ok(_) => ui.log("hwclock senkronize edildi."), + Err(e) => ui.log(format!("⚠ hwclock uyarısı (kritik değil): {}", e)), + } + + Ok(()) + } +} + +/// NTP ve manuel tarih/saat yapılandırması. +pub struct ConfigureDateTimeJob { + pub mount: String, + pub use_ntp: bool, + pub year: i32, + pub month: u32, + pub day: u32, + pub hour: u32, + pub minute: u32, +} + +#[async_trait::async_trait] +impl Job for ConfigureDateTimeJob { + fn name(&self) -> &str { "job_datetime" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + if self.use_ntp { + ui.log("NTP etkinleştiriliyor…"); + // ntpd servisini başlat + let _ = run_chroot(&self.mount, &["service", "ntpd", "start"]).await; + } else { + ui.log("Manuel tarih/saat ayarlanıyor…"); + let date_str = format!( + "{:04}-{:02}-{:02} {:02}:{:02}:00", + self.year, self.month, self.day, self.hour, self.minute + ); + let _ = run_chroot(&self.mount, &["date", "-s", &date_str]).await; + let _ = run_chroot(&self.mount, &["hwclock", "--systohc"]).await; + } + Ok(()) + } +} diff --git a/src/jobs/mod.rs b/src/jobs/mod.rs index 7cee12f..a24b521 100644 --- a/src/jobs/mod.rs +++ b/src/jobs/mod.rs @@ -9,15 +9,57 @@ //! egui her frame'de `Receiver::try_recv` ile kuyruktan mesaj okur. //! `egui::Context::request_repaint()` arka plan iş parçacığından çağrılarak //! UI'nin hemen güncellenmesi sağlanır. +//! +//! `mod.rs` yalnızca çekirdeği (mesaj, `UiSender`, `Job`, `JobQueue`), ortak +//! yardımcıları ve kuyruk fabrikalarını barındırır. Somut işler adım adlarıyla +//! ayrı modüllere dağılmıştır: +//! +//! | Modül | İçerik | +//! |------------------|--------| +//! | `partition` | Bölümleme, bağlama, fstab, LUKS/LVM | +//! | `execution` | rsync kopyalama, bind-mount'lar | +//! | `bootloader` | GRUB kurulumu + initramfs | +//! | `autologin` | Otomatik oturum açma (sddm/lightdm/gdm) | +//! | `network` | Hostname | +//! | `location` | Locale, zaman dilimi, tarih/saat | +//! | `keyboard` | Klavye düzeni | +//! | `users` | Kullanıcı oluşturma | +//! | `netinstall` | Ek paket grupları | +//! | `finish` | COMAR, ldconfig, temizlik | +mod autologin; +mod bootloader; +mod execution; +mod finish; +mod keyboard; +mod location; +mod netinstall; +mod network; +mod partition; +mod users; + +pub use autologin::ConfigureAutologinJob; +pub use bootloader::{GenerateInitramfsJob, InstallGrubJob}; +pub use execution::{CopyFilesJob, MountBindJob, UnmountBindJob}; +pub use finish::{CleanupLiveJob, RunComarJob, RunLdconfigJob, UpdateEnvironmentJob}; +pub use keyboard::ConfigureKeyboardJob; +pub use location::{ConfigureDateTimeJob, ConfigureLocaleJob, ConfigureTimezoneJob}; +pub use netinstall::InstallExtraPackagesJob; +pub use network::ConfigureHostnameJob; +pub use partition::{ + CustomPartitionJob, FstabFromBlkidJob, FstabFromCustomPartitionsJob, MountCustomPartitionsJob, + MountPartitionsJob, PartitionJob, SetupLvmJob, +}; +pub use users::CreateUserJob; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::mpsc; use std::time::Instant; -use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::process::Command; use rust_i18n::t; +use crate::installer::PartitionPlan; + // ───────────────────────────────────────────── // MESAJ TİPİ // ───────────────────────────────────────────── @@ -33,6 +75,11 @@ pub enum InstallMessage { SubProgress(f32), /// Kopyalanmakta olan dosya adı. CurrentFile(String), + /// rsync kopyalama fazı başladı. UI yalnızca bu fazda tek ilerleme + /// çubuğunu gösterir (eski YALI düzeni). + CopyStarted, + /// rsync kopyalama fazı bitti. UI ilerleme çubuğunu gizler. + CopyFinished, /// Tüm işler başarıyla tamamlandı. Done, /// Bir iş başarısız oldu; kurulum durdu. @@ -87,6 +134,14 @@ impl UiSender { self.send(InstallMessage::SubProgress(p)); } + pub fn copy_started(&self) { + self.send(InstallMessage::CopyStarted); + } + + pub fn copy_finished(&self) { + self.send(InstallMessage::CopyFinished); + } + pub fn current_file(&self, f: impl Into) { self.send(InstallMessage::CurrentFile(f.into())); } @@ -124,14 +179,14 @@ impl JobQueue { for (i, job) in self.jobs.iter().enumerate() { let localized_name = t!(job.name()); - ui.log(format!("▶ {} başlatıldı…", localized_name)); + ui.log(format!("▶ {}", localized_name)); match job.run(&ui).await { Ok(()) => { - ui.log(format!("✓ {} tamamlandı.", localized_name)); + ui.log(format!("✓ {}", localized_name)); } Err(e) => { - let msg = format!("✗ {} başarısız: {}", localized_name, e); + let msg = format!("✗ {}: {}", localized_name, e); ui.log(msg.clone()); ui.send(InstallMessage::Error(msg)); return; @@ -147,583 +202,13 @@ impl JobQueue { } // ───────────────────────────────────────────── -// SOMUT JOB'LAR -// ───────────────────────────────────────────── - -/// Sistem dosyalarını kopyala (rsync). -pub struct CopyFilesJob { - /// Canlı sistemin kök dizini; ör. "/run/livecd/squashfs-root/" - pub source: String, - /// Hedef bağlama noktası; ör. "/mnt" - pub target: String, -} - -#[async_trait::async_trait] -impl Job for CopyFilesJob { - fn name(&self) -> &str { "job_copy_files" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - ui.log(format!("[DEBUG] CopyFilesJob başladı")); - ui.log(format!("[DEBUG] Kaynak: '{}'", self.source)); - ui.log(format!("[DEBUG] Hedef: '{}'", self.target)); - - // Kaynak dizini kontrol et - let source_path = std::path::Path::new(&self.source); - let source_exists = source_path.exists(); - let source_readable = source_exists && source_path.is_dir(); - ui.log(format!("[DEBUG] Kaynak mevcut: {}, dizin: {}", source_exists, source_readable)); - - if !source_exists { - ui.log(format!("[DEBUG] Kaynak dizin içeriği aranıyor...")); - // Kaynağın bir üst dizinini dene - let parent = source_path.parent(); - if let Some(p) = parent { - if p.exists() { - if let Ok(entries) = std::fs::read_dir(p) { - for entry in entries.flatten().take(20) { - ui.log(format!("[DEBUG] /{:?}", entry.path())); - } - } - } - } else { - ui.log("[DEBUG] Kaynağın parent'ı yok (kök dizin olabilir)"); - } - } else if source_readable { - // İlk 10 girdiyi listele - if let Ok(entries) = std::fs::read_dir(source_path) { - let mut count = 0; - for entry in entries.flatten().take(10) { - ui.log(format!("[DEBUG] {:?}", entry.path())); - count += 1; - } - ui.log(format!("[DEBUG] (ilk {} girdi listelendi)", count)); - } - } - - ui.log(format!("rsync {} → {}", self.source, self.target)); - - let is_root_source = self.source.trim_end_matches('/') == ""; - - // ── Önce find ile toplam dosya sayısını bul ────────── - let find_path = self.source.trim_end_matches('/'); - let find_path = if find_path.is_empty() { "/" } else { find_path }; - let total_files = { - let mut cmd = Command::new("find"); - cmd.arg(find_path).arg("-type").arg("f"); - if is_root_source { - cmd.arg("-xdev"); - } - cmd.stdout(std::process::Stdio::piped()); - cmd.stderr(std::process::Stdio::null()); - match cmd.spawn() { - Ok(mut c) => { - let stdout = c.stdout.take() - .ok_or_else(|| "find stdout alınamadı".to_string())?; - let r = BufReader::new(stdout); - let mut lines = r.lines(); - let mut n: u64 = 0; - while let Ok(Some(_)) = lines.next_line().await { - n += 1; - } - let _ = c.wait().await; - // if n > 0 { - // ui.log(format!("{} dosya bulundu", n)); - // } - n - } - Err(_) => 0 - } - }; - - let mut args: Vec = vec![ - "-aAXH".to_string(), - "--out-format=%n".to_string(), - "--exclude=/proc/**".to_string(), - "--exclude=/sys/**".to_string(), - "--exclude=/dev/**".to_string(), - "--exclude=/run/**".to_string(), - "--exclude=/tmp/**".to_string(), - "--exclude=/var/tmp/**".to_string(), - "--exclude=/var/cache/**".to_string(), - "--exclude=/home/**".to_string(), - "--exclude=/root/**".to_string(), - "--exclude=/lost+found".to_string(), - "--exclude=*.sqfs".to_string(), - ]; - - // Kaynak canlı sistem köküyse ekstra exclude'ler - if is_root_source { - args.extend_from_slice(&[ - "--exclude=/bootmnt/**".to_string(), - "--exclude=/ro_branch/**".to_string(), - "--exclude=/mnt/**".to_string(), - "--exclude=/media/**".to_string(), - "--exclude=/var/log/journal/**".to_string(), - "--exclude=/var/lib/pisi/cache/**".to_string(), - "--exclude=/var/lib/pisi/archives/**".to_string(), - "--exclude=/etc/adjtime".to_string(), - "--exclude=/etc/mtab".to_string(), - "--exclude=/etc/resolv.conf".to_string(), - "--exclude=/etc/hostname".to_string(), - "--exclude=/etc/machine-id".to_string(), - ]); - } - - if let (Ok(source_path), Ok(target_path)) = ( - std::path::Path::new(&self.source).canonicalize(), - std::path::Path::new(&self.target).canonicalize(), - ) { - if let Ok(relative_target) = target_path.strip_prefix(&source_path) { - if !relative_target.as_os_str().is_empty() { - args.push(format!("--exclude={}", relative_target.display())); - } - } - } - - args.push(self.source.clone()); - args.push(self.target.clone()); - - if DEMO_MODE.load(Ordering::Relaxed) { - ui.log("rsync /run/livecd/squashfs-root/ → /mnt (DEMO)"); - let steps = 20; - for i in 0..steps { - let p = (i + 1) as f32 / steps as f32; - ui.current_file(format!("/usr/share/doc/{}/README.md", (i * 137) % 50)); - ui.sub_progress(p); - tokio::time::sleep(std::time::Duration::from_millis(150)).await; - } - return Ok(()); - } - - let mut child = Command::new("rsync") - .args(&args) - .stdout(std::process::Stdio::piped()) - .stderr(std::process::Stdio::piped()) - .spawn() - .map_err(|e| format!("rsync çalıştırılamadı: {}", e))?; - - let stdout = child.stdout.take() - .ok_or_else(|| "rsync stdout alınamadı".to_string())?; - let stderr = child.stderr.take() - .ok_or_else(|| "rsync stderr alınamadı".to_string())?; - - // Stderr'i arka planda oku (hata birikimi ve tampon taşmasını engelle) - let stderr_buf = std::sync::Arc::new(tokio::sync::Mutex::new(String::new())); - let stderr_buf_clone = stderr_buf.clone(); - tokio::spawn(async move { - let r = BufReader::new(stderr); - let mut lines = r.lines(); - while let Ok(Some(l)) = lines.next_line().await { - let mut b = stderr_buf_clone.lock().await; - b.push_str(&l); - b.push('\n'); - } - }); - - // Stdout: --out-format=%n ile her satır bir dosya adı - let reader = BufReader::new(stdout); - let mut lines = reader.lines(); - let mut file_count: u64 = 0; - // Son UI güncellemesi — çok sık güncelleme GPU (özellikle Intel UMA) baskısını azaltır - let mut last_update = Instant::now(); - - while let Some(line) = lines.next_line().await - .map_err(|e| format!("rsync çıktısı okunamadı: {}", e))? - { - let trimmed = line.trim().to_string(); - if trimmed.is_empty() { - continue; - } - - file_count += 1; - - let now = Instant::now(); - if now.duration_since(last_update) >= std::time::Duration::from_millis(50) - || file_count == 1 - || trimmed.contains("Packages") || trimmed.contains("package") - { - ui.current_file(trimmed); - last_update = now; - } - - if total_files > 0 { - let p = (file_count as f32) / (total_files as f32); - ui.sub_progress(p.min(1.0)); - } - } - - let status = child.wait().await - .map_err(|e| format!("rsync beklenemedi: {}", e))?; - - if !status.success() { - let err = stderr_buf.lock().await.clone(); - return Err(format!( - "rsync çıkış kodu: {:?}. Hata: {}", - status.code(), - err.trim() - )); - } - - Ok(()) - } -} - -/// /proc, /sys, /dev, /dev/pts dizinlerini chroot hedefine bind-mount yapar. -/// Standart `chroot` için gereklidir; kurulum başında çağrılmalıdır. -pub struct MountBindJob { - pub mount: String, // ör. "/mnt" -} - -#[async_trait::async_trait] -impl Job for MountBindJob { - fn name(&self) -> &str { "job_mount_bind" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let mt = &self.mount; - // (kaynak, hedef) — kaynak sistem üzerindeki gerçek path - let bind_dirs = [ - ("/proc", format!("{}/proc", mt)), - ("/sys", format!("{}/sys", mt)), - ("/dev", format!("{}/dev", mt)), - ("/dev/pts", format!("{}/dev/pts", mt)), - ("/run", format!("{}/run", mt)), // COMAR/dbus için gerekli - ]; - for (src, target) in &bind_dirs { - tokio::fs::create_dir_all(target).await - .map_err(|e| format!("{} oluşturulamadı: {}", target, e))?; - ui.log(format!("mount --bind {} {}", src, target)); - run_cmd("mount", &["--bind", src, target]).await?; - } - - // efivarfs — UEFI kurulumunda grub-install için zorunlu - let efivarfs_target = format!("{}/sys/firmware/efi/efivars", mt); - if std::path::Path::new("/sys/firmware/efi/efivars").exists() { - tokio::fs::create_dir_all(&efivarfs_target).await - .map_err(|e| format!("{} oluşturulamadı: {}", efivarfs_target, e))?; - ui.log(format!("mount --bind /sys/firmware/efi/efivars {}", efivarfs_target)); - run_cmd("mount", &["--bind", "/sys/firmware/efi/efivars", &efivarfs_target]).await?; - } - Ok(()) - } -} - -/// Bind-mount'ları temizler (kurulum sonunda çağrılır). -pub struct UnmountBindJob { - pub mount: String, -} - -#[async_trait::async_trait] -impl Job for UnmountBindJob { - fn name(&self) -> &str { "job_umount_bind" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let mt = &self.mount; - // Ters sırada umount — en derin path önce - let subdirs = [ - "sys/firmware/efi/efivars", - "dev/pts", - "dev", - "run", - "sys", - "proc", - ]; - let mut errors: Vec = Vec::new(); - for subdir in &subdirs { - let target = format!("{}/{}", mt, subdir); - ui.log(format!("umount {}", target)); - match tokio::process::Command::new("umount") - .arg("-lf").arg(&target).status().await - { - Ok(status) if status.success() => {} - Ok(status) => { - // "not mounted" veya "no such file" hataları beklenen durumlar — - // bunları uyarı olarak logla ama kritik hata sayma. - ui.log(format!("⚠ umount uyarısı (kritik değil, kod {}): {}", status, target)); - } - Err(e) => { - // Komut çalıştırılamadı — bu gerçek bir sorun. - let msg = format!("umount komutu başlatılamadı ({}): {}", target, e); - ui.log(format!("✗ {}", msg)); - errors.push(msg); - } - } - } - if !errors.is_empty() { - return Err(format!( - "Bind mount temizleme hatası — bazı sanal dosya sistemleri bağlı kalmış olabilir:\n{}", - errors.join("\n") - )); - } - Ok(()) - } -} - -/// initramfs yeniler (GRUB öncesi zorunlu). -/// PisiLinux `dracut` kullanıyorsa `dracut -f --regenerate-all`, -/// mkinitcpio kullanıyorsa `mkinitcpio -P`. -pub struct GenerateInitramfsJob { - pub mount: String, - pub encrypt_root: bool, - pub lvm_active: bool, -} - -#[async_trait::async_trait] -impl Job for GenerateInitramfsJob { - fn name(&self) -> &str { "job_initramfs" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // LVM için initramfs'e lvm modülü/hook'u ekleyen konfigürasyon - if self.lvm_active && !self.encrypt_root { - ui.log("LVM algılandı: initramfs LVM ayarlanıyor…"); - - // dracut: add lvm module - let dracut_conf = format!("{}/etc/dracut.conf.d/99-lvm.conf", self.mount); - let _ = tokio::fs::create_dir_all(format!("{}/etc/dracut.conf.d", self.mount)).await; - let _ = tokio::fs::write(&dracut_conf, "add_dracutmodules+=\" lvm \"\n").await; - - // mkinitcpio: add lvm2 hook - // Hem HOOKS="..." hem HOOKS=(... ) sözdizimi desteklenir. - let mkinitcpio_conf = format!("{}/etc/mkinitcpio.conf", self.mount); - if tokio::fs::metadata(&mkinitcpio_conf).await.is_ok() { - if let Ok(content) = tokio::fs::read_to_string(&mkinitcpio_conf).await { - if content.contains("HOOKS=") && !content.contains("lvm2") { - let new_content = content - .replace("HOOKS=\"", "HOOKS=\"lvm2 ") - .replace("HOOKS=(", "HOOKS=(lvm2 "); - let _ = tokio::fs::write(&mkinitcpio_conf, new_content).await; - } - } - } - } - - // LUKS için initramfs'e cryptsetup ekleyen konfigürasyon - if self.encrypt_root { - ui.log("LUKS algılandı: initramfs cryptsetup ayarlanıyor…"); - - // dracut: add crypt module - let dracut_conf = format!("{}/etc/dracut.conf.d/99-luks.conf", self.mount); - tokio::fs::create_dir_all( - format!("{}/etc/dracut.conf.d", self.mount) - ).await.map_err(|e| format!("dracut.conf.d oluşturulamadı: {}", e))?; - tokio::fs::write(&dracut_conf, "add_dracutmodules+=\" crypt lvm \"\n") - .await.map_err(|e| format!("dracut luks conf yazılamadı: {}", e))?; - - // mkinitcpio: add encrypt hook - // Hem HOOKS="..." hem HOOKS=(... ) sözdizimi desteklenir. - let mkinitcpio_conf = format!("{}/etc/mkinitcpio.conf", self.mount); - if tokio::fs::metadata(&mkinitcpio_conf).await.is_ok() { - let content = tokio::fs::read_to_string(&mkinitcpio_conf) - .await.unwrap_or_default(); - if content.contains("HOOKS=") && !content.contains("encrypt") { - let new_content = content - .replace("HOOKS=\"", "HOOKS=\"encrypt ") - .replace("HOOKS=(", "HOOKS=(encrypt "); - let _ = tokio::fs::write(&mkinitcpio_conf, new_content).await; - } - } - } - - // PisiLinux /sbin/mkinitramfs, dracut, mkinitcpio sırasıyla dene - let cmds: &[&[&str]] = &[ - &["mkinitramfs", "-f"], - &["dracut", "-f", "--regenerate-all"], - &["mkinitcpio", "-P"], - ]; - for cmd in cmds { - if run_chroot(&self.mount, cmd).await.is_ok() { - ui.log(format!("initramfs oluşturuldu ({})", cmd[0])); - return Ok(()); - } - } - Err("initramfs oluşturulamadı: mkinitramfs, dracut, mkinitcpio denendi".to_string()) - } -} - - - -/// GRUB bootloader kurulumu (UEFI veya BIOS). -pub struct InstallGrubJob { - pub disk: String, - pub mount: String, - pub is_uefi: bool, - pub boot_device: String, - pub timeout: u32, - pub password: String, - pub kernel_options: String, - pub encrypt_root: bool, -} - -#[async_trait::async_trait] -impl Job for InstallGrubJob { - fn name(&self) -> &str { "job_bootloader" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // Ana dizinleri oluştur (demo modunda rsync çalışmaz) - let etc_default = format!("{}/etc/default", self.mount); - let _ = tokio::fs::create_dir_all(&etc_default).await; - let grub_d = format!("{}/etc/grub.d", self.mount); - let _ = tokio::fs::create_dir_all(&grub_d).await; - - // GRUB şifresi (varsa) — grub-mkpasswd-pbkdf2 ile hash üretilir, - // düz metin asla diske yazılmaz. - if !self.password.is_empty() { - ui.log("GRUB şifresi PBKDF2 ile hashleniyor…"); - - // grub-mkpasswd-pbkdf2 şifreyi stdin'den iki kez okur (şifre + doğrulama) - use tokio::io::AsyncWriteExt; - let pw_input = format!("{}\n{}\n", self.password, self.password); - let mut child = tokio::process::Command::new("grub-mkpasswd-pbkdf2") - .stdin(std::process::Stdio::piped()) - .stdout(std::process::Stdio::piped()) - .stderr(std::process::Stdio::null()) - .spawn() - .map_err(|e| format!("grub-mkpasswd-pbkdf2 başlatılamadı: {}", e))?; - - if let Some(mut stdin) = child.stdin.take() { - stdin.write_all(pw_input.as_bytes()).await - .map_err(|e| format!("grub-mkpasswd-pbkdf2 stdin hatası: {}", e))?; - } - - let output = child.wait_with_output().await - .map_err(|e| format!("grub-mkpasswd-pbkdf2 bekleme hatası: {}", e))?; - - // Çıktıdan "grub.pbkdf2.sha512...." token'ını ayrıştır - let stdout = String::from_utf8_lossy(&output.stdout); - let hash = stdout - .lines() - .find_map(|l| { - let pos = l.find("grub.pbkdf2")?; - Some(l[pos..].trim().to_string()) - }) - .ok_or("grub-mkpasswd-pbkdf2 çıktısında hash bulunamadı")?; - - let custom_grub = format!( - "#!/bin/sh\nset superusers=\"root\"\npassword_pbkdf2 root {}\n", - hash - ); - let pw_path = format!("{}/etc/grub.d/40_custom", self.mount); - tokio::fs::write(&pw_path, custom_grub) - .await - .map_err(|e| format!("GRUB şifre dosyası yazılamadı: {}", e))?; - run_cmd("chmod", &["+x", &pw_path]).await?; - ui.log("GRUB şifresi PBKDF2 hash olarak yazıldı."); - } - - // GRUB timeout ayarı - ui.log(format!("GRUB timeout ayarlanıyor: {}s", self.timeout)); - let default_path = format!("{}/etc/default/grub", self.mount); - let mut grub_default = tokio::fs::read_to_string(&default_path) - .await - .unwrap_or_default(); - // timeout satırını bul/değiştir - let timeout_line = format!("GRUB_TIMEOUT={}", self.timeout); - let found_timeout = grub_default.lines() - .any(|l| l.trim_start().starts_with("GRUB_TIMEOUT=")); - if found_timeout { - let mut lines: Vec = grub_default.lines() - .map(|l| { - if l.trim_start().starts_with("GRUB_TIMEOUT=") { - timeout_line.clone() - } else { - l.to_string() - } - }) - .collect(); - lines.push(String::new()); - grub_default = lines.join("\n"); - } else { - grub_default.push_str(&format!("\n{}\n", timeout_line)); - } - // kernel cmdline - let mut cmdline = self.kernel_options.clone(); - if self.encrypt_root { - // Kök bölüm UUID'sini blkid'den al (LUKS başlık UUID'si) - let (root_num, _swap_num): (u32, u32) = if self.is_uefi { (3, 2) } else { (2, 1) }; - let root_part = part_path(&self.disk, root_num); - let root_uuid = blkid_uuid(&root_part).await.unwrap_or_default(); - let crypt_arg = format!("cryptdevice=UUID={}:cryptroot root=/dev/mapper/cryptroot", root_uuid); - if cmdline.is_empty() { - cmdline = crypt_arg; - } else { - cmdline = format!("{} {}", crypt_arg, cmdline); - } - } - if !cmdline.is_empty() { - let cmdline_line = format!("GRUB_CMDLINE_LINUX=\"{}\"", cmdline); - let found_cmdline = grub_default.lines() - .any(|l| l.trim_start().starts_with("GRUB_CMDLINE_LINUX=")); - if found_cmdline { - let mut lines: Vec = grub_default.lines() - .map(|l| { - if l.trim_start().starts_with("GRUB_CMDLINE_LINUX=") { - cmdline_line.clone() - } else { - l.to_string() - } - }) - .collect(); - lines.push(String::new()); - grub_default = lines.join("\n"); - } else { - grub_default.push_str(&format!("{}\n", cmdline_line)); - } - } - tokio::fs::write(&default_path, grub_default) - .await - .map_err(|e| format!("/etc/default/grub yazılamadı: {}", e))?; - - // Chroot içinde grub2-install çalıştır (UEFI veya BIOS) - let mut grub_args = vec!["grub2-install"]; - let efi_dir_arg; - let disk_arg; - - if self.is_uefi { - ui.log("GRUB UEFI modu kuruluyor (chroot içinde)…"); - efi_dir_arg = "--efi-directory=/boot/efi".to_string(); - grub_args.extend_from_slice(&[ - "--target=x86_64-efi", - &efi_dir_arg, - "--bootloader-id=PisiLinux", - "--recheck", - ]); - } else { - let install_dev = if self.boot_device.is_empty() { &self.disk } else { &self.boot_device }; - ui.log(format!("GRUB BIOS modu {} aygıtına kuruluyor (chroot içinde)…", install_dev)); - disk_arg = install_dev.clone(); - grub_args.extend_from_slice(&[ - "--target=i386-pc", - &disk_arg, - "--recheck", - ]); - } - - run_chroot(&self.mount, &grub_args).await?; - - ui.log("grub2-mkconfig çalıştırılıyor…"); - run_chroot(&self.mount, &[ - "grub2-mkconfig", "-o", "/boot/grub2/grub.cfg", - ]).await?; - - Ok(()) - } -} - -// ───────────────────────────────────────────── -// YARDIMCI: KOMUT ÇALIŞTIRICI +// ORTAK YARDIMCILAR (tüm job modüllerinin kullandığı) // ───────────────────────────────────────────── +/// DEMO modu: gerçek disk işlemleri yerine kısa bekleme yapılır. +/// `build_full_job_queue` / `build_custom_job_queue` tarafından ayarlanır. static DEMO_MODE: AtomicBool = AtomicBool::new(false); -/// Disk adı ve bölüm numarasından tam aygıt yolunu oluşturur. -/// -/// - SATA/SCSI: `/dev/sda` + 1 → `/dev/sda1` -/// - NVMe: `/dev/nvme0n1` + 1 → `/dev/nvme0n1p1` -/// - MMC: `/dev/mmcblk0` + 1 → `/dev/mmcblk0p1` -fn part_path(disk: &str, num: u32) -> String { - crate::installer::part_path(disk, num) -} - - /// Başarısızlık durumunda stderr'i hata mesajı olarak döner. async fn run_cmd(program: &str, args: &[&str]) -> Result<(), String> { if DEMO_MODE.load(Ordering::Relaxed) { @@ -746,49 +231,6 @@ async fn run_cmd(program: &str, args: &[&str]) -> Result<(), String> { } } -/// `parted` komutlarını çalıştırmak için özel sarmalayıcı. -/// -/// `parted -s` canlı sistemde kullanımda olan bir disk üzerinde bölüm -/// tablosunu kernel'e bildiremeyince exit 1 döndürür; ancak değişiklikler -/// diske **yazılmıştır** — kernel güncellemesi `sync_partition_table` ile -/// yapılır. Bu fonksiyon yalnızca gerçekten kritik hataları (disk bulunamadı -/// vb.) yakalar; "kernel haberdar edilemedi" uyarısını yok sayar. -async fn run_parted(args: &[&str]) -> Result<(), String> { - if DEMO_MODE.load(Ordering::Relaxed) { - tokio::time::sleep(std::time::Duration::from_millis(500)).await; - return Ok(()); - } - - let output = Command::new("parted") - .args(args) - .output() - .await - .map_err(|e| format!("parted çalıştırılamadı: {}", e))?; - - if output.status.success() { - return Ok(()); - } - - // Parted, kernel güncelleyemediğinde exit 1 verir ama disk yazımı - // başarılıdır. Bu spesifik uyarıyı hata saymıyoruz. - let stderr = String::from_utf8_lossy(&output.stderr); - let stdout = String::from_utf8_lossy(&output.stdout); - let combined = format!("{}{}", stderr, stdout); - - let is_kernel_notify_warning = combined.contains("kernel değişiklikten haberdar edilemedi") - || combined.contains("kernel was not notified") - || combined.contains("unable to inform the kernel") - || combined.contains("still in use"); - - if is_kernel_notify_warning { - // Uyarıyı yok say; sync_partition_table kernel'i güncelleyecek - return Ok(()); - } - - // Gerçek bir hata - Err(combined.trim().to_string()) -} - /// Standart `chroot` ile verilen komutu hedef dizinde çalıştırır. /// Bind-mount'ların önceden yapılmış olduğu varsayılır (MountBindJob). async fn run_chroot(mount: &str, cmd: &[&str]) -> Result<(), String> { @@ -816,132 +258,95 @@ async fn run_chroot(mount: &str, cmd: &[&str]) -> Result<(), String> { } } -/// LUKS bölümünü güvenli şekilde formatlar. +/// Disk adı ve bölüm numarasından tam aygıt yolunu oluşturur. /// -/// Şifre, `sh -c` + string interpolasyon yerine doğrudan `stdin` pipe'ı -/// üzerinden iletilir; böylece shell injection saldırıları önlenir. -async fn run_luks_format(device: &str, password: &str) -> Result<(), String> { - if DEMO_MODE.load(Ordering::Relaxed) { - tokio::time::sleep(std::time::Duration::from_millis(1000)).await; - return Ok(()); - } +/// - SATA/SCSI: `/dev/sda` + 1 → `/dev/sda1` +/// - NVMe: `/dev/nvme0n1` + 1 → `/dev/nvme0n1p1` +/// - MMC: `/dev/mmcblk0` + 1 → `/dev/mmcblk0p1` +fn part_path(disk: &str, num: u32) -> String { + crate::installer::part_path(disk, num) +} - use tokio::io::AsyncWriteExt; - - let mut child = tokio::process::Command::new("cryptsetup") - .args([ - "luksFormat", "-q", "--type", "luks2", - "--key-file", "-", - device, - ]) - .stdin(std::process::Stdio::piped()) - .stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::piped()) - .spawn() - .map_err(|e| format!("cryptsetup luksFormat başlatılamadı: {}", e))?; - - if let Some(mut stdin) = child.stdin.take() { - stdin.write_all(password.as_bytes()).await - .map_err(|e| format!("cryptsetup stdin yazma hatası: {}", e))?; - } - - let output = child.wait_with_output().await - .map_err(|e| format!("cryptsetup bekleme hatası: {}", e))?; - - if output.status.success() { - Ok(()) +/// `/proc/mounts` ile bir yolun bağlama noktası olup olmadığını kontrol eder. +fn is_mount_point(path: &std::path::Path) -> bool { + if let Ok(mounts) = std::fs::read_to_string("/proc/mounts") { + let canon = path.canonicalize().unwrap_or_else(|_| path.to_path_buf()); + let canon_str = canon.to_string_lossy(); + mounts.lines().any(|line| { + let parts: Vec<&str> = line.split_whitespace().collect(); + parts.len() >= 2 && parts[1] == canon_str.as_ref() + }) } else { - Err(String::from_utf8_lossy(&output.stderr).trim().to_string()) + false } } -/// LUKS bölümünü güvenli şekilde açar (open). -/// -/// Şifre, shell interpolasyon yerine `stdin` pipe'ı üzerinden iletilir. -async fn run_luks_open(device: &str, name: &str, password: &str) -> Result<(), String> { - if DEMO_MODE.load(Ordering::Relaxed) { - tokio::time::sleep(std::time::Duration::from_millis(500)).await; - return Ok(()); - } - - use tokio::io::AsyncWriteExt; - - let mut child = tokio::process::Command::new("cryptsetup") - .args(["open", "--key-file", "-", device, name]) - .stdin(std::process::Stdio::piped()) - .stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::piped()) - .spawn() - .map_err(|e| format!("cryptsetup open başlatılamadı: {}", e))?; - - if let Some(mut stdin) = child.stdin.take() { - stdin.write_all(password.as_bytes()).await - .map_err(|e| format!("cryptsetup open stdin yazma hatası: {}", e))?; - } - - let output = child.wait_with_output().await - .map_err(|e| format!("cryptsetup open bekleme hatası: {}", e))?; - - if output.status.success() { - Ok(()) +/// `blkid` ile bir bölümün dosya sistemi türünü döndürür. +async fn get_fs_type(device: &str) -> Result { + let output = tokio::process::Command::new("blkid") + .args(["-s", "TYPE", "-o", "value", device]) + .output() + .await + .map_err(|e| format!("blkid çalıştırılamadı: {}", e))?; + let fs = String::from_utf8_lossy(&output.stdout).trim().to_string(); + if fs.is_empty() { + Err(format!("{} dosya sistemi türü bulunamadı", device)) } else { - Err(String::from_utf8_lossy(&output.stderr).trim().to_string()) + Ok(fs) } } -/// Bölümlendirme öncesi diski hazırlar: -/// mevcut bağlamaları ve swap'ı ayırır, ardından kernel'e yeni -/// bölüm tablosunu duyurarak aygıt düğümlerinin hazır olmasını bekler. -async fn prepare_disk(disk: &str, ui: &UiSender) { - if DEMO_MODE.load(Ordering::Relaxed) { return; } +/// Bir bölümün UUID'sini `blkid` ile okur (3 deneme, sonra `lsblk` yedeği). +async fn blkid_uuid(device: &str) -> Result { + if DEMO_MODE.load(Ordering::Relaxed) { + tokio::time::sleep(std::time::Duration::from_millis(1500)).await; + return Ok(format!("demo-uuid-{}", device.replace("/", "-"))); + } - // 1. Diskteki aktif swap'ları kapat - ui.log(format!("Swap ayrılıyor: {}…", disk)); - let lsblk = tokio::process::Command::new("lsblk") - .args(["-o", "NAME,TYPE", "-l", "--noheadings", disk]) - .output().await; - if let Ok(out) = lsblk { - let text = String::from_utf8_lossy(&out.stdout); - for line in text.lines() { - if line.contains("part") { - if let Some(name) = line.split_whitespace().next() { - let dev = format!("/dev/{}", name); - let _ = tokio::process::Command::new("swapoff") - .arg(&dev).status().await; - } - } + // Aygıt düğümünün var olmasını bekle (maks 5 sn) + for i in 0..5 { + if tokio::fs::metadata(device).await.is_ok() { + break; + } + if i == 4 { + return Err(format!("{} aygıtı bulunamadı", device)); + } + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } + + // blkid ile UUID oku (3 deneme) + for _ in 0..3 { + let output = tokio::process::Command::new("blkid") + .args(["-s", "UUID", "-o", "value", device]) + .output() + .await + .map_err(|e| format!("blkid çalıştırılamadı: {}", e))?; + + let uuid = String::from_utf8_lossy(&output.stdout).trim().to_string(); + if !uuid.is_empty() && output.status.success() { + return Ok(uuid); + } + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } + + // Son çare: lsblk ile dene + if let Ok(output) = tokio::process::Command::new("lsblk") + .args(["-no", "UUID", device]) + .output() + .await + { + let uuid = String::from_utf8_lossy(&output.stdout).trim().to_string(); + if !uuid.is_empty() && output.status.success() { + return Ok(uuid); } } - // 2. Disk bölümlerini umount et (hata görmezden gelinir) - ui.log(format!("Bağlantılar ayrılıyor: {}…", disk)); - for n in 1..=32u32 { - let part = crate::installer::part_path(disk, n); - if !std::path::Path::new(&part).exists() { break; } - let _ = tokio::process::Command::new("umount") - .args(["-lf", &part]).status().await; - } - - // 3. İlk senkronizasyon - let _ = tokio::process::Command::new("partprobe") - .arg(disk).status().await; - let _ = tokio::process::Command::new("udevadm") - .args(["settle", "--timeout=10"]).status().await; + Err(format!("{} için UUID bulunamadı", device)) } -/// Bölümlendirme sonrası kernel'e yeni tabloyu bildirir ve aygıt -/// düğümlerinin hazır olmasını bekler. `parted`'ın uyarı vermesi -/// normaldir; bu fonksiyon hata döndürmez. -async fn sync_partition_table(disk: &str) { - if DEMO_MODE.load(Ordering::Relaxed) { return; } - let _ = tokio::process::Command::new("partprobe") - .arg(disk).status().await; - let _ = tokio::process::Command::new("blockdev") - .args(["--rereadpt", disk]).status().await; - let _ = tokio::process::Command::new("udevadm") - .args(["settle", "--timeout=10"]).status().await; - tokio::time::sleep(std::time::Duration::from_secs(2)).await; -} +// ───────────────────────────────────────────── +// KAYNAK DİZİNİ TESPİTİ +// ───────────────────────────────────────────── /// ISO ortamında canlı sistemin kaynak dizinini otomatik tespit eder. /// @@ -1036,10 +441,15 @@ pub fn detect_source_dir() -> String { "/".to_string() } +// ───────────────────────────────────────────── +// KUYRUK YAPILANDIRMASI +// ───────────────────────────────────────────── + /// Kurulum kuyruğu için ortak yapılandırma. pub struct JobQueueConfig { pub mount: String, pub source: String, + pub language: String, pub locale: String, pub timezone: String, pub username: String, @@ -1069,149 +479,6 @@ pub struct JobQueueConfig { // FABRİKA: STANDART KURULUM KUYRUĞU // ───────────────────────────────────────────── -// ───────────────────────────────────────────── -// PARTITION JOB (otomatik bölümleme) -// ───────────────────────────────────────────── - -use crate::installer::{PartitionPlan, PartitionTableType}; - -/// `parted` ve `mkfs` araçlarını kullanarak diski otomatik bölümlendirir. -/// Plan, PartitionStep'te hesaplanmış ve GlobalState'te saklanmıştır. -pub struct PartitionJob { - pub plan: PartitionPlan, -} - -#[async_trait::async_trait] -impl Job for PartitionJob { - fn name(&self) -> &str { "job_partition" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let disk = &self.plan.disk; - let is_gpt = self.plan.table_type == PartitionTableType::Gpt; - - // 0. Diski hazırla: bağlamaları ayır, kernel tablosunu temizle - prepare_disk(disk, ui).await; - - // 1. Bölüm tablosu oluştur - let table_label = if is_gpt { "gpt" } else { "msdos" }; - ui.log(format!("parted {} mktable {}", disk, table_label)); - run_parted(&["-s", disk, "mktable", table_label]).await?; - - let mut next_mb: u64 = 1; // İlk MB'ı boot kayıtları için bırak - - // 2. EFI bölümü (yalnızca GPT/UEFI) - if self.plan.efi_mb > 0 { - let end_mb = next_mb + self.plan.efi_mb; - ui.log(format!("EFI bölümü oluşturuluyor: {}–{} MB", next_mb, end_mb)); - run_parted(&[ - "-s", disk, "mkpart", "fat32", - &format!("{}MB", next_mb), &format!("{}MB", end_mb), - ]).await?; - run_parted(&["-s", disk, "set", "1", "esp", "on"]).await?; - next_mb = end_mb; - } - - // 3. Swap bölümü - let swap_end = next_mb + self.plan.swap_mb; - let swap_num: u32 = if self.plan.efi_mb > 0 { 2 } else { 1 }; - ui.log(format!("Swap bölümü oluşturuluyor: {}–{} MB", next_mb, swap_end)); - run_parted(&[ - "-s", disk, "mkpart", "linux-swap", - &format!("{}MB", next_mb), &format!("{}MB", swap_end), - ]).await?; - next_mb = swap_end; - - // 4. Kök bölümü (kalan alan) - let root_num: u32 = if self.plan.efi_mb > 0 { 3 } else { 2 }; - ui.log(format!("Kök bölümü oluşturuluyor: {}MB – disk sonu", next_mb)); - run_parted(&[ - "-s", disk, "mkpart", "ext4", - &format!("{}MB", next_mb), "100%", - ]).await?; - - // 4.5. Tüm mkpart bitti; kernel'e bildir ve aygıt düğümlerini bekle - sync_partition_table(disk).await; - - // 5. Biçimlendirme - let efi_part = part_path(disk, 1); - let swap_part = part_path(disk, swap_num); - let root_part = part_path(disk, root_num); - - if self.plan.efi_mb > 0 { - ui.log(format!("mkfs.fat -F32 {}", efi_part)); - run_cmd("mkfs.fat", &["-F32", &efi_part]).await?; - } - - ui.log(format!("mkswap {}", swap_part)); - run_cmd("mkswap", &[&swap_part]).await?; - - ui.log(format!("swapon {}", swap_part)); - run_cmd("swapon", &[&swap_part]).await?; - - // LUKS şifreleme (kök bölümü) - // Şifre, shell injection'ı önlemek için doğrudan stdin pipe üzerinden - // iletilir; `sh -c` + string interpolasyon kullanılmaz. - let root_device = if self.plan.encrypt_root && !self.plan.luks_password.is_empty() { - let luks_name = "cryptroot"; - ui.log(format!("cryptsetup luksFormat {}…", root_part)); - run_luks_format(&root_part, &self.plan.luks_password).await - .map_err(|e| format!("LUKS format hatası: {}", e))?; - - ui.log(format!("cryptsetup open {} {}…", root_part, luks_name)); - run_luks_open(&root_part, luks_name, &self.plan.luks_password).await - .map_err(|e| format!("LUKS open hatası: {}", e))?; - - format!("/dev/mapper/{}", luks_name) - } else { - root_part.clone() - }; - - ui.log(format!("mkfs.ext4 -F {}", root_device)); - run_cmd("mkfs.ext4", &["-F", &root_device]).await?; - - Ok(()) - } -} - -/// Bölüm yolunu bağla. -pub struct MountPartitionsJob { - pub plan: PartitionPlan, - pub mount: String, -} - -#[async_trait::async_trait] -impl Job for MountPartitionsJob { - fn name(&self) -> &str { "job_mount" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let disk = &self.plan.disk; - let mount = &self.mount; - let root_num: u32 = if self.plan.efi_mb > 0 { 3 } else { 2 }; - let root_part = part_path(disk, root_num); - - let root_device = if self.plan.encrypt_root { - "/dev/mapper/cryptroot".to_string() - } else { - root_part.clone() - }; - - ui.log(format!("mount {} {}", root_device, mount)); - run_cmd("mount", &[&root_device, mount]).await?; - - if self.plan.efi_mb > 0 { - let efi_dir = format!("{}/boot/efi", mount); - ui.log(format!("mkdir -p {}", efi_dir)); - tokio::fs::create_dir_all(&efi_dir).await - .map_err(|e| format!("{} oluşturulamadı: {}", efi_dir, e))?; - let efi_part = part_path(disk, 1); - ui.log(format!("mount {} {}", efi_part, efi_dir)); - run_cmd("mount", &[&efi_part, &efi_dir]).await?; - } - - Ok(()) - } -} - /// Tam kurulum iş kuyruğu. /// /// Sıra: @@ -1221,7 +488,7 @@ impl Job for MountPartitionsJob { /// 4. Sistem dosyalarını kopyalama (rsync) /// 5. UUID'leri oku → fstab yaz /// 6. Hostname + /etc/hosts -/// 7. Locale yapılandırması + locale-gen +/// 7. Locale yapılandırması + locale.gen /// 8. Zaman dilimi + hwclock /// 9. Klavye (vconsole + X11) /// 10. Kullanıcı oluşturma + şifre (chpasswd) @@ -1236,7 +503,7 @@ pub fn build_full_job_queue( plan: PartitionPlan, cfg: JobQueueConfig, ) -> JobQueue { - DEMO_MODE.store(cfg.demo_mode, std::sync::atomic::Ordering::Relaxed); + DEMO_MODE.store(cfg.demo_mode, Ordering::Relaxed); let is_uefi = plan.efi_mb > 0; let encrypt_root = plan.encrypt_root; @@ -1286,9 +553,10 @@ pub fn build_full_job_queue( }), // 10. Klavye Box::new(ConfigureKeyboardJob { - mount: mt.clone(), - layout: cfg.kb_layout.clone(), - variant: cfg.kb_variant.clone(), + mount: mt.clone(), + layout: cfg.kb_layout.clone(), + variant: cfg.kb_variant.clone(), + language: cfg.language.clone(), }), // 11. Kullanıcı Box::new(CreateUserJob { @@ -1313,8 +581,8 @@ pub fn build_full_job_queue( encrypt_root, })); - // 14. Ekran yöneticisi - jobs.push(Box::new(ConfigureDisplayManagerJob { + // 14. Otomatik oturum açma (yalnızca seçildiyse) + jobs.push(Box::new(ConfigureAutologinJob { mount: mt.clone(), display_manager: cfg.display_manager.clone(), autologin: cfg.autologin, @@ -1348,1194 +616,15 @@ pub fn build_full_job_queue( JobQueue::new(jobs) } -/// Ekran yöneticisi (SDDM/LightDM/GDM) yapılandırması. -pub struct ConfigureDisplayManagerJob { - pub mount: String, - pub display_manager: String, - pub autologin: bool, - pub username: String, - pub desktop_environment: String, -} - -#[async_trait::async_trait] -impl Job for ConfigureDisplayManagerJob { - fn name(&self) -> &str { "job_display_manager" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let dm = &self.display_manager; - ui.log(format!("Ekran yöneticisi yapılandırılıyor: {}", dm)); - - match dm.as_str() { - "sddm" => { - let conf = format!("{}/usr/lib/sddm/sddm.conf.d/sddm.conf", self.mount); - let session = match self.desktop_environment.as_str() { - "plasma" => "plasmax11.desktop", - "xfce" => "xfce.desktop", - "gnome" => "gnome.desktop", - "cinnamon" => "cinnamon.desktop", - "budgie" => "budgie-desktop.desktop", - "lxde" => "LXDE.desktop", - "lxqt" => "lxqt.desktop", - "mate" => "mate.desktop", - "lumina" => "lumina-desktop.desktop", - _ => "plasmax11.desktop", - }; - let content = if self.autologin { - format!( - "[Autologin]\nUser={}\nSession={}\n\n[Theme]\nCurrent=pisilinux24\n", - self.username, session - ) - } else { - "[Autologin]\nUser=\nSession=\n\n[Theme]\nCurrent=pisilinux24\n".to_string() - }; - tokio::fs::write(&conf, content) - .await - .map_err(|e| format!("sddm.conf yazılamadı: {}", e))?; - } - "lightdm" => { - let conf = format!("{}/etc/lightdm/lightdm.conf", self.mount); - // Mevcut dosyayı oku veya baştan yaz - let mut content = String::new(); - if let Ok(existing) = tokio::fs::read_to_string(&conf).await { - content = existing; - } - if self.autologin { - let auto_lines = format!( - "[Seat:*]\nautologin-user={}\nautologin-session={}\n", - self.username, self.desktop_environment - ); - content.push_str(&auto_lines); - } - tokio::fs::write(&conf, content) - .await - .map_err(|e| format!("lightdm.conf yazılamadı: {}", e))?; - } - "gdm" => { - let dir = format!("{}/etc/gdm", self.mount); - let _ = tokio::fs::create_dir_all(&dir).await; - let conf = format!("{}/etc/gdm/custom.conf", self.mount); - let session = match self.desktop_environment.as_str() { - "plasma" => "plasmax11.desktop", - "xfce" => "xfce.desktop", - "gnome" => "gnome.desktop", - "cinnamon" => "cinnamon.desktop", - "budgie" => "budgie-desktop.desktop", - "lxde" => "LXDE.desktop", - "lxqt" => "lxqt.desktop", - "mate" => "mate.desktop", - "lumina" => "lumina-desktop.desktop", - _ => "gnome.desktop", - }; - let content = if self.autologin { - format!( - "[daemon]\nAutomaticLoginEnable=true\nAutomaticLogin={}\nDefaultSession={}\n", - self.username, session - ) - } else { - "[daemon]\n".to_string() - }; - tokio::fs::write(&conf, content) - .await - .map_err(|e| format!("gdm/custom.conf yazılamadı: {}", e))?; - } - _ => { - ui.log(format!("⚠ Bilinmeyen ekran yöneticisi: {}", dm)); - } - } - - ui.log("✓ Ekran yöneticisi yapılandırması tamamlandı"); - Ok(()) - } -} - -/// Ek paket gruplarını chroot içinde kurar. -pub struct InstallExtraPackagesJob { - pub mount: String, - pub package_groups: Vec, -} - -#[async_trait::async_trait] -impl Job for InstallExtraPackagesJob { - fn name(&self) -> &str { "job_netinstall" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - use crate::steps::netinstall::PACKAGE_GROUPS; - - let mut packages: Vec<&str> = Vec::new(); - for (key, _, pkgs) in PACKAGE_GROUPS { - if self.package_groups.contains(&key.to_string()) { - packages.extend_from_slice(pkgs); - } - } - - if packages.is_empty() { - ui.log("Ek paket seçilmedi, atlanıyor."); - return Ok(()); - } - - let pkg_list = packages.join(" "); - ui.log(format!("Ek paketler kuruluyor: {}", pkg_list)); - match run_chroot(&self.mount, &["pisi", "install", &pkg_list]).await { - Ok(_) => ui.log("✓ Ek paketler kuruldu"), - Err(e) => { - ui.log(format!("⚠ pisi install uyarısı: {}", e)); - ui.log("⚠ Bu hata kritik değilse kurulum devam edecek."); - } - } - Ok(()) - } -} - -/// COMAR servislerini ve tetikleyicilerini yapılandırır. -pub struct RunComarJob { - pub mount: String, -} - -#[async_trait::async_trait] -impl Job for RunComarJob { - fn name(&self) -> &str { "job_comar" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // pisi configure-pending: paket post-install scriptlerini çalıştırır. - // Yapılandırılacak paket yoksa çıkış kodu sıfır dışı olabilir — fatal değil. - ui.log("pisi configure-pending çalıştırılıyor (COMAR)…"); - match run_chroot(&self.mount, &["pisi", "configure-pending"]).await { - Ok(_) => { - ui.log("✓ pisi configure-pending tamamlandı"); - } - Err(e) => { - // "no packages to configure" gibi durumlar hata değil - if e.contains("no packages") || e.contains("Nothing to do") { - ui.log("⚠ configure-pending: yapılandırılacak paket yok, atlanıyor"); - } else { - // Gerçek hata — uyar ama kurulumu durdurma - ui.log(format!("⚠ pisi configure-pending uyarısı: {}", e)); - ui.log("⚠ Bu uyarı kritik değilse kurulum devam edecek."); - } - } - } - Ok(()) - } -} - -/// ldconfig: paylaşımlı kütüphane önbelleğini yeniden oluşturur. -pub struct RunLdconfigJob { - pub mount: String, -} - -#[async_trait::async_trait] -impl Job for RunLdconfigJob { - fn name(&self) -> &str { "job_ldconfig" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - ui.log("ldconfig çalıştırılıyor…"); - match run_chroot(&self.mount, &["ldconfig"]).await { - Ok(_) => ui.log("✓ ldconfig tamamlandı"), - Err(e) => ui.log(format!("⚠ ldconfig uyarısı: {}", e)), - } - Ok(()) - } -} - -/// update-environment: PisiLinux init/betiklerini yeniden yapılandırır. -pub struct UpdateEnvironmentJob { - pub mount: String, -} - -#[async_trait::async_trait] -impl Job for UpdateEnvironmentJob { - fn name(&self) -> &str { "job_update_env" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - ui.log("update-environment çalıştırılıyor…"); - match run_chroot(&self.mount, &["update-environment"]).await { - Ok(_) => ui.log("✓ update-environment tamamlandı"), - Err(e) => ui.log(format!("⚠ update-environment uyarısı: {}", e)), - } - Ok(()) - } -} - -/// Live ortam izlerini hedef sistemden temizler. -pub struct CleanupLiveJob { - pub mount: String, -} - -#[async_trait::async_trait] -impl Job for CleanupLiveJob { - fn name(&self) -> &str { "job_cleanup_live" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let mt = &self.mount; - ui.log("Live ortam izleri temizleniyor…"); - - // run/livemedia - let _ = tokio::fs::remove_dir_all(format!("{}/run/livemedia", mt)).await; - // var/cache/pisi/packages - let _ = tokio::fs::remove_dir_all(format!("{}/var/cache/pisi/packages", mt)).await; - // YALI desktop dosyaları - //let _ = tokio::fs::remove_file(format!("{}/usr/share/applications/yali.desktop", mt)).await; - //let _ = tokio::fs::remove_file(format!("{}/usr/share/applications/yali-bin.desktop", mt)).await; - let _ = tokio::fs::remove_dir_all(format!("{}/bootmnt", mt)).await; - //pisi kullanıcısını sil (ev diziniyle birlikte), YALI paketlerini kaldır - let _ = run_chroot(&self.mount, &["userdel", "-r", "pisi"]).await; - let _ = run_chroot(&self.mount, &["pisi", "rm", "yali-rs"]).await; - // live paket deposunu kaldır - let _ = run_chroot(&self.mount, &["pisi", "rr", "live"]).await; - // depolarları yeniden ekle (stable2 + contrib) - ui.log("Depolar Ekleniyor…"); - let _ = run_chroot(&self.mount, &["pisi", "ar", "stable2", "https://stable2.pisilinux.org/pisi-index.xml.xz"]).await; - let _ = run_chroot(&self.mount, &["pisi", "ar", "contrib", "https://contrib.pisilinux.org/pisi-index.xml.xz"]).await; - // depoları aktif et - ui.log("Depolar aktif ediliyor..."); - let _ = run_chroot(&self.mount, &["pisi", "er", "contrib", "stable2"]).await; - // paket listelerini güncelle - ui.log("Depolar Güncelleniyor..."); - let _ = run_chroot(&self.mount, &["pisi", "ur"]).await; - - ui.log("✓ Live temizlik tamamlandı"); - Ok(()) - } -} - -/// blkid ile UUID okuyup fstab'ı doğrudan yazan job. -/// (async closure Rust'ta trait object olarak kullanılamaz; -/// bu nedenle ayrı bir Job struct'ı gerekli.) -struct FstabFromBlkidJob { - plan: PartitionPlan, - mount: String, -} - -#[async_trait::async_trait] -impl Job for FstabFromBlkidJob { - fn name(&self) -> &str { "job_fstab" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - ui.log("blkid ile UUID'ler okunuyor…"); - let (root_uuid, efi_uuid, swap_uuid) = read_partition_uuids(&self.plan).await?; - ui.log(format!("Kök UUID: {}", root_uuid)); - - let job = GenerateFstabJob { - mount: self.mount.clone(), - root_uuid, - efi_uuid, - swap_uuid, - encrypt_root: self.plan.encrypt_root, - }; - job.run(ui).await - } -} - -// ───────────────────────────────────────────── -// CHROOT YAPILANDIRMA JOB'LARI -// ───────────────────────────────────────────── - -/// /etc/hostname ve /etc/hosts dosyalarını yazar. -pub struct ConfigureHostnameJob { - pub mount: String, - pub hostname: String, -} - -#[async_trait::async_trait] -impl Job for ConfigureHostnameJob { - fn name(&self) -> &str { "job_hostname" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let etc_dir = format!("{}/etc", self.mount); - let _ = tokio::fs::create_dir_all(&etc_dir).await; - - // /etc/hostname - let hostname_path = format!("{}/etc/hostname", self.mount); - ui.log(format!("Yazılıyor: {}", hostname_path)); - tokio::fs::write(&hostname_path, format!("{}\n", self.hostname)) - .await - .map_err(|e| format!("/etc/hostname yazılamadı: {}", e))?; - - // /etc/hosts - let hosts_path = format!("{}/etc/hosts", self.mount); - let hosts_content = format!( - "127.0.0.1\tlocalhost\n\ - ::1\t\tlocalhost\n\ - 127.0.1.1\t{hostname}\n", - hostname = self.hostname - ); - ui.log(format!("Yazılıyor: {}", hosts_path)); - tokio::fs::write(&hosts_path, hosts_content) - .await - .map_err(|e| format!("/etc/hosts yazılamadı: {}", e))?; - - Ok(()) - } -} - -/// /etc/locale.conf ve /etc/locale.gen'i yazar, sonra locale-gen çalıştırır. -pub struct ConfigureLocaleJob { - pub mount: String, - pub locale: String, // ör. "tr_TR.UTF-8" -} - -#[async_trait::async_trait] -impl Job for ConfigureLocaleJob { - fn name(&self) -> &str { "job_locale" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // Locale değeri doğrulama: yalnızca alfanumerik, '.', '_', '-', '@' - // karakterlerine izin ver. Yol manipülasyonu ve injection önlenir. - let locale_valid = !self.locale.is_empty() - && !self.locale.contains("..") - && !self.locale.contains('/') - && !self.locale.contains('\n') - && self.locale.chars().all(|c| c.is_alphanumeric() || "._-@".contains(c)); - if !locale_valid { - return Err(format!("Geçersiz locale değeri: '{}'", self.locale)); - } - - let etc_dir = format!("{}/etc", self.mount); - let _ = tokio::fs::create_dir_all(&etc_dir).await; - let _ = tokio::fs::create_dir_all(format!("{}/etc/env.d", self.mount)).await; - - // /etc/locale.conf (systemd-style) - let conf_path = format!("{}/etc/locale.conf", self.mount); - let conf = format!( - "LANG={locale}\nLC_ALL={locale}\n", - locale = self.locale - ); - ui.log(format!("Yazılıyor: {}", conf_path)); - let _ = tokio::fs::write(&conf_path, conf).await; - - // /etc/env.d/03locale (PisiLinux native) - let pisi_locale_path = format!("{}/etc/env.d/03locale", self.mount); - let pisi_locale = format!( - "LANG={locale}\nLC_ALL={locale}\n", - locale = self.locale - ); - ui.log(format!("Yazılıyor: {}", pisi_locale_path)); - let _ = tokio::fs::write(&pisi_locale_path, pisi_locale).await; - - // /etc/locale.gen — satırın başındaki # kaldırılır - let gen_path = format!("{}/etc/locale-gen", self.mount); - ui.log(format!("Güncelleniyor: {}", gen_path)); - let content = tokio::fs::read_to_string(&gen_path).await.unwrap_or_default(); - let updated = content - .lines() - .map(|line| { - let stripped = line.trim_start_matches('#').trim_start(); - if stripped.starts_with(&self.locale) { - stripped.to_string() // yorumu kaldır - } else { - line.to_string() - } - }) - .collect::>() - .join("\n"); - tokio::fs::write(&gen_path, updated + "\n") - .await - .map_err(|e| format!("/etc/locale-gen yazılamadı: {}", e))?; - - // locale-gen çalıştır — kurulum sonrası locale desteği için zorunlu - ui.log("locale-gen çalıştırılıyor…"); - run_chroot(&self.mount, &["locale-gen"]).await?; - - Ok(()) - } -} - -/// Zaman dilimini ayarlar ve hwclock'u senkronize eder. -pub struct ConfigureTimezoneJob { - pub mount: String, - pub timezone: String, // ör. "Europe/Istanbul" -} - -#[async_trait::async_trait] -impl Job for ConfigureTimezoneJob { - fn name(&self) -> &str { "job_timezone" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // Path traversal koruması: timezone değeri yalnızca alfanumerik, - // '/', '_', '-', '+' karakterlerine izin verir; ".." asla geçemez. - let tz = &self.timezone; - let tz_valid = !tz.is_empty() - && !tz.contains("..") - && tz.chars().all(|c| c.is_alphanumeric() || "/._-+".contains(c)); - if !tz_valid { - return Err(format!("Geçersiz timezone değeri: '{}'", tz)); - } - - // Sembolik link: /etc/localtime → /usr/share/zoneinfo/ - let link_target = format!("/usr/share/zoneinfo/{}", self.timezone); - let link_path = format!("{}/etc/localtime", self.mount); - - ui.log(format!("ln -sf {} {}", link_target, link_path)); - // Önce varsa eski linki sil - let _ = tokio::fs::remove_file(&link_path).await; - // tokio'da Unix symlink için spawn_blocking kullan - let lt = link_target.clone(); - let lp = link_path.clone(); - tokio::task::spawn_blocking(move || { - std::os::unix::fs::symlink(<, &lp) - }).await - .map_err(|e| format!("symlink spawn hatası: {}", e))? - .map_err(|e| format!("localtime symlink: {}", e))?; - - // hwclock --systohc - ui.log("hwclock --systohc çalıştırılıyor…"); - // Hata kritik değil, uyar ve devam et - match run_chroot(&self.mount, &["hwclock", "--systohc"]).await { - Ok(_) => ui.log("hwclock senkronize edildi."), - Err(e) => ui.log(format!("⚠ hwclock uyarısı (kritik değil): {}", e)), - } - - Ok(()) - } -} - -/// NTP ve manuel tarih/saat yapılandırması. -pub struct ConfigureDateTimeJob { - pub mount: String, - pub use_ntp: bool, - pub year: i32, - pub month: u32, - pub day: u32, - pub hour: u32, - pub minute: u32, -} - -#[async_trait::async_trait] -impl Job for ConfigureDateTimeJob { - fn name(&self) -> &str { "job_datetime" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - if self.use_ntp { - ui.log("NTP etkinleştiriliyor…"); - // systemd-timesyncd veya ntpd'yi etkinleştir - let _ = run_chroot(&self.mount, &["systemctl", "enable", "systemd-timesyncd"]).await; - let _ = run_chroot(&self.mount, &["systemctl", "start", "systemd-timesyncd"]).await; - } else { - ui.log("Manuel tarih/saat ayarlanıyor…"); - let date_str = format!( - "{:04}-{:02}-{:02} {:02}:{:02}:00", - self.year, self.month, self.day, self.hour, self.minute - ); - let _ = run_chroot(&self.mount, &["date", "-s", &date_str]).await; - let _ = run_chroot(&self.mount, &["hwclock", "--systohc"]).await; - } - Ok(()) - } -} - -/// Klavye düzenini /etc/vconsole.conf ve X11 yapılandırmasına yazar. -pub struct ConfigureKeyboardJob { - pub mount: String, - pub layout: String, // ör. "tr" - pub variant: String, // ör. "f" veya "" -} - -#[async_trait::async_trait] -impl Job for ConfigureKeyboardJob { - fn name(&self) -> &str { "job_keyboard" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // /etc/vconsole.conf (systemd-style TTY) - let vconsole_path = format!("{}/etc/vconsole.conf", self.mount); - let keymap = if self.variant.is_empty() { - self.layout.clone() - } else { - format!("{}-{}", self.layout, self.variant) - }; - let vconsole = format!("KEYMAP={}\nFONT=ter-v16n\n", keymap); - ui.log(format!("Yazılıyor: {}", vconsole_path)); - let _ = tokio::fs::write(&vconsole_path, vconsole).await; - - // /etc/conf.d/mudur (PisiLinux native init) - let mudur_path = format!("{}/etc/conf.d/mudur", self.mount); - let mudur_conf = format!("keymap={}\nfont=ter-v16n\n", keymap); - ui.log(format!("Yazılıyor: {}", mudur_path)); - let _ = tokio::fs::write(&mudur_path, mudur_conf).await; - - // /etc/X11/xorg.conf.d/00-keyboard.conf (X11 için) - let x11_dir = format!("{}/etc/X11/xorg.conf.d", self.mount); - let x11_path = format!("{}/00-keyboard.conf", x11_dir); - tokio::fs::create_dir_all(&x11_dir).await - .map_err(|e| format!("{} oluşturulamadı: {}", x11_dir, e))?; - - let options_line = if self.variant.is_empty() { - String::new() - } else { - format!("\n\t\tOption \"XkbVariant\" \"{}\"", self.variant) - }; - - let x11_conf = format!( - "Section \"InputClass\"\n\ - \tIdentifier \"system-keyboard\"\n\ - \tMatchIsKeyboard \"on\"\n\ - \tOption \"XkbLayout\" \"{layout}\"{options}\n\ - EndSection\n", - layout = self.layout, - options = options_line, - ); - ui.log(format!("Yazılıyor: {}", x11_path)); - tokio::fs::write(&x11_path, x11_conf) - .await - .map_err(|e| format!("xorg keyboard conf yazılamadı: {}", e))?; - - Ok(()) - } -} - -/// Kullanıcı hesabı oluşturur ve şifresini ayarlar. -pub struct CreateUserJob { - pub mount: String, - pub username: String, - pub password: String, - pub root_password: String, -} - -#[async_trait::async_trait] -impl Job for CreateUserJob { - fn name(&self) -> &str { "job_user" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // wheel grubunun varlığını garantile (PisiLinux'ta olmayabilir) - let group_file = format!("{}/etc/group", self.mount); - let group_content = tokio::fs::read_to_string(&group_file) - .await.unwrap_or_default(); - if !group_content.lines().any(|l| l.starts_with("wheel:")) { - ui.log("wheel grubu oluşturuluyor…"); - run_chroot(&self.mount, &["groupadd", "-r", "wheel"]).await - .unwrap_or_default(); // hata olsa bile devam et - } - - // useradd: kullanıcıyı temel gruplarla oluştur - // PisiLinux'ta "storage" grubu yoksa useradd hata verir; -M flag ile grub yoksa atla - // Güvenli yöntem: önce her grubu tek tek ekle - let groups = ["users", "pnp", "disk", "audio", "video", "power", "dialout", "lp", "lpadmin", "cdrom", "floppy"]; - for grp in &groups { - if group_content.lines().any(|l| l.starts_with(&format!("{}:", grp))) { - // grup zaten var - } else { - // grup yoksa oluşturma (hata görmezden gel) - let _ = run_chroot(&self.mount, &["groupadd", grp]).await; - } - } - - // Kullanıcıyı oluştur - let groups_str = groups.join(","); - ui.log(format!("useradd -m -G {} -s /bin/bash {}", groups_str, self.username)); - run_chroot(&self.mount, &[ - "useradd", - "-m", - "-G", &groups_str, - "-s", "/bin/bash", - &self.username, - ]).await?; - - // // chpasswd ile şifre ayarla (stdin üzerinden güvenli) - // ui.log(format!("Şifre ayarlanıyor: {}", self.username)); - // let chpasswd_input = format!("{}:{}", self.username, self.password); - // set_password_via_chpasswd(&self.mount, &chpasswd_input).await?; - - // // Root şifresi: belirlenmişse ayarla, yoksa kilitle - // if self.root_password.is_empty() { - // ui.log("Root hesabı kilitleniyor…"); - // run_chroot(&self.mount, &["passwd", "-l", "root"]).await?; - // } else { - // ui.log("Root şifresi ayarlanıyor…"); - // let root_input = format!("root:{}", self.root_password); - // set_password_via_chpasswd(&self.mount, &root_input).await?; - // } - - // 2. chpasswd ile şifre ayarla (YENİ BASİTLEŞTİRİLMİŞ VE KESİN YÖNTEM) - ui.log(format!("Şifre ayarlanıyor: {}", self.username)); - // sh -c kullanarak echo ile chpasswd'e şifreyi güvenli bir şekilde üflüyoruz - let user_cmd = format!("echo '{}:{}' | chpasswd -c SHA512", self.username, self.password); - run_chroot(&self.mount, &["sh", "-c", &user_cmd]).await?; - - // 3. Root şifresi: belirlenmişse ayarla, yoksa kilitle - if self.root_password.is_empty() { - ui.log("Root hesabı kilitleniyor…"); - run_chroot(&self.mount, &["passwd", "-l", "root"]).await?; - } else { - ui.log("Root şifresi ayarlanıyor…"); - let root_cmd = format!("echo 'root:{}' | chpasswd -c SHA512", self.root_password); - run_chroot(&self.mount, &["sh", "-c", &root_cmd]).await?; -} - - - // sudoers: wheel grubu sudo yetkisi alsın - let sudoers_dir = format!("{}/etc/sudoers.d", self.mount); - tokio::fs::create_dir_all(&sudoers_dir).await - .map_err(|e| format!("{} oluşturulamadı: {}", sudoers_dir, e))?; - let sudoers_path = format!("{}/wheel", sudoers_dir); - ui.log(format!("Yazılıyor: {}", sudoers_path)); - tokio::fs::write(&sudoers_path, "%wheel ALL=(ALL:ALL) ALL\n") - .await - .map_err(|e| format!("sudoers yazılamadı: {}", e))?; - - // Dosya izinleri: sudoers 440 olmalı - run_cmd("chmod", &["440", &sudoers_path]).await?; - - Ok(()) - } -} - -// /// `chpasswd` komutuna stdin üzerinden kullanıcı:şifre gönderir. -// async fn set_password_via_chpasswd(mount: &str, input: &str) -> Result<(), String> { -// if DEMO_MODE.load(std::sync::atomic::Ordering::Relaxed) { -// tokio::time::sleep(std::time::Duration::from_millis(2500)).await; -// return Ok(()); -// } - -// use tokio::io::AsyncWriteExt; -// use tokio::process::Command; - -// let mut child = Command::new("chroot") -// .args([mount, "chpasswd"]) -// .stdin(std::process::Stdio::piped()) -// .stdout(std::process::Stdio::null()) -// .stderr(std::process::Stdio::piped()) -// .spawn() -// .map_err(|e| format!("chpasswd başlatılamadı: {}", e))?; - -// if let Some(mut stdin) = child.stdin.take() { -// let mut data = input.as_bytes().to_vec(); -// if !data.ends_with(b"\n") { -// data.push(b'\n'); -// } -// stdin.write_all(&data).await -// .map_err(|e| format!("chpasswd stdin yazma hatası: {}", e))?; -// } - -// let output = child.wait_with_output().await -// .map_err(|e| format!("chpasswd bekleme hatası: {}", e))?; - -// if output.status.success() { -// Ok(()) -// } else { -// Err(String::from_utf8_lossy(&output.stderr).trim().to_string()) -// } -// } - - -/// fstab'ı doğrudan dosyaya yazar (genfstab yerine; ISO ortamında daha güvenilir). -pub struct GenerateFstabJob { - pub mount: String, - pub root_uuid: String, // blkid ile alınır - pub efi_uuid: Option, - pub swap_uuid: String, - pub encrypt_root: bool, -} - -#[async_trait::async_trait] -impl Job for GenerateFstabJob { - fn name(&self) -> &str { "job_fstab" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let etc_dir = format!("{}/etc", self.mount); - let _ = tokio::fs::create_dir_all(&etc_dir).await; - - let fstab_path = format!("{}/etc/fstab", self.mount); - ui.log(format!("Yazılıyor: {}", fstab_path)); - - let mut fstab = String::from( - "# /etc/fstab — Yali tarafından otomatik oluşturuldu\n\ - # \n\n" - ); - - // Kök bölümü - if self.encrypt_root { - fstab.push_str( - "/dev/mapper/cryptroot / ext4 defaults,noatime 0 1\n" - ); - } else { - fstab.push_str(&format!( - "UUID={} / ext4 defaults,noatime 0 1\n", - self.root_uuid - )); - } - - // EFI bölümü - if let Some(ref efi) = self.efi_uuid { - fstab.push_str(&format!( - "UUID={} /boot/efi vfat umask=0077 0 2\n", - efi - )); - } - - // Swap - fstab.push_str(&format!( - "UUID={} none swap sw 0 0\n", - self.swap_uuid - )); - - tokio::fs::write(&fstab_path, fstab) - .await - .map_err(|e| format!("fstab yazılamadı: {}", e))?; - - // crypttab (LUKS için) - if self.encrypt_root { - let crypttab_path = format!("{}/etc/crypttab", self.mount); - let crypttab = format!( - "cryptroot UUID={} none luks\n", - self.root_uuid - ); - ui.log(format!("Yazılıyor: {}", crypttab_path)); - tokio::fs::write(&crypttab_path, crypttab) - .await - .map_err(|e| format!("crypttab yazılamadı: {}", e))?; - } - - Ok(()) - } -} - -/// Disk bölümlerinin UUID'lerini `blkid` ile okur. -pub async fn read_partition_uuids( - plan: &PartitionPlan, -) -> Result<(String, Option, String), String> { - let (root_num, swap_num): (u32, u32) = if plan.efi_mb > 0 { (3, 2) } else { (2, 1) }; - - let root_part = part_path(&plan.disk, root_num); - let swap_part = part_path(&plan.disk, swap_num); - - // Şifreli kök: blkid'den LUKS UUID'sini al (crypttab için) - let root_uuid = blkid_uuid(&root_part).await?; - let swap_uuid = blkid_uuid(&swap_part).await?; - let efi_uuid = if plan.efi_mb > 0 { - Some(blkid_uuid(&part_path(&plan.disk, 1)).await?) - } else { - None - }; - - Ok((root_uuid, efi_uuid, swap_uuid)) -} - -async fn blkid_uuid(device: &str) -> Result { - if DEMO_MODE.load(std::sync::atomic::Ordering::Relaxed) { - tokio::time::sleep(std::time::Duration::from_millis(1500)).await; - return Ok(format!("demo-uuid-{}", device.replace("/", "-"))); - } - - let output = tokio::process::Command::new("blkid") - .args(["-s", "UUID", "-o", "value", device]) - .output() - .await - .map_err(|e| format!("blkid çalıştırılamadı: {}", e))?; - - let uuid = String::from_utf8_lossy(&output.stdout).trim().to_string(); - if uuid.is_empty() { - Err(format!("{} için UUID bulunamadı", device)) - } else { - Ok(uuid) - } -} - -// ───────────────────────────────────────────── -// MANUEL BÖLÜMLEME İÇİN DESTEKLEYİCİ JOB'LAR -// ───────────────────────────────────────────── - -use crate::installer::{CustomPartition, FsType}; - -/// Manuel bölümleme ayarlarını disk üzerinde uygulayan ve biçimlendiren Job. -pub struct CustomPartitionJob { - pub disk: String, - pub custom_partitions: Vec, -} - -#[async_trait::async_trait] -impl Job for CustomPartitionJob { - fn name(&self) -> &str { "job_custom_partition" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let is_uefi = std::path::Path::new("/sys/firmware/efi").exists(); - - // 0. Diski hazırla: bağlamaları ayır, kernel tablosunu temizle - prepare_disk(&self.disk, ui).await; - - let is_gpt = is_uefi; // Genellikle UEFI ise GPT kullanılır - // MBR'de "primary" zorunludur, GPT'de ise bu alan isim (label) alanıdır. - let part_type_or_name = if is_gpt { "" } else { "primary" }; - - // 1. Bölüm tablosu oluştur - let table_label = if is_uefi { "gpt" } else { "msdos" }; - ui.log(format!("parted {} mktable {}", self.disk, table_label)); - run_parted(&["-s", &self.disk, "mktable", table_label]).await?; - - let mut next_mb: u64 = 1; // İlk MB boot sektörü - - // 2. Bölümleri parted ile oluştur - for (i, part) in self.custom_partitions.iter().enumerate() { - let part_num = (i + 1) as u32; - let end_str = if part.size_mb == 0 { - "100%".to_string() - } else { - format!("{}MB", next_mb + part.size_mb) - }; - let start_str = format!("{}MB", next_mb); - - let fs_label = match part.fstype { - FsType::Fat32 => "fat32", - FsType::Swap => "linux-swap", - FsType::Ext4 => "ext4", - FsType::Ext3 => "ext3", - FsType::Btrfs => "btrfs", - FsType::Xfs => "xfs", - FsType::Ntfs => "ntfs", - // LVM PV için parted "ext4" ile işaretle, pvcreate sonra - FsType::Lvm => "ext4", - // LVM LV doğrudan parted ile oluşturulmaz - FsType::LvmLv => continue, - }; - - ui.log(format!( - "Bölüm {} oluşturuluyor: {} - {} ({})", - part_num, start_str, end_str, fs_label - )); - run_parted(&[ - "-s", &self.disk, "mkpart", part_type_or_name, fs_label, - &start_str, &end_str - ]).await?; - - if part.mountpoint == "/boot/efi" || part.fstype == FsType::Fat32 { - run_parted(&["-s", &self.disk, "set", &part_num.to_string(), "esp", "on"]).await?; - } - - if part.size_mb > 0 { - next_mb += part.size_mb; - } - } - - // 2.5. Tüm mkpart bitti; kernel'e bildir ve aygıt düğümlerini bekle - sync_partition_table(&self.disk).await; - - // 3. Biçimlendir (LUKS ile şifreleme desteklenir) - for part in &self.custom_partitions { - let path = &part.device; - - // LUKS şifreleme (kök veya isteğe bağlı bölümler) - // Şifre, shell injection'ı önlemek için doğrudan stdin pipe üzerinden - // iletilir; `sh -c` + string interpolasyon kullanılmaz. - let fs_device = if part.encrypt && !part.luks_password.is_empty() { - let luks_name = if part.luks_name.is_empty() { - format!("crypt_{}", part.mountpoint.replace("/", "_")) - } else { - part.luks_name.clone() - }; - let luks_name = luks_name.trim_start_matches('_').to_string(); - - ui.log(format!("cryptsetup luksFormat {}…", path)); - run_luks_format(path, &part.luks_password).await - .map_err(|e| format!("LUKS format hatası ({}): {}", path, e))?; - - ui.log(format!("cryptsetup open {} {}…", path, luks_name)); - run_luks_open(path, &luks_name, &part.luks_password).await - .map_err(|e| format!("LUKS open hatası ({}): {}", path, e))?; - - format!("/dev/mapper/{}", luks_name) - } else { - path.clone() - }; - - match part.fstype { - FsType::Fat32 => { - ui.log(format!("mkfs.fat -F32 {}", fs_device)); - run_cmd("mkfs.fat", &["-F32", &fs_device]).await?; - } - FsType::Swap => { - ui.log(format!("mkswap {}", path)); - run_cmd("mkswap", &[path]).await?; - ui.log(format!("swapon {}", path)); - run_cmd("swapon", &[path]).await?; - } - FsType::Ext4 => { - ui.log(format!("mkfs.ext4 -F {}", fs_device)); - run_cmd("mkfs.ext4", &["-F", &fs_device]).await?; - } - FsType::Ext3 => { - ui.log(format!("mkfs.ext3 -F {}", fs_device)); - run_cmd("mkfs.ext3", &["-F", &fs_device]).await?; - } - FsType::Btrfs => { - ui.log(format!("mkfs.btrfs -f {}", fs_device)); - run_cmd("mkfs.btrfs", &["-f", &fs_device]).await?; - } - FsType::Xfs => { - ui.log(format!("mkfs.xfs -f {}", fs_device)); - run_cmd("mkfs.xfs", &["-f", &fs_device]).await?; - } - FsType::Ntfs => { - ui.log(format!("mkfs.ntfs -f {}", fs_device)); - run_cmd("mkfs.ntfs", &["-f", &fs_device]).await?; - } - FsType::Lvm => { - ui.log(format!("pvcreate {}", path)); - run_cmd("pvcreate", &[path]).await?; - } - // LV ayrı bir job'da oluşturulur - FsType::LvmLv => {} - } - } - - Ok(()) - } -} - -/// LVM Volume Group ve Logical Volume'leri oluşturur. -pub struct SetupLvmJob { - pub volume_groups: Vec, - pub logical_volumes: Vec, -} - -#[async_trait::async_trait] -impl Job for SetupLvmJob { - fn name(&self) -> &str { "job_setup_lvm" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - for vg in &self.volume_groups { - let pv_str = vg.pv_devices.join(" "); - ui.log(format!("vgcreate {} {}", vg.name, pv_str)); - run_cmd("vgcreate", &[&vg.name, &pv_str]).await?; - } - - for lv in &self.logical_volumes { - let size_str = if lv.size_mb == 0 { - "100%FREE".to_string() - } else { - format!("{}M", lv.size_mb) - }; - let lv_path = format!("/dev/{}/{}", lv.vg_name, lv.name); - ui.log(format!("lvcreate -L {} -n {} {}", size_str, lv.name, lv.vg_name)); - run_cmd("lvcreate", &["-L", &size_str, "-n", &lv.name, &lv.vg_name]).await?; - - let fs_cmd = match lv.fstype { - crate::installer::FsType::Ext4 => "mkfs.ext4", - crate::installer::FsType::Ext3 => "mkfs.ext3", - crate::installer::FsType::Btrfs => "mkfs.btrfs", - crate::installer::FsType::Xfs => "mkfs.xfs", - _ => continue, - }; - ui.log(format!("{} {}", fs_cmd, lv_path)); - run_cmd(fs_cmd, &[&lv_path]).await?; - } - Ok(()) - } -} - -/// Manuel bölümleri ve mantıksal hacimleri kök dizinden başlayarak hiyerarşik olarak hedef yola bağlayan Job. -pub struct MountCustomPartitionsJob { - pub custom_partitions: Vec, - pub logical_volumes: Vec, - pub mount: String, -} - -impl MountCustomPartitionsJob { - /// Şifreli bölümler için mapper yolunu döndürür. - fn device_path(&self, part: &CustomPartition) -> String { - if part.encrypt { - let luks_name = if part.luks_name.is_empty() { - format!("crypt_{}", part.mountpoint.replace("/", "_").trim_start_matches('_')) - } else { - part.luks_name.clone() - }; - format!("/dev/mapper/{}", luks_name) - } else { - part.device.clone() - } - } -} - -#[async_trait::async_trait] -impl Job for MountCustomPartitionsJob { - fn name(&self) -> &str { "job_mount_custom" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - // 1. Kök (/) bölümünü (fiziksel partition veya LVM LV) bul ve bağla - let root_device = if let Some(root_part) = self.custom_partitions.iter().find(|p| p.mountpoint == "/") { - self.device_path(root_part) - } else if let Some(root_lv) = self.logical_volumes.iter().find(|lv| lv.mountpoint == "/") { - format!("/dev/{}/{}", root_lv.vg_name, root_lv.name) - } else { - return Err("Kök (/) bölümü manuel listede veya mantıksal bölümlerde bulunamadı.".to_string()); - }; - - ui.log(format!("Kök dizin bağlanıyor: {} ➔ {}", root_device, self.mount)); - run_cmd("mount", &[&root_device, &self.mount]).await?; - - // 2. Diğer bölümleri ve mantıksal hacimleri topla, sırala ve bağla (derinliğe göre artan sırada) - struct MountItem { - device: String, - mountpoint: String, - } - - let mut mount_items = Vec::new(); - - for part in &self.custom_partitions { - if part.mountpoint != "/" && part.fstype != FsType::Swap && !part.mountpoint.is_empty() { - mount_items.push(MountItem { - device: self.device_path(part), - mountpoint: part.mountpoint.clone(), - }); - } - } - - for lv in &self.logical_volumes { - if lv.mountpoint != "/" && lv.fstype != FsType::Swap && !lv.mountpoint.is_empty() { - mount_items.push(MountItem { - device: format!("/dev/{}/{}", lv.vg_name, lv.name), - mountpoint: lv.mountpoint.clone(), - }); - } - } - - mount_items.sort_by_key(|item| item.mountpoint.len()); - - for item in mount_items { - let target_path = format!("{}{}", self.mount, item.mountpoint); - ui.log(format!("Bağlama noktası dizini oluşturuluyor: {}", target_path)); - tokio::fs::create_dir_all(&target_path).await - .map_err(|e| format!("{} oluşturulamadı: {}", target_path, e))?; - ui.log(format!("Bağlanıyor: {} ➔ {}", item.device, target_path)); - run_cmd("mount", &[&item.device, &target_path]).await?; - } - - Ok(()) - } -} - -/// Manuel bölümleme planına göre fstab dosyası üreten Job. -pub struct FstabFromCustomPartitionsJob { - pub custom_partitions: Vec, - pub logical_volumes: Vec, - pub mount: String, -} - -#[async_trait::async_trait] -impl Job for FstabFromCustomPartitionsJob { - fn name(&self) -> &str { "job_fstab" } - - async fn run(&self, ui: &UiSender) -> Result<(), String> { - let etc_dir = format!("{}/etc", self.mount); - let _ = tokio::fs::create_dir_all(&etc_dir).await; - - let fstab_path = format!("{}/etc/fstab", self.mount); - ui.log(format!("Yazılıyor: {}", fstab_path)); - - let mut fstab = String::from( - "# /etc/fstab — Yali tarafından otomatik (manuel mod) oluşturuldu\n\ - # \n\n" - ); - - let mut crypttab = String::from( - "# /etc/crypttab — Yali tarafından otomatik oluşturuldu\n" - ); - - for part in &self.custom_partitions { - if part.mountpoint.is_empty() { continue; } - - let is_encrypted = part.encrypt && !part.luks_password.is_empty(); - - let device_field = if is_encrypted { - let luks_uuid = blkid_uuid(&part.device).await?; - let luks_name = if part.luks_name.is_empty() { - format!("crypt_{}", part.mountpoint.replace("/", "_").trim_start_matches('_')) - } else { - part.luks_name.clone() - }; - crypttab.push_str(&format!( - "{} UUID={} none luks\n", - luks_name, luks_uuid - )); - format!("/dev/mapper/{:<30}", luks_name) - } else { - ui.log(format!("{} için UUID okunuyor…", part.device)); - let uuid = blkid_uuid(&part.device).await?; - format!("UUID={:<36}", uuid) - }; - - let (mp, options, dump, pass) = match part.fstype { - FsType::Swap => ("none", "sw", "0", "0"), - FsType::Fat32 => ("/boot/efi", "umask=0077", "0", "2"), - FsType::Ext4 | FsType::Ext3 if part.mountpoint == "/" => ("/", "defaults,noatime", "0", "1"), - _ => { - let pass_val = if part.mountpoint == "/" { "1" } else { "2" }; - (part.mountpoint.as_str(), "defaults,noatime", "0", pass_val) - } - }; - - let fs_name = match part.fstype { - FsType::Ext4 => "ext4", - FsType::Ext3 => "ext3", - FsType::Btrfs => "btrfs", - FsType::Xfs => "xfs", - FsType::Fat32 => "vfat", - FsType::Ntfs => "ntfs-3g", - FsType::Swap => "swap", - FsType::Lvm | FsType::LvmLv => "ext4", - }; - - fstab.push_str(&format!( - "{} {:<12} {:<6} {:<18} {} {}\n", - device_field, mp, fs_name, options, dump, pass - )); - } - - // LVM mantıksal bölümlerini fstab'a ekle - for lv in &self.logical_volumes { - if lv.mountpoint.is_empty() { continue; } - - let device_field = format!("/dev/{}/{}", lv.vg_name, lv.name); - - let (mp, options, dump, pass) = match lv.fstype { - FsType::Swap => ("none", "sw", "0", "0"), - FsType::Fat32 => ("/boot/efi", "umask=0077", "0", "2"), - FsType::Ext4 | FsType::Ext3 if lv.mountpoint == "/" => ("/", "defaults,noatime", "0", "1"), - _ => { - let pass_val = if lv.mountpoint == "/" { "1" } else { "2" }; - (lv.mountpoint.as_str(), "defaults,noatime", "0", pass_val) - } - }; - - let fs_name = match lv.fstype { - FsType::Ext4 => "ext4", - FsType::Ext3 => "ext3", - FsType::Btrfs => "btrfs", - FsType::Xfs => "xfs", - FsType::Fat32 => "vfat", - FsType::Ntfs => "ntfs-3g", - FsType::Swap => "swap", - _ => "ext4", - }; - - fstab.push_str(&format!( - "{:<42} {:<12} {:<6} {:<18} {} {}\n", - device_field, mp, fs_name, options, dump, pass - )); - } - - tokio::fs::write(&fstab_path, fstab) - .await - .map_err(|e| format!("fstab yazılamadı: {}", e))?; - - // crypttab (sadece şifreli bölümler için) - let crypttab_device_count = crypttab.lines().count().saturating_sub(1); // header satırını sayma - if crypttab_device_count > 0 { - let crypttab_path = format!("{}/etc/crypttab", self.mount); - ui.log(format!("Yazılıyor: {}", crypttab_path)); - let _ = tokio::fs::write(&crypttab_path, crypttab).await; - } - - Ok(()) - } -} - /// Manuel bölümleme kullanıldığında derlenecek kurulum iş kuyruğu. pub fn build_custom_job_queue( disk: String, - custom_partitions: Vec, + custom_partitions: Vec, volume_groups: Vec, logical_volumes: Vec, cfg: JobQueueConfig, ) -> JobQueue { - DEMO_MODE.store(cfg.demo_mode, std::sync::atomic::Ordering::Relaxed); + DEMO_MODE.store(cfg.demo_mode, Ordering::Relaxed); let is_uefi = std::path::Path::new("/sys/firmware/efi").exists(); let encrypt_root = custom_partitions.iter().any(|p| p.mountpoint == "/" && p.encrypt); @@ -2562,7 +651,7 @@ pub fn build_custom_job_queue( hour: cfg.manual_hour, minute: cfg.manual_minute, }), - Box::new(ConfigureKeyboardJob { mount: mt.clone(), layout: cfg.kb_layout.clone(), variant: cfg.kb_variant.clone() }), + Box::new(ConfigureKeyboardJob { mount: mt.clone(), layout: cfg.kb_layout.clone(), variant: cfg.kb_variant.clone(), language: cfg.language.clone() }), Box::new(CreateUserJob { mount: mt.clone(), username: cfg.username.clone(), password: cfg.password.clone(), root_password: cfg.root_password.clone() }), Box::new(GenerateInitramfsJob { mount: mt.clone(), encrypt_root, lvm_active: !volume_groups.is_empty() }), ]; @@ -2578,7 +667,7 @@ pub fn build_custom_job_queue( encrypt_root, })); - jobs.push(Box::new(ConfigureDisplayManagerJob { + jobs.push(Box::new(ConfigureAutologinJob { mount: mt.clone(), display_manager: cfg.display_manager.clone(), autologin: cfg.autologin, diff --git a/src/jobs/netinstall.rs b/src/jobs/netinstall.rs new file mode 100644 index 0000000..7fbc122 --- /dev/null +++ b/src/jobs/netinstall.rs @@ -0,0 +1,39 @@ +use super::{run_chroot, Job, UiSender}; + +/// Ek paket gruplarını chroot içinde kurar. +pub struct InstallExtraPackagesJob { + pub mount: String, + pub package_groups: Vec, +} + +#[async_trait::async_trait] +impl Job for InstallExtraPackagesJob { + fn name(&self) -> &str { "job_netinstall" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + use crate::steps::netinstall::PACKAGE_GROUPS; + + let mut packages: Vec<&str> = Vec::new(); + for (key, _, pkgs) in PACKAGE_GROUPS { + if self.package_groups.contains(&key.to_string()) { + packages.extend_from_slice(pkgs); + } + } + + if packages.is_empty() { + ui.log("Ek paket seçilmedi, atlanıyor."); + return Ok(()); + } + + let pkg_list = packages.join(" "); + ui.log(format!("Ek paketler kuruluyor: {}", pkg_list)); + match run_chroot(&self.mount, &["pisi", "install", &pkg_list]).await { + Ok(_) => ui.log("✓ Ek paketler kuruldu"), + Err(e) => { + ui.log(format!("⚠ pisi install uyarısı: {}", e)); + ui.log("⚠ Bu hata kritik değilse kurulum devam edecek."); + } + } + Ok(()) + } +} diff --git a/src/jobs/network.rs b/src/jobs/network.rs new file mode 100644 index 0000000..ecc6514 --- /dev/null +++ b/src/jobs/network.rs @@ -0,0 +1,39 @@ +use super::{Job, UiSender}; + +/// /etc/hostname ve /etc/hosts dosyalarını yazar. +pub struct ConfigureHostnameJob { + pub mount: String, + pub hostname: String, +} + +#[async_trait::async_trait] +impl Job for ConfigureHostnameJob { + fn name(&self) -> &str { "job_hostname" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let etc_dir = format!("{}/etc", self.mount); + let _ = tokio::fs::create_dir_all(&etc_dir).await; + + // /etc/hostname + let hostname_path = format!("{}/etc/hostname", self.mount); + ui.log(format!("Yazılıyor: {}", hostname_path)); + tokio::fs::write(&hostname_path, format!("{}\n", self.hostname)) + .await + .map_err(|e| format!("/etc/hostname yazılamadı: {}", e))?; + + // /etc/hosts + let hosts_path = format!("{}/etc/hosts", self.mount); + let hosts_content = format!( + "127.0.0.1\tlocalhost\n\ + ::1\t\tlocalhost\n\ + 127.0.1.1\t{hostname}\n", + hostname = self.hostname + ); + ui.log(format!("Yazılıyor: {}", hosts_path)); + tokio::fs::write(&hosts_path, hosts_content) + .await + .map_err(|e| format!("/etc/hosts yazılamadı: {}", e))?; + + Ok(()) + } +} diff --git a/src/jobs/partition.rs b/src/jobs/partition.rs new file mode 100644 index 0000000..6be8884 --- /dev/null +++ b/src/jobs/partition.rs @@ -0,0 +1,846 @@ +use std::sync::atomic::Ordering; +use tokio::process::Command; + +use crate::installer::{CustomPartition, FsType, PartitionPlan, PartitionTableType}; +use super::{blkid_uuid, part_path, run_cmd, DEMO_MODE, Job, UiSender}; + +// ───────────────────────────────────────────── +// YARDIMCI: DISK / BÖLÜMLEME KOMUTLARI +// ───────────────────────────────────────────── + +/// `parted` komutlarını çalıştırmak için özel sarmalayıcı. +/// +/// `parted -s` canlı sistemde kullanımda olan bir disk üzerinde bölüm +/// tablosunu kernel'e bildiremeyince exit 1 döndürür; ancak değişiklikler +/// diske **yazılmıştır** — kernel güncellemesi `sync_partition_table` ile +/// yapılır. Bu fonksiyon yalnızca gerçekten kritik hataları (disk bulunamadı +/// vb.) yakalar; "kernel haberdar edilemedi" uyarısını yok sayar. +async fn run_parted(args: &[&str]) -> Result<(), String> { + if DEMO_MODE.load(Ordering::Relaxed) { + tokio::time::sleep(std::time::Duration::from_millis(500)).await; + return Ok(()); + } + + let output = Command::new("parted") + .args(args) + .output() + .await + .map_err(|e| format!("parted çalıştırılamadı: {}", e))?; + + if output.status.success() { + return Ok(()); + } + + // Parted, kernel güncelleyemediğinde exit 1 verir ama disk yazımı + // başarılıdır. Bu spesifik uyarıyı hata saymıyoruz. + let stderr = String::from_utf8_lossy(&output.stderr); + let stdout = String::from_utf8_lossy(&output.stdout); + let combined = format!("{}{}", stderr, stdout); + + let is_kernel_notify_warning = combined.contains("kernel değişiklikten haberdar edilemedi") + || combined.contains("kernel was not notified") + || combined.contains("unable to inform the kernel") + || combined.contains("still in use"); + + if is_kernel_notify_warning { + // Uyarıyı yok say; sync_partition_table kernel'i güncelleyecek + return Ok(()); + } + + // Gerçek bir hata + Err(combined.trim().to_string()) +} + +/// LUKS bölümünü güvenli şekilde formatlar. +/// +/// Şifre, `sh -c` + string interpolasyon yerine doğrudan `stdin` pipe'ı +/// üzerinden iletilir; böylece shell injection saldırıları önlenir. +async fn run_luks_format(device: &str, password: &str) -> Result<(), String> { + if DEMO_MODE.load(Ordering::Relaxed) { + tokio::time::sleep(std::time::Duration::from_millis(1000)).await; + return Ok(()); + } + + use tokio::io::AsyncWriteExt; + + let mut child = tokio::process::Command::new("cryptsetup") + .args([ + "luksFormat", "-q", "--type", "luks2", + "--key-file", "-", + device, + ]) + .stdin(std::process::Stdio::piped()) + .stdout(std::process::Stdio::null()) + .stderr(std::process::Stdio::piped()) + .spawn() + .map_err(|e| format!("cryptsetup luksFormat başlatılamadı: {}", e))?; + + if let Some(mut stdin) = child.stdin.take() { + stdin.write_all(password.as_bytes()).await + .map_err(|e| format!("cryptsetup stdin yazma hatası: {}", e))?; + } + + let output = child.wait_with_output().await + .map_err(|e| format!("cryptsetup bekleme hatası: {}", e))?; + + if output.status.success() { + Ok(()) + } else { + Err(String::from_utf8_lossy(&output.stderr).trim().to_string()) + } +} + +/// LUKS bölümünü güvenli şekilde açar (open). +/// +/// Şifre, shell interpolasyon yerine `stdin` pipe'ı üzerinden iletilir. +async fn run_luks_open(device: &str, name: &str, password: &str) -> Result<(), String> { + if DEMO_MODE.load(Ordering::Relaxed) { + tokio::time::sleep(std::time::Duration::from_millis(500)).await; + return Ok(()); + } + + use tokio::io::AsyncWriteExt; + + let mut child = tokio::process::Command::new("cryptsetup") + .args(["open", "--key-file", "-", device, name]) + .stdin(std::process::Stdio::piped()) + .stdout(std::process::Stdio::null()) + .stderr(std::process::Stdio::piped()) + .spawn() + .map_err(|e| format!("cryptsetup open başlatılamadı: {}", e))?; + + if let Some(mut stdin) = child.stdin.take() { + stdin.write_all(password.as_bytes()).await + .map_err(|e| format!("cryptsetup open stdin yazma hatası: {}", e))?; + } + + let output = child.wait_with_output().await + .map_err(|e| format!("cryptsetup open bekleme hatası: {}", e))?; + + if output.status.success() { + Ok(()) + } else { + Err(String::from_utf8_lossy(&output.stderr).trim().to_string()) + } +} + +/// Bölümlendirme öncesi diski hazırlar: +/// mevcut bağlamaları ve swap'ı ayırır, ardından kernel'e yeni +/// bölüm tablosunu duyurarak aygıt düğümlerinin hazır olmasını bekler. +async fn prepare_disk(disk: &str, ui: &UiSender) { + if DEMO_MODE.load(Ordering::Relaxed) { return; } + + // 1. Diskteki aktif swap'ları kapat + ui.log(format!("Swap ayrılıyor: {}…", disk)); + let lsblk = tokio::process::Command::new("lsblk") + .args(["-o", "NAME,TYPE", "-l", "--noheadings", disk]) + .output().await; + if let Ok(out) = lsblk { + let text = String::from_utf8_lossy(&out.stdout); + for line in text.lines() { + if line.contains("part") { + if let Some(name) = line.split_whitespace().next() { + let dev = format!("/dev/{}", name); + let _ = tokio::process::Command::new("swapoff") + .arg(&dev).status().await; + } + } + } + } + + // 2. Disk bölümlerini umount et (hata görmezden gelinir) + ui.log(format!("Bağlantılar ayrılıyor: {}…", disk)); + for n in 1..=32u32 { + let part = crate::installer::part_path(disk, n); + if !std::path::Path::new(&part).exists() { break; } + let _ = tokio::process::Command::new("umount") + .args(["-lf", &part]).status().await; + } + + // 3. İlk senkronizasyon + let _ = tokio::process::Command::new("partprobe") + .arg(disk).status().await; + let _ = tokio::process::Command::new("udevadm") + .args(["settle", "--timeout=10"]).status().await; +} + +/// Bölümlendirme sonrası kernel'e yeni tabloyu bildirir ve aygıt +/// düğümlerinin hazır olmasını bekler. `parted`'ın uyarı vermesi +/// normaldir; bu fonksiyon hata döndürmez. +async fn sync_partition_table(disk: &str) { + if DEMO_MODE.load(Ordering::Relaxed) { return; } + let _ = tokio::process::Command::new("partprobe") + .arg(disk).status().await; + let _ = tokio::process::Command::new("blockdev") + .args(["--rereadpt", disk]).status().await; + let _ = tokio::process::Command::new("udevadm") + .args(["settle", "--timeout=10"]).status().await; + tokio::time::sleep(std::time::Duration::from_secs(2)).await; +} + +// ───────────────────────────────────────────── +// PARTITION JOB (otomatik bölümleme) +// ───────────────────────────────────────────── + +/// `parted` ve `mkfs` araçlarını kullanarak diski otomatik bölümlendirir. +/// Plan, PartitionStep'te hesaplanmış ve GlobalState'te saklanmıştır. +pub struct PartitionJob { + pub plan: PartitionPlan, +} + +#[async_trait::async_trait] +impl Job for PartitionJob { + fn name(&self) -> &str { "job_partition" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let disk = &self.plan.disk; + let is_gpt = self.plan.table_type == PartitionTableType::Gpt; + + // 0. Diski hazırla: bağlamaları ayır, kernel tablosunu temizle + prepare_disk(disk, ui).await; + + // 1. Bölüm tablosu oluştur + let table_label = if is_gpt { "gpt" } else { "msdos" }; + ui.log(format!("parted {} mktable {}", disk, table_label)); + run_parted(&["-s", disk, "mktable", table_label]).await?; + + let mut next_mb: u64 = 1; // İlk MB'ı boot kayıtları için bırak + + // 2. EFI bölümü (yalnızca GPT/UEFI) + if self.plan.efi_mb > 0 { + let end_mb = next_mb + self.plan.efi_mb; + ui.log(format!("EFI bölümü oluşturuluyor: {}–{} MB", next_mb, end_mb)); + run_parted(&[ + "-s", disk, "mkpart", "fat32", + &format!("{}MB", next_mb), &format!("{}MB", end_mb), + ]).await?; + run_parted(&["-s", disk, "set", "1", "esp", "on"]).await?; + next_mb = end_mb; + } + + // 3. Swap bölümü + let swap_end = next_mb + self.plan.swap_mb; + let swap_num: u32 = if self.plan.efi_mb > 0 { 2 } else { 1 }; + ui.log(format!("Swap bölümü oluşturuluyor: {}–{} MB", next_mb, swap_end)); + run_parted(&[ + "-s", disk, "mkpart", "linux-swap", + &format!("{}MB", next_mb), &format!("{}MB", swap_end), + ]).await?; + next_mb = swap_end; + + // 4. Kök bölümü (kalan alan) + let root_num: u32 = if self.plan.efi_mb > 0 { 3 } else { 2 }; + ui.log(format!("Kök bölümü oluşturuluyor: {}MB – disk sonu", next_mb)); + run_parted(&[ + "-s", disk, "mkpart", "ext4", + &format!("{}MB", next_mb), "100%", + ]).await?; + + // 4.5. Tüm mkpart bitti; kernel'e bildir ve aygıt düğümlerini bekle + sync_partition_table(disk).await; + + // 5. Biçimlendirme + let efi_part = part_path(disk, 1); + let swap_part = part_path(disk, swap_num); + let root_part = part_path(disk, root_num); + + if self.plan.efi_mb > 0 { + ui.log(format!("mkfs.fat -F32 {}", efi_part)); + run_cmd("mkfs.fat", &["-F32", &efi_part]).await?; + } + + ui.log(format!("mkswap {}", swap_part)); + run_cmd("mkswap", &[&swap_part]).await?; + + ui.log(format!("swapon {}", swap_part)); + run_cmd("swapon", &[&swap_part]).await?; + + // LUKS şifreleme (kök bölümü) + // Şifre, shell injection'ı önlemek için doğrudan stdin pipe üzerinden + // iletilir; `sh -c` + string interpolasyon kullanılmaz. + let root_device = if self.plan.encrypt_root && !self.plan.luks_password.is_empty() { + let luks_name = "cryptroot"; + ui.log(format!("cryptsetup luksFormat {}…", root_part)); + run_luks_format(&root_part, &self.plan.luks_password).await + .map_err(|e| format!("LUKS format hatası: {}", e))?; + + ui.log(format!("cryptsetup open {} {}…", root_part, luks_name)); + run_luks_open(&root_part, luks_name, &self.plan.luks_password).await + .map_err(|e| format!("LUKS open hatası: {}", e))?; + + format!("/dev/mapper/{}", luks_name) + } else { + root_part.clone() + }; + + ui.log(format!("mkfs.ext4 -F {}", root_device)); + run_cmd("mkfs.ext4", &["-F", &root_device]).await?; + + Ok(()) + } +} + +/// Bölüm yolunu bağla. +pub struct MountPartitionsJob { + pub plan: PartitionPlan, + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for MountPartitionsJob { + fn name(&self) -> &str { "job_mount" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let disk = &self.plan.disk; + let mount = &self.mount; + let root_num: u32 = if self.plan.efi_mb > 0 { 3 } else { 2 }; + let root_part = part_path(disk, root_num); + + let root_device = if self.plan.encrypt_root { + "/dev/mapper/cryptroot".to_string() + } else { + root_part.clone() + }; + + ui.log(format!("mount {} {}", root_device, mount)); + run_cmd("mount", &[&root_device, mount]).await?; + + if self.plan.efi_mb > 0 { + let efi_dir = format!("{}/boot/efi", mount); + ui.log(format!("mkdir -p {}", efi_dir)); + tokio::fs::create_dir_all(&efi_dir).await + .map_err(|e| format!("{} oluşturulamadı: {}", efi_dir, e))?; + let efi_part = part_path(disk, 1); + ui.log(format!("mount {} {}", efi_part, efi_dir)); + run_cmd("mount", &[&efi_part, &efi_dir]).await?; + } + + Ok(()) + } +} + +// ───────────────────────────────────────────── +// FSTAB JOB'LARI +// ───────────────────────────────────────────── + +/// blkid ile UUID okuyup fstab'ı doğrudan yazan job. +/// (async closure Rust'ta trait object olarak kullanılamaz; +/// bu nedenle ayrı bir Job struct'ı gerekli.) +pub struct FstabFromBlkidJob { + pub plan: PartitionPlan, + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for FstabFromBlkidJob { + fn name(&self) -> &str { "job_fstab" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + ui.log("blkid ile UUID'ler okunuyor…"); + let (root_uuid, efi_uuid, swap_uuid) = read_partition_uuids(&self.plan).await?; + ui.log(format!("Kök UUID: {}", root_uuid)); + + let job = GenerateFstabJob { + mount: self.mount.clone(), + root_uuid, + efi_uuid, + swap_uuid, + encrypt_root: self.plan.encrypt_root, + }; + job.run(ui).await + } +} + +/// fstab'ı doğrudan dosyaya yazar (genfstab yerine; ISO ortamında daha güvenilir). +pub struct GenerateFstabJob { + pub mount: String, + pub root_uuid: String, // blkid ile alınır + pub efi_uuid: Option, + pub swap_uuid: String, + pub encrypt_root: bool, +} + +#[async_trait::async_trait] +impl Job for GenerateFstabJob { + fn name(&self) -> &str { "job_fstab" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let etc_dir = format!("{}/etc", self.mount); + let _ = tokio::fs::create_dir_all(&etc_dir).await; + + let fstab_path = format!("{}/etc/fstab", self.mount); + ui.log(format!("Yazılıyor: {}", fstab_path)); + + let mut fstab = String::from( + "# /etc/fstab — Yali tarafından otomatik oluşturuldu\n\ + # \n\n" + ); + + // Kök bölümü + if self.encrypt_root { + fstab.push_str( + "/dev/mapper/cryptroot / ext4 defaults,noatime 0 1\n" + ); + } else { + fstab.push_str(&format!( + "UUID={} / ext4 defaults,noatime 0 1\n", + self.root_uuid + )); + } + + // EFI bölümü + if let Some(ref efi) = self.efi_uuid { + fstab.push_str(&format!( + "UUID={} /boot/efi vfat umask=0077 0 2\n", + efi + )); + } + + // Swap + fstab.push_str(&format!( + "UUID={} none swap sw 0 0\n", + self.swap_uuid + )); + + tokio::fs::write(&fstab_path, fstab) + .await + .map_err(|e| format!("fstab yazılamadı: {}", e))?; + + // crypttab (LUKS için) + if self.encrypt_root { + let crypttab_path = format!("{}/etc/crypttab", self.mount); + let crypttab = format!( + "cryptroot UUID={} none luks\n", + self.root_uuid + ); + ui.log(format!("Yazılıyor: {}", crypttab_path)); + tokio::fs::write(&crypttab_path, crypttab) + .await + .map_err(|e| format!("crypttab yazılamadı: {}", e))?; + } + + Ok(()) + } +} + +/// Disk bölümlerinin UUID'lerini `blkid` ile okur. +async fn read_partition_uuids( + plan: &PartitionPlan, +) -> Result<(String, Option, String), String> { + let (root_num, swap_num): (u32, u32) = if plan.efi_mb > 0 { (3, 2) } else { (2, 1) }; + + let root_part = part_path(&plan.disk, root_num); + let swap_part = part_path(&plan.disk, swap_num); + + // Şifreli kök: blkid'den LUKS UUID'sini al (crypttab için) + let root_uuid = blkid_uuid(&root_part).await?; + let swap_uuid = blkid_uuid(&swap_part).await?; + let efi_uuid = if plan.efi_mb > 0 { + Some(blkid_uuid(&part_path(&plan.disk, 1)).await?) + } else { + None + }; + + Ok((root_uuid, efi_uuid, swap_uuid)) +} + +// ───────────────────────────────────────────── +// MANUEL BÖLÜMLEME İÇİN DESTEKLEYİCİ JOB'LAR +// ───────────────────────────────────────────── + +/// Manuel bölümleme ayarlarını disk üzerinde uygulayan ve biçimlendiren Job. +pub struct CustomPartitionJob { + pub disk: String, + pub custom_partitions: Vec, +} + +#[async_trait::async_trait] +impl Job for CustomPartitionJob { + fn name(&self) -> &str { "job_custom_partition" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let is_uefi = std::path::Path::new("/sys/firmware/efi").exists(); + + // 0. Diski hazırla: bağlamaları ayır, kernel tablosunu temizle + prepare_disk(&self.disk, ui).await; + + let is_gpt = is_uefi; // Genellikle UEFI ise GPT kullanılır + // MBR'de "primary" zorunludur, GPT'de ise bu alan isim (label) alanıdır. + let part_type_or_name = if is_gpt { "" } else { "primary" }; + + // 1. Bölüm tablosu oluştur + let table_label = if is_uefi { "gpt" } else { "msdos" }; + ui.log(format!("parted {} mktable {}", self.disk, table_label)); + run_parted(&["-s", &self.disk, "mktable", table_label]).await?; + + let mut next_mb: u64 = 1; // İlk MB boot sektörü + + // 2. Bölümleri parted ile oluştur + for (i, part) in self.custom_partitions.iter().enumerate() { + let part_num = (i + 1) as u32; + let end_str = if part.size_mb == 0 { + "100%".to_string() + } else { + format!("{}MB", next_mb + part.size_mb) + }; + let start_str = format!("{}MB", next_mb); + + let fs_label = match part.fstype { + FsType::Fat32 => "fat32", + FsType::Swap => "linux-swap", + FsType::Ext4 => "ext4", + FsType::Ext3 => "ext3", + FsType::Btrfs => "btrfs", + FsType::Xfs => "xfs", + FsType::Ntfs => "ntfs", + // LVM PV için parted "ext4" ile işaretle, pvcreate sonra + FsType::Lvm => "ext4", + // LVM LV doğrudan parted ile oluşturulmaz + FsType::LvmLv => continue, + }; + + ui.log(format!( + "Bölüm {} oluşturuluyor: {} - {} ({})", + part_num, start_str, end_str, fs_label + )); + run_parted(&[ + "-s", &self.disk, "mkpart", part_type_or_name, fs_label, + &start_str, &end_str + ]).await?; + + if part.mountpoint == "/boot/efi" || part.fstype == FsType::Fat32 { + run_parted(&["-s", &self.disk, "set", &part_num.to_string(), "esp", "on"]).await?; + } + + if part.size_mb > 0 { + next_mb += part.size_mb; + } + } + + // 2.5. Tüm mkpart bitti; kernel'e bildir ve aygıt düğümlerini bekle + sync_partition_table(&self.disk).await; + + // 3. Biçimlendir (LUKS ile şifreleme desteklenir) + for part in &self.custom_partitions { + let path = &part.device; + + // LUKS şifreleme (kök veya isteğe bağlı bölümler) + // Şifre, shell injection'ı önlemek için doğrudan stdin pipe üzerinden + // iletilir; `sh -c` + string interpolasyon kullanılmaz. + let fs_device = if part.encrypt && !part.luks_password.is_empty() { + let luks_name = if part.luks_name.is_empty() { + format!("crypt_{}", part.mountpoint.replace("/", "_")) + } else { + part.luks_name.clone() + }; + let luks_name = luks_name.trim_start_matches('_').to_string(); + + ui.log(format!("cryptsetup luksFormat {}…", path)); + run_luks_format(path, &part.luks_password).await + .map_err(|e| format!("LUKS format hatası ({}): {}", path, e))?; + + ui.log(format!("cryptsetup open {} {}…", path, luks_name)); + run_luks_open(path, &luks_name, &part.luks_password).await + .map_err(|e| format!("LUKS open hatası ({}): {}", path, e))?; + + format!("/dev/mapper/{}", luks_name) + } else { + path.clone() + }; + + if part.skip_format { + ui.log(format!("⏭️ {} korunuyor (biçimlendirme atlandı)", fs_device)); + continue; + } + + match part.fstype { + FsType::Fat32 => { + ui.log(format!("mkfs.fat -F32 {}", fs_device)); + run_cmd("mkfs.fat", &["-F32", &fs_device]).await?; + } + FsType::Swap => { + ui.log(format!("mkswap {}", path)); + run_cmd("mkswap", &[path]).await?; + ui.log(format!("swapon {}", path)); + run_cmd("swapon", &[path]).await?; + } + FsType::Ext4 => { + ui.log(format!("mkfs.ext4 -F {}", fs_device)); + run_cmd("mkfs.ext4", &["-F", &fs_device]).await?; + } + FsType::Ext3 => { + ui.log(format!("mkfs.ext3 -F {}", fs_device)); + run_cmd("mkfs.ext3", &["-F", &fs_device]).await?; + } + FsType::Btrfs => { + ui.log(format!("mkfs.btrfs -f {}", fs_device)); + run_cmd("mkfs.btrfs", &["-f", &fs_device]).await?; + } + FsType::Xfs => { + ui.log(format!("mkfs.xfs -f {}", fs_device)); + run_cmd("mkfs.xfs", &["-f", &fs_device]).await?; + } + FsType::Ntfs => { + ui.log(format!("mkfs.ntfs -f {}", fs_device)); + run_cmd("mkfs.ntfs", &["-f", &fs_device]).await?; + } + FsType::Lvm => { + ui.log(format!("pvcreate {}", path)); + run_cmd("pvcreate", &[path]).await?; + } + // LV ayrı bir job'da oluşturulur + FsType::LvmLv => {} + } + } + + Ok(()) + } +} + +/// LVM Volume Group ve Logical Volume'leri oluşturur. +pub struct SetupLvmJob { + pub volume_groups: Vec, + pub logical_volumes: Vec, +} + +#[async_trait::async_trait] +impl Job for SetupLvmJob { + fn name(&self) -> &str { "job_setup_lvm" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + for vg in &self.volume_groups { + let pv_str = vg.pv_devices.join(" "); + ui.log(format!("vgcreate {} {}", vg.name, pv_str)); + run_cmd("vgcreate", &[&vg.name, &pv_str]).await?; + } + + for lv in &self.logical_volumes { + let size_str = if lv.size_mb == 0 { + "100%FREE".to_string() + } else { + format!("{}M", lv.size_mb) + }; + let lv_path = format!("/dev/{}/{}", lv.vg_name, lv.name); + ui.log(format!("lvcreate -L {} -n {} {}", size_str, lv.name, lv.vg_name)); + run_cmd("lvcreate", &["-L", &size_str, "-n", &lv.name, &lv.vg_name]).await?; + + let fs_cmd = match lv.fstype { + crate::installer::FsType::Ext4 => "mkfs.ext4", + crate::installer::FsType::Ext3 => "mkfs.ext3", + crate::installer::FsType::Btrfs => "mkfs.btrfs", + crate::installer::FsType::Xfs => "mkfs.xfs", + _ => continue, + }; + ui.log(format!("{} {}", fs_cmd, lv_path)); + run_cmd(fs_cmd, &[&lv_path]).await?; + } + Ok(()) + } +} + +/// Manuel bölümleri ve mantıksal hacimleri kök dizinden başlayarak hiyerarşik olarak hedef yola bağlayan Job. +pub struct MountCustomPartitionsJob { + pub custom_partitions: Vec, + pub logical_volumes: Vec, + pub mount: String, +} + +impl MountCustomPartitionsJob { + /// Şifreli bölümler için mapper yolunu döndürür. + fn device_path(&self, part: &CustomPartition) -> String { + if part.encrypt { + let luks_name = if part.luks_name.is_empty() { + format!("crypt_{}", part.mountpoint.replace("/", "_").trim_start_matches('_')) + } else { + part.luks_name.clone() + }; + format!("/dev/mapper/{}", luks_name) + } else { + part.device.clone() + } + } +} + +#[async_trait::async_trait] +impl Job for MountCustomPartitionsJob { + fn name(&self) -> &str { "job_mount_custom" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // 1. Kök (/) bölümünü (fiziksel partition veya LVM LV) bul ve bağla + let root_device = if let Some(root_part) = self.custom_partitions.iter().find(|p| p.mountpoint == "/") { + self.device_path(root_part) + } else if let Some(root_lv) = self.logical_volumes.iter().find(|lv| lv.mountpoint == "/") { + format!("/dev/{}/{}", root_lv.vg_name, root_lv.name) + } else { + return Err("Kök (/) bölümü manuel listede veya mantıksal bölümlerde bulunamadı.".to_string()); + }; + + ui.log(format!("Kök dizin bağlanıyor: {} ➔ {}", root_device, self.mount)); + run_cmd("mount", &[&root_device, &self.mount]).await?; + + // 2. Diğer bölümleri ve mantıksal hacimleri topla, sırala ve bağla (derinliğe göre artan sırada) + struct MountItem { + device: String, + mountpoint: String, + } + + let mut mount_items = Vec::new(); + + for part in &self.custom_partitions { + if part.mountpoint != "/" && part.fstype != FsType::Swap && !part.mountpoint.is_empty() { + mount_items.push(MountItem { + device: self.device_path(part), + mountpoint: part.mountpoint.clone(), + }); + } + } + + for lv in &self.logical_volumes { + if lv.mountpoint != "/" && lv.fstype != FsType::Swap && !lv.mountpoint.is_empty() { + mount_items.push(MountItem { + device: format!("/dev/{}/{}", lv.vg_name, lv.name), + mountpoint: lv.mountpoint.clone(), + }); + } + } + + mount_items.sort_by_key(|item| item.mountpoint.len()); + + for item in mount_items { + let target_path = format!("{}{}", self.mount, item.mountpoint); + ui.log(format!("Bağlama noktası dizini oluşturuluyor: {}", target_path)); + tokio::fs::create_dir_all(&target_path).await + .map_err(|e| format!("{} oluşturulamadı: {}", target_path, e))?; + ui.log(format!("Bağlanıyor: {} ➔ {}", item.device, target_path)); + run_cmd("mount", &[&item.device, &target_path]).await?; + } + + Ok(()) + } +} + +/// Manuel bölümleme planına göre fstab dosyası üreten Job. +pub struct FstabFromCustomPartitionsJob { + pub custom_partitions: Vec, + pub logical_volumes: Vec, + pub mount: String, +} + +#[async_trait::async_trait] +impl Job for FstabFromCustomPartitionsJob { + fn name(&self) -> &str { "job_fstab" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + let etc_dir = format!("{}/etc", self.mount); + let _ = tokio::fs::create_dir_all(&etc_dir).await; + + let fstab_path = format!("{}/etc/fstab", self.mount); + ui.log(format!("Yazılıyor: {}", fstab_path)); + + let mut fstab = String::from( + "# /etc/fstab — Yali tarafından otomatik (manuel mod) oluşturuldu\n\ + # \n\n" + ); + + let mut crypttab = String::from( + "# /etc/crypttab — Yali tarafından otomatik oluşturuldu\n" + ); + + for part in &self.custom_partitions { + if part.mountpoint.is_empty() { continue; } + + let is_encrypted = part.encrypt && !part.luks_password.is_empty(); + + let device_field = if is_encrypted { + let luks_uuid = blkid_uuid(&part.device).await?; + let luks_name = if part.luks_name.is_empty() { + format!("crypt_{}", part.mountpoint.replace("/", "_").trim_start_matches('_')) + } else { + part.luks_name.clone() + }; + crypttab.push_str(&format!( + "{} UUID={} none luks\n", + luks_name, luks_uuid + )); + format!("/dev/mapper/{:<30}", luks_name) + } else { + ui.log(format!("{} için UUID okunuyor…", part.device)); + let uuid = blkid_uuid(&part.device).await?; + format!("UUID={:<36}", uuid) + }; + + let (mp, options, dump, pass) = match part.fstype { + FsType::Swap => ("none", "sw", "0", "0"), + FsType::Fat32 => ("/boot/efi", "umask=0077", "0", "2"), + FsType::Ext4 | FsType::Ext3 if part.mountpoint == "/" => ("/", "defaults,noatime", "0", "1"), + _ => { + let pass_val = if part.mountpoint == "/" { "1" } else { "2" }; + (part.mountpoint.as_str(), "defaults,noatime", "0", pass_val) + } + }; + + let fs_name = match part.fstype { + FsType::Ext4 => "ext4", + FsType::Ext3 => "ext3", + FsType::Btrfs => "btrfs", + FsType::Xfs => "xfs", + FsType::Fat32 => "vfat", + FsType::Ntfs => "ntfs-3g", + FsType::Swap => "swap", + FsType::Lvm | FsType::LvmLv => "ext4", + }; + + fstab.push_str(&format!( + "{} {:<12} {:<6} {:<18} {} {}\n", + device_field, mp, fs_name, options, dump, pass + )); + } + + // LVM mantıksal bölümlerini fstab'a ekle + for lv in &self.logical_volumes { + if lv.mountpoint.is_empty() { continue; } + + let device_field = format!("/dev/{}/{}", lv.vg_name, lv.name); + + let (mp, options, dump, pass) = match lv.fstype { + FsType::Swap => ("none", "sw", "0", "0"), + FsType::Fat32 => ("/boot/efi", "umask=0077", "0", "2"), + FsType::Ext4 | FsType::Ext3 if lv.mountpoint == "/" => ("/", "defaults,noatime", "0", "1"), + _ => { + let pass_val = if lv.mountpoint == "/" { "1" } else { "2" }; + (lv.mountpoint.as_str(), "defaults,noatime", "0", pass_val) + } + }; + + let fs_name = match lv.fstype { + FsType::Ext4 => "ext4", + FsType::Ext3 => "ext3", + FsType::Btrfs => "btrfs", + FsType::Xfs => "xfs", + FsType::Fat32 => "vfat", + FsType::Ntfs => "ntfs-3g", + FsType::Swap => "swap", + _ => "ext4", + }; + + fstab.push_str(&format!( + "{:<42} {:<12} {:<6} {:<18} {} {}\n", + device_field, mp, fs_name, options, dump, pass + )); + } + + tokio::fs::write(&fstab_path, fstab) + .await + .map_err(|e| format!("fstab yazılamadı: {}", e))?; + + // crypttab (sadece şifreli bölümler için) + let crypttab_device_count = crypttab.lines().count().saturating_sub(1); // header satırını sayma + if crypttab_device_count > 0 { + let crypttab_path = format!("{}/etc/crypttab", self.mount); + ui.log(format!("Yazılıyor: {}", crypttab_path)); + let _ = tokio::fs::write(&crypttab_path, crypttab).await; + } + + Ok(()) + } +} diff --git a/src/jobs/users.rs b/src/jobs/users.rs new file mode 100644 index 0000000..7eb417d --- /dev/null +++ b/src/jobs/users.rs @@ -0,0 +1,134 @@ +use super::{run_chroot, run_cmd, Job, UiSender}; + +/// Kullanıcı hesabı oluşturur ve şifresini ayarlar. +pub struct CreateUserJob { + pub mount: String, + pub username: String, + pub password: String, + pub root_password: String, +} + +#[async_trait::async_trait] +impl Job for CreateUserJob { + fn name(&self) -> &str { "job_user" } + + async fn run(&self, ui: &UiSender) -> Result<(), String> { + // wheel grubunun varlığını garantile (PisiLinux'ta olmayabilir) + let group_file = format!("{}/etc/group", self.mount); + let group_content = tokio::fs::read_to_string(&group_file) + .await.unwrap_or_default(); + if !group_content.lines().any(|l| l.starts_with("wheel:")) { + ui.log("wheel grubu oluşturuluyor…"); + run_chroot(&self.mount, &["groupadd", "-r", "wheel"]).await + .unwrap_or_default(); // hata olsa bile devam et + } + + // useradd: kullanıcıyı temel gruplarla oluştur + // PisiLinux'ta "storage" grubu yoksa useradd hata verir; -M flag ile grub yoksa atla + // Güvenli yöntem: önce her grubu tek tek ekle + let groups = ["wheel", "users", "pnp", "disk", "audio", "video", "power", "dialout", "lp", "lpadmin", "cdrom", "floppy"]; + for grp in &groups { + if group_content.lines().any(|l| l.starts_with(&format!("{}:", grp))) { + // grup zaten var + } else { + // grup yoksa oluşturma (hata görmezden gel) + let _ = run_chroot(&self.mount, &["groupadd", grp]).await; + } + } + + // Kullanıcıyı oluştur + let groups_str = groups.join(","); + ui.log(format!("useradd -m -G {} -s /bin/bash {}", groups_str, self.username)); + run_chroot(&self.mount, &[ + "useradd", + "-m", + "-G", &groups_str, + "-s", "/bin/bash", + &self.username, + ]).await?; + + // // chpasswd ile şifre ayarla (stdin üzerinden güvenli) + // ui.log(format!("Şifre ayarlanıyor: {}", self.username)); + // let chpasswd_input = format!("{}:{}", self.username, self.password); + // set_password_via_chpasswd(&self.mount, &chpasswd_input).await?; + + // // Root şifresi: belirlenmişse ayarla, yoksa kilitle + // if self.root_password.is_empty() { + // ui.log("Root hesabı kilitleniyor…"); + // run_chroot(&self.mount, &["passwd", "-l", "root"]).await?; + // } else { + // ui.log("Root şifresi ayarlanıyor…"); + // let root_input = format!("root:{}", self.root_password); + // set_password_via_chpasswd(&self.mount, &root_input).await?; + // } + + // 2. chpasswd ile şifre ayarla (YENİ BASİTLEŞTİRİLMİŞ VE KESİN YÖNTEM) + ui.log(format!("Şifre ayarlanıyor: {}", self.username)); + // sh -c kullanarak echo ile chpasswd'e şifreyi güvenli bir şekilde üflüyoruz + let user_cmd = format!("echo '{}:{}' | chpasswd -c SHA512", self.username, self.password); + run_chroot(&self.mount, &["sh", "-c", &user_cmd]).await?; + + // 3. Root şifresi: belirlenmişse ayarla, yoksa kilitle + if self.root_password.is_empty() { + ui.log("Root hesabı kilitleniyor…"); + run_chroot(&self.mount, &["passwd", "-l", "root"]).await?; + } else { + ui.log("Root şifresi ayarlanıyor…"); + let root_cmd = format!("echo 'root:{}' | chpasswd -c SHA512", self.root_password); + run_chroot(&self.mount, &["sh", "-c", &root_cmd]).await?; +} + + + // sudoers: wheel grubu sudo yetkisi alsın + let sudoers_dir = format!("{}/etc/sudoers.d", self.mount); + tokio::fs::create_dir_all(&sudoers_dir).await + .map_err(|e| format!("{} oluşturulamadı: {}", sudoers_dir, e))?; + let sudoers_path = format!("{}/wheel", sudoers_dir); + ui.log(format!("Yazılıyor: {}", sudoers_path)); + tokio::fs::write(&sudoers_path, "%wheel ALL=(ALL:ALL) ALL\n") + .await + .map_err(|e| format!("sudoers yazılamadı: {}", e))?; + + // Dosya izinleri: sudoers 440 olmalı + run_cmd("chmod", &["440", &sudoers_path]).await?; + + Ok(()) + } +} + +// /// `chpasswd` komutuna stdin üzerinden kullanıcı:şifre gönderir. +// async fn set_password_via_chpasswd(mount: &str, input: &str) -> Result<(), String> { +// if DEMO_MODE.load(std::sync::atomic::Ordering::Relaxed) { +// tokio::time::sleep(std::time::Duration::from_millis(2500)).await; +// return Ok(()); +// } + +// use tokio::io::AsyncWriteExt; +// use tokio::process::Command; + +// let mut child = Command::new("chroot") +// .args([mount, "chpasswd"]) +// .stdin(std::process::Stdio::piped()) +// .stdout(std::process::Stdio::null()) +// .stderr(std::process::Stdio::piped()) +// .spawn() +// .map_err(|e| format!("chpasswd başlatılamadı: {}", e))?; + +// if let Some(mut stdin) = child.stdin.take() { +// let mut data = input.as_bytes().to_vec(); +// if !data.ends_with(b"\n") { +// data.push(b'\n'); +// } +// stdin.write_all(&data).await +// .map_err(|e| format!("chpasswd stdin yazma hatası: {}", e))?; +// } + +// let output = child.wait_with_output().await +// .map_err(|e| format!("chpasswd bekleme hatası: {}", e))?; + +// if output.status.success() { +// Ok(()) +// } else { +// Err(String::from_utf8_lossy(&output.stderr).trim().to_string()) +// } +// } diff --git a/src/main.rs b/src/main.rs index 1f2333d..3a3b25c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,11 +34,24 @@ fn main() -> eframe::Result<()> { /// Grafik arayüzü başlatır (normal mod). fn run_gui(demo_mode: bool) -> eframe::Result<()> { + let icon_data = { + let img = image::load_from_memory(include_bytes!("../assets/icons/YALI_icon_DARK.png")) + .expect("YALI_icon_DARK.png yüklenemedi") + .into_rgba8(); + let (w, h) = img.dimensions(); + egui::IconData { + width: w, + height: h, + rgba: img.into_raw(), + } + }; + let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() .with_inner_size([1200.0, 900.0]) .with_min_inner_size([1080.0, 720.0]) - .with_title(t!("installer")), + .with_title(t!("installer")) + .with_icon(icon_data), ..Default::default() }; @@ -134,6 +147,7 @@ fn run_auto_install(path: &str, demo_mode: bool) -> eframe::Result<()> { let cli_ctx = eframe::egui::Context::default(); let ui_sender = UiSender::new(tx, cli_ctx); + let language_c = if locale.starts_with("tr") { "tr".to_string() } else { "en".to_string() }; let plan_c = plan.clone(); let locale_c = locale.clone(); let timezone_c = timezone.clone(); @@ -152,6 +166,7 @@ fn run_auto_install(path: &str, demo_mode: bool) -> eframe::Result<()> { jobs::JobQueueConfig { mount: mount_c, source: source_c, + language: language_c, locale: locale_c, timezone: timezone_c, username: username_c, @@ -192,6 +207,7 @@ fn run_auto_install(path: &str, demo_mode: bool) -> eframe::Result<()> { print!("\r {}: [{:50}] {:.0}% ", t!("progress"), "=".repeat((p * 50.0) as usize), p * 100.0); let _ = std::io::Write::flush(&mut std::io::stdout()); } + Ok(InstallMessage::CopyStarted) | Ok(InstallMessage::CopyFinished) => {} Ok(InstallMessage::CurrentFile(f)) => { print!("\r {}: {} ", t!("install_current_file"), f); let _ = std::io::Write::flush(&mut std::io::stdout()); @@ -270,11 +286,6 @@ impl Default for YaliApp { app.state.branding_yali_light = branding.yali_logo_uri(); app.state.branding_pisi_dark = branding.pisi_logo_dark_uri(); app.state.branding_pisi_light = branding.pisi_logo_light_uri(); - app.state.branding_icons = branding.slides.icons - .iter() - .map(|(k, v)| (k.clone(), branding::path_to_file_uri(v))) - .collect(); - app.state.branding_slides = branding.slides.items.clone(); app.steps[0].on_enter(&mut app.state); app.last_step = 0; @@ -295,11 +306,6 @@ impl eframe::App for YaliApp { self.state.branding_yali_light = branding.yali_logo_uri(); self.state.branding_pisi_dark = branding.pisi_logo_dark_uri(); self.state.branding_pisi_light = branding.pisi_logo_light_uri(); - self.state.branding_icons = branding.slides.icons - .iter() - .map(|(k, v)| (k.clone(), branding::path_to_file_uri(v))) - .collect(); - self.state.branding_slides = branding.slides.items.clone(); // Pencere başlığını dinamik olarak güncelle ctx.send_viewport_cmd(egui::ViewportCommand::Title(self.branding.general.title.clone())); @@ -316,10 +322,6 @@ impl eframe::App for YaliApp { egui::ScrollArea::vertical().show(ui, |ui| { rescue.show(ui, &mut self.state); }); - ui.add_space(12.0); - if ui.button(t!("rescue_return")).clicked() { - self.state.rescue_mode = false; - } }); } return; diff --git a/src/steps/execution.rs b/src/steps/execution.rs index 0308ea0..d7031d2 100644 --- a/src/steps/execution.rs +++ b/src/steps/execution.rs @@ -22,6 +22,8 @@ pub struct ExecutionStep { finished: bool, error_screen: Option, slideshow: Option, + /// rsync kopyalama fazı aktifken tek ilerleme çubuğu gösterilir. + copy_active: bool, } impl InstallerStep for ExecutionStep { @@ -37,10 +39,14 @@ impl InstallerStep for ExecutionStep { let desktop = std::env::var("XDG_CURRENT_DESKTOP") .unwrap_or_else(|_| "default".to_string()) .to_lowercase(); - self.slideshow = Some(Slideshow::new(&desktop, state.branding_icons.clone(), state.branding_slides.clone())); + let cwd = std::env::current_dir().map(|d| d.display().to_string()).unwrap_or_default(); + let ss = Slideshow::new(&desktop, &state.language); + state.install_log.push(format!("Slideshow: cwd={}, lang={}, desktop={}, slayt={}", cwd, state.language, desktop, ss.slide_count())); + self.slideshow = Some(ss); state.install_progress = 0.0; state.install_sub_progress = 0.0; + self.copy_active = false; state.install_log.clear(); state.install_current_file = None; state.install_log.push(t!("install_starting").to_string()); @@ -99,6 +105,7 @@ impl InstallerStep for ExecutionStep { jobs::JobQueueConfig { mount: "/mnt".to_string(), source: src, + language, locale, timezone, username, @@ -139,6 +146,7 @@ impl InstallerStep for ExecutionStep { jobs::JobQueueConfig { mount: "/mnt".to_string(), source: src, + language, locale, timezone, username, @@ -186,6 +194,12 @@ impl InstallerStep for ExecutionStep { Ok(InstallMessage::SubProgress(p)) => { state.install_sub_progress = p; } + Ok(InstallMessage::CopyStarted) => { + self.copy_active = true; + } + Ok(InstallMessage::CopyFinished) => { + self.copy_active = false; + } Ok(InstallMessage::CurrentFile(f)) => { state.install_current_file = Some(f); } @@ -266,10 +280,13 @@ impl InstallerStep for ExecutionStep { ui.vertical(|ui| { ui.add_space(8.0); - // İlerleme çubuğu + // İlerleme çubuğu — yalnızca rsync kopyalama fazında + // tek bar gösterilir (eski YALI düzeni). Diğer adımlar + // (fstab, GRUB, temizlik vb.) metin + spinner olarak + // görünür. let running = !self.finished && self.error_screen.is_none() - && state.install_progress > 0.0; + && (self.copy_active || state.install_progress > 0.0); egui::Frame::none() .fill(theme::c_bg_widget()) @@ -286,45 +303,35 @@ impl InstallerStep for ExecutionStep { .color(theme::c_text_dim()), ); - let pct = format!("{:.0}%", state.install_progress * 100.0); - let bar = ui.add( - egui::ProgressBar::new(state.install_progress) - .animate(running) - .desired_height(20.0), - ); - ui.painter().text( - bar.rect.center(), - egui::Align2::CENTER_CENTER, - pct, - egui::FontId::proportional(14.0), - theme::c_text(), - ); - - if state.install_sub_progress > 0.0 { - let sub_pct = format!("{:.0}%", state.install_sub_progress * 100.0); - ui.add_space(4.0); - let sub_bar = ui.add( + if self.copy_active { + let pct = format!("{:.0}%", state.install_sub_progress * 100.0); + let bar = ui.add( egui::ProgressBar::new(state.install_sub_progress) .animate(running) - .desired_height(20.0) - .fill(theme::c_accent_dim()), + .desired_height(20.0), ); ui.painter().text( - sub_bar.rect.center(), + bar.rect.center(), egui::Align2::CENTER_CENTER, - sub_pct, - egui::FontId::proportional(12.0), + pct, + egui::FontId::proportional(14.0), theme::c_text(), ); - } - if let Some(ref current_file) = state.install_current_file { + if let Some(ref current_file) = state.install_current_file { + ui.add_space(4.0); + ui.label( + egui::RichText::new(format!("{}: {}", t!("install_current_file"), current_file)) + .size(12.0) + .color(theme::c_text_dim()), + ); + } + } else if running { ui.add_space(4.0); - ui.label( - egui::RichText::new(format!("{}: {}", t!("install_current_file"), current_file)) - .size(12.0) - .color(theme::c_text_dim()), - ); + ui.horizontal(|ui| { + ui.spinner(); + ui.colored_label(theme::c_text_dim(), t!("install_in_progress")); + }); } }); diff --git a/src/steps/finish.rs b/src/steps/finish.rs index f1b76cc..93eb771 100644 --- a/src/steps/finish.rs +++ b/src/steps/finish.rs @@ -13,7 +13,7 @@ impl InstallerStep for FinishStep { ui.vertical_centered(|ui| { // Büyük onay simgesi ui.label( - egui::RichText::new("✔") + egui::RichText::new("\u{EB7B}") .size(72.0) .color(theme::c_success()), ); @@ -37,9 +37,10 @@ impl InstallerStep for FinishStep { // Yeniden Başlat — ana eylem butonu if theme::primary_button(ui, &t!("finish_restart")).clicked() { let _ = std::process::Command::new("sync").status(); - let _ = std::process::Command::new("reboot") - .arg("-f") - .spawn(); + // Temiz kapanma: init (sysvinit) dosya sistemlerini unmount eder. + // `-f` kullanılmaz — zorla reboot FAT backup boot sektörünü + // güncellemeden sistemi kesip fsck.fat hatası bırakıyordu. + let _ = std::process::Command::new("reboot").spawn(); ui.ctx().send_viewport_cmd(egui::ViewportCommand::Close); } diff --git a/src/steps/location.rs b/src/steps/location.rs index 081d993..42737e1 100644 --- a/src/steps/location.rs +++ b/src/steps/location.rs @@ -183,6 +183,38 @@ impl InstallerStep for LocationStep { ); ui.add_space(8.0); + // Seçilen zamana göre tarih ve saat gösterimi + ui.horizontal(|ui| { + ui.label(egui::RichText::new(t!("datetime_current")).strong().color(theme::c_text())); + ui.add_space(8.0); + + if state.use_ntp { + // NTP modunda seçilen zaman dilimine göre zamanı göster + let now = chrono::Utc::now(); + let formatted = if let Ok(tz) = state.timezone.parse::() { + let local_time = now.with_timezone(&tz); + local_time.format("%Y-%m-%d %H:%M:%S").to_string() + } else { + // Zaman dilimi parse edilemezse UTC göster + now.format("%Y-%m-%d %H:%M:%S UTC").to_string() + }; + ui.label(egui::RichText::new(formatted).color(theme::c_success())); + } else { + // Manuel modunda seçilen değerleri göster + let formatted = format!( + "{:04}-{:02}-{:02} {:02}:{:02}", + state.manual_year, + state.manual_month, + state.manual_day, + state.manual_hour, + state.manual_minute + ); + ui.label(egui::RichText::new(formatted).color(theme::c_text())); + } + }); + + ui.add_space(12.0); + let (mut cur_region, mut cur_zone) = Self::split_tz(&state.timezone); if !self.regions.contains(&cur_region) { diff --git a/src/steps/network.rs b/src/steps/network.rs index 347ce82..8f63941 100644 --- a/src/steps/network.rs +++ b/src/steps/network.rs @@ -154,24 +154,25 @@ impl InstallerStep for NetworkStep { .show(ui, |ui| { for (i, net) in self.scan_results.clone().iter().enumerate() { ui.horizontal(|ui| { - let lock = if net.secured { "🔒" } else { "🌐" }; + let lock = if net.secured { "\u{EECE}" } else { "\u{EDCF}" }; let sig = net.signal.parse::().unwrap_or(0); - let bars = if sig > -50 { "▂▄▆█" } else if sig > -67 { "▂▄▆" } else if sig > -80 { "▂▄" } else { "▂" }; - let active = if net.active { " ✓" } else { "" }; + let bars = if sig > -50 { "\u{F133}" } else if sig > -67 { "\u{F12F}" } else if sig > -80 { "\u{F12B}" } else { "\u{F134}" }; + let active = if net.active { " \u{EB7B}" } else { "" }; ui.label(format!("{} {}{}", lock, net.ssid, active)); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { ui.label( egui::RichText::new(bars) - .size(10.0) + .size(16.0) .color(egui::Color32::from_rgb(120, 120, 140)), ); if net.secured && !net.active { ui.add(egui::TextEdit::singleline(&mut state.network_wifi_password) .password(!self.show_password.get(i).copied().unwrap_or(false)) .hint_text(t!("network_password_hint")) - .desired_width(120.0)); - if ui.small_button("👁").clicked() { + .desired_width(120.0) + .text_color(egui::Color32::from_rgb(120, 120, 140))); + if ui.add_sized([24.0, 24.0], egui::Button::new(egui::RichText::new("\u{ECB5}").size(14.0))).clicked() { if self.show_password.len() <= i { self.show_password.resize(i + 1, false); } diff --git a/src/steps/partition.rs b/src/steps/partition.rs index 45989c7..6e2dd43 100644 --- a/src/steps/partition.rs +++ b/src/steps/partition.rs @@ -74,6 +74,7 @@ fn read_existing_partitions(disk_path: &str) -> Vec, /// Genel hata mesajı error: Option, + /// Biçimlendirme atlansın mı? + add_skip_format: bool, /// Yeni VG adı (LVM) add_vg_name: String, @@ -273,6 +276,7 @@ pub struct PartitionStep { is_uefi: bool, manual: ManualState, show_luks_password: bool, + selected_disk_size_mb: Option, } impl Default for PartitionStep { @@ -282,6 +286,7 @@ impl Default for PartitionStep { is_uefi: std::path::Path::new("/sys/firmware/efi").exists(), manual: ManualState::default(), show_luks_password: false, + selected_disk_size_mb: None, } } } @@ -484,6 +489,7 @@ impl PartitionStep { if response.clicked() && !too_small { state.selected_disk = Some(disk.name.clone()); + self.selected_disk_size_mb = Some(disk.size_gb * 1024); state.partition_plan = make_plan(disk, self.is_uefi); } @@ -611,7 +617,7 @@ impl PartitionStep { } else { ui.add(egui::TextEdit::singleline(&mut plan.luks_password).password(true)); } - let eye = if self.show_luks_password { "🙈" } else { "👁" }; + let eye = if self.show_luks_password { "\u{ECB5}" } else { "\u{ECB7}" }; if ui.small_button(eye).clicked() { self.show_luks_password = !self.show_luks_password; } @@ -711,6 +717,7 @@ impl PartitionStep { if response.clicked() { state.selected_disk = Some(disk.name.clone()); + self.selected_disk_size_mb = Some(disk.size_gb * 1024); state.custom_partitions = read_existing_partitions(&disk.name); self.manual.error = None; } @@ -743,18 +750,19 @@ impl PartitionStep { let delete_idx: Option = None; - let col_widths = [0.28, 0.12, 0.18, 0.27, 0.15]; + let col_widths = [0.25, 0.12, 0.16, 0.24, 0.23]; let tam_genislik = ui.available_width(); let header_color = egui::Color32::from_rgb(33, 37, 41); let header_text = egui::Color32::WHITE; let _border_stroke = egui::Stroke::new(1.0_f32, crate::ui::theme::c_border()); // ── Başlık satırı ───────────────────────────────── - let headers: [String; 4] = [ + let headers: [String; 5] = [ t!("mp_device").to_string(), t!("mp_size").to_string(), t!("mp_fstype").to_string(), - t!("mp_mountpoint").to_string(), + t!("mp_mountpoint").to_string(), + t!("mp_format_status").to_string(), ]; ui.horizontal(|ui| { ui.set_height(30.0); @@ -820,7 +828,6 @@ impl PartitionStep { size_str.as_str(), fstype_label.as_str(), part.mountpoint.as_str(), - "", ]; let mut x = row_rect.left(); for (j, text) in cell_texts.iter().enumerate() { @@ -839,6 +846,28 @@ impl PartitionStep { x += cell_w; } + // Format sütunu: ikon karakteri (konumlandırılmış) + let icon_cell_w = tam_genislik * col_widths[4]; + let icon_rect = egui::Rect::from_min_size( + egui::pos2(x + (icon_cell_w - 20.0) / 2.0, row_rect.top() + (34.0 - 20.0) / 2.0), + egui::vec2(20.0, 20.0), + ); + if part.skip_format { + // lock ikonu + ui.put(icon_rect, egui::Label::new( + egui::RichText::new("\u{EECD}") + .color(egui::Color32::from_rgb(180, 60, 40)) + .size(18.0) + )); + } else { + // check ikonu + ui.put(icon_rect, egui::Label::new( + egui::RichText::new("\u{EB7B}") + .color(egui::Color32::from_rgb(255, 251, 0)) + .size(18.0) + )); + }; + if row_idx < state.custom_partitions.len() - 1 { ui.separator(); } @@ -893,12 +922,11 @@ impl PartitionStep { .and_then(|i| state.custom_partitions.get(i)); // Yeni Bölüm - if theme::primary_button(ui, &format!("➕ {}", t!("mp_new_partition"))).clicked() { + if theme::primary_button(ui, &format!("\u{EA13} {}", t!("mp_new_partition"))).clicked() { self.manual.adding = true; self.manual.editing = false; self.manual.edit_idx = None; let next_num = state.custom_partitions.len() + 1; - self.manual.add_size_str.clear(); self.manual.add_mountpoint.clear(); self.manual.add_encrypt = false; self.manual.add_luks_password.clear(); @@ -910,16 +938,25 @@ impl PartitionStep { 3 => "/".to_string(), _ => String::new(), }; + // Mountpoint'e göre otomatik boyut ata + self.manual.add_size_str = match self.manual.add_mountpoint.as_str() { + "/boot/efi" => "1024".to_string(), // 1GB + "swap" => "1024".to_string(), // Sabit 1GB + "/" => "remaining".to_string(), // Geri kalan alan + _ => String::new(), + }; self.manual.add_fstype = match self.manual.add_mountpoint.as_str() { "swap" => FS_OPTIONS.iter().position(|(_, t)| *t == FsType::Swap).unwrap_or(0), "/boot/efi" => FS_OPTIONS.iter().position(|(_, t)| *t == FsType::Fat32).unwrap_or(0), _ => 0, }; + // Yeni bölümler varsayılan olarak biçimlendirilir + self.manual.add_skip_format = false; } // Düzenle ui.add_enabled_ui(has_selection, |ui| { - if theme::secondary_button(ui, &format!("✏️ {}", t!("mp_edit_partition"))).clicked() { + if theme::secondary_button(ui, &format!("\u{EFE0} {}", t!("mp_edit_partition"))).clicked() { if let Some(part) = selected { self.manual.editing = true; self.manual.adding = false; @@ -935,13 +972,14 @@ impl PartitionStep { .unwrap_or(0); self.manual.add_encrypt = part.encrypt; self.manual.add_luks_password = part.luks_password.clone(); + self.manual.add_skip_format = part.skip_format; } } }); // Sil ui.add_enabled_ui(has_selection, |ui| { - if theme::danger_button(ui, &format!("🗑 {}", t!("mp_delete"))).clicked() { + if theme::danger_button(ui, &format!("\u{EC28} {}", t!("mp_delete"))).clicked() { self.manual.delete_idx = self.manual.selected_idx; } }); @@ -991,15 +1029,22 @@ impl PartitionStep { // ui.add(egui::TextEdit::singleline(&mut self.manual.add_size_str) // .desired_width(120.0) // .text_color(egui::Color32::from_rgb(230, 230, 230))); - let parsed: u64 = self.manual.add_size_str.trim().parse().unwrap_or(0); - if parsed > 0 { - let gb = parsed as f64 / 1024.0; - ui.label(format!("{} MB", format_number_thousands(parsed))); - ui.label(egui::RichText::new(format!("(≈ {:.1} GB)", gb)) - .color(crate::ui::theme::c_text_dim()) - .size(11.0)); + let size_str = self.manual.add_size_str.trim(); + if size_str == "remaining" { + ui.label(egui::RichText::new(t!("mp_size_remaining")) + .color(crate::ui::theme::c_success()) + .size(12.0)); } else { - ui.label("MB"); + let parsed: u64 = size_str.parse().unwrap_or(0); + if parsed > 0 { + let gb = parsed as f64 / 1024.0; + ui.label(format!("{} MB", format_number_thousands(parsed))); + ui.label(egui::RichText::new(format!("(≈ {:.1} GB)", gb)) + .color(crate::ui::theme::c_text_dim()) + .size(11.0)); + } else { + ui.label("MB"); + } } }); // Slider — kullanılabilir alan kadar @@ -1032,6 +1077,7 @@ impl PartitionStep { } else { self.manual.add_mountpoint.clone() }; + let prev_mp = self.manual.add_mountpoint.clone(); theme::show_combo_box(ui, "mp_combo", ¤t_mp, 120.0, |ui, w| { for mp in COMMON_MOUNTPOINTS { theme::selectable_value(ui, &mut self.manual.add_mountpoint, mp.to_string(), *mp, w); @@ -1046,6 +1092,35 @@ impl PartitionStep { .text_color(egui::Color32::from_rgb(230, 230, 230)) .vertical_align(egui::Align::Center) ); + + // Mountpoint değiştiğinde boyutu otomatik güncelle + if prev_mp != self.manual.add_mountpoint { + let mp = self.manual.add_mountpoint.trim().to_lowercase(); + self.manual.add_size_str = match mp.as_str() { + "/boot/efi" => "1024".to_string(), // 1GB + "swap" => { + // Swap için minimum 1GB, varsa RAM boyutu kadar + if let Ok(mem) = std::fs::read_to_string("/proc/meminfo") { + if let Some(line) = mem.lines().find(|l| l.starts_with("MemTotal:")) { + let kb: u64 = line.split_whitespace() + .nth(1) + .and_then(|s| s.parse().ok()) + .unwrap_or(4194304); // 4GB varsayılan + let mb = kb / 1024; + // Minimum 1GB, RAM boyutu ile karşılaştır + let swap_size = if mb < 1024 { 1024 } else { mb }; + swap_size.to_string() + } else { + "1024".to_string() // 1GB varsayılan + } + } else { + "1024".to_string() // 1GB varsayılan + } + }, + "/" => "remaining".to_string(), // Geri kalan alan + _ => self.manual.add_size_str.clone(), // Diğerleri için mevcut değeri koru + }; + } }); // mountpoint "swap" seçildiğinde FS tipini otomatik swap yap @@ -1070,7 +1145,10 @@ impl PartitionStep { // }); ui.add_enabled_ui(can_encrypt, |ui| { // Checkbox'ı yazısıyla birlikte tek bir bileşen olarak ekliyoruz: - ui.checkbox(&mut self.manual.add_encrypt, t!("luks_enable_root")); + ui.checkbox(&mut self.manual.add_encrypt, + egui::RichText::new(t!("luks_enable_root")).color(egui::Color32::from_rgb(128, 128, 128)) + ); + }); if !can_encrypt { self.manual.add_encrypt = false; } @@ -1091,7 +1169,7 @@ impl PartitionStep { .text_color(egui::Color32::from_rgb(230, 230, 230)) .vertical_align(egui::Align::Center) ); - let eye = if self.show_luks_password { "🙈" } else { "👁" }; + let eye = if self.show_luks_password { "\u{ECB5}" } else { "\u{ECB7}" }; if ui.small_button(eye).clicked() { self.show_luks_password = !self.show_luks_password; } @@ -1099,13 +1177,28 @@ impl PartitionStep { }); } + ui.add_space(6.0); + ui.checkbox(&mut self.manual.add_skip_format, + egui::RichText::new(t!("mp_skip_format")).color(egui::Color32::from_rgb(128, 128, 128))); + ui.add_space(8.0); ui.separator(); ui.horizontal(|ui| { let ok_label = if is_edit { t!("mp_save") } else { t!("mp_add_btn") }; if theme::primary_button(ui, &ok_label).clicked() { - let size_mb: u64 = self.manual.add_size_str - .trim().parse().unwrap_or(0); + let size_str = self.manual.add_size_str.trim(); + let size_mb: u64 = if size_str == "remaining" { + // Kalan alanı hesapla + if let Some(disk_size) = self.selected_disk_size_mb { + let used: u64 = state.custom_partitions.iter().map(|p| p.size_mb).sum(); + let remaining = disk_size.saturating_sub(used); + if remaining > 0 { remaining } else { disk_size } + } else { + 0 + } + } else { + size_str.parse().unwrap_or(0) + }; let mp = self.manual.add_mountpoint.trim().to_string(); let fstype = FS_OPTIONS.get(self.manual.add_fstype).map(|x| x.1.clone()).unwrap_or(FsType::Ext4); let encrypt = self.manual.add_encrypt; @@ -1117,6 +1210,7 @@ impl PartitionStep { if let Some(idx) = self.manual.edit_idx { if idx < state.custom_partitions.len() { let device = state.custom_partitions[idx].device.clone(); + let skip_format = self.manual.add_skip_format; state.custom_partitions[idx] = CustomPartition { device, size_mb, @@ -1125,6 +1219,7 @@ impl PartitionStep { encrypt, luks_password, luks_name: String::new(), + skip_format, }; } } @@ -1143,6 +1238,7 @@ impl PartitionStep { encrypt, luks_password, luks_name: String::new(), + skip_format: self.manual.add_skip_format, }); self.manual.add_encrypt = false; self.manual.add_luks_password.clear(); @@ -1389,12 +1485,16 @@ impl PartitionStep { } if !state.custom_partitions.is_empty() { if let Some(warn) = validate_manual(&state.custom_partitions, &state.logical_volumes, self.is_uefi) { - ui.colored_label(egui::Color32::from_rgb(220, 160, 40), warn); + ui.colored_label( + egui::Color32::from_rgb(220, 160, 40), + format!("\u{ECA1} {}", warn), + ); } else { ui.colored_label( - egui::Color32::from_rgb(60, 180, 90), - t!("mp_plan_valid"), + egui::Color32::from_rgb(7, 255, 0), + format!("\u{EB7B} {}", t!("mp_plan_valid")), ); + } } } diff --git a/src/steps/rescue.rs b/src/steps/rescue.rs index 0b5c96d..1374624 100644 --- a/src/steps/rescue.rs +++ b/src/steps/rescue.rs @@ -84,10 +84,10 @@ impl RescueStep { if let Ok(s) = r { if s.success() { self.mount_done = true; - self.log.push(format!("✓ {} → /mnt bağlandı.", dev)); + self.log.push(format!("\u{EB7B} {} → /mnt bağlandı.", dev)); return true; } else { - self.log.push(format!("⚠ {} bağlanamadı (zaten bağlı veya hata).", dev)); + self.log.push(format!("\u{EA6B} {} bağlanamadı (zaten bağlı veya hata).", dev)); self.mount_done = true; // Belki zaten bağlı return true; } @@ -194,13 +194,13 @@ impl RescueStep { Ok(o) if o.status.success() => { self.pisi.result_ok = Some(true); self.pisi.result_msg = Some(t!("rescue_pisi_history_ok").to_string()); - self.log.push(format!("✓ pisi takeback {} başarılı.", op)); + self.log.push(format!("\u{EB7B} pisi takeback {} başarılı.", op)); } Ok(o) => { let err = String::from_utf8_lossy(&o.stderr).trim().to_string(); self.pisi.result_ok = Some(false); self.pisi.result_msg = Some(t!("rescue_pisi_history_err", err = err).to_string()); - self.log.push(format!("❌ pisi takeback {}: {}", op, err)); + self.log.push(format!("\u{EA21} pisi takeback {}: {}", op, err)); } Err(e) => { self.pisi.result_ok = Some(false); @@ -249,8 +249,8 @@ impl RescueStep { if self.mount_done && resp.clicked() { self.log.push(t!("rescue_chroot_start").to_string()); match Self::run_rescue_cmd("chroot", &["/mnt", "/bin/bash", "-c", "echo 'chroot OK'"]) { - Ok(msg) => self.log.push(format!("✓ {}", msg)), - Err(e) => self.log.push(format!("❌ {}", e)), + Ok(msg) => self.log.push(format!("\u{EB7B} {}", msg)), + Err(e) => self.log.push(format!("\u{EA21} {}", e)), } } @@ -268,7 +268,7 @@ impl RescueStep { match Self::run_rescue_cmd(cmd, args) { Ok(m) if !m.is_empty() => self.log.push(m), Ok(_) => {}, - Err(e) => self.log.push(format!("⚠ {}", e)), + Err(e) => self.log.push(format!("\u{EA6B} {}", e)), } } // grub2-install @@ -278,13 +278,13 @@ impl RescueStep { a.extend_from_slice(&grub_args); a }) { - Ok(m) => self.log.push(format!("✓ grub2-install: {}", m)), - Err(e) => self.log.push(format!("❌ grub2-install: {}", e)), + Ok(m) => self.log.push(format!("\u{EB7B} grub2-install: {}", m)), + Err(e) => self.log.push(format!("\u{EA21} grub2-install: {}", e)), } // grub2-mkconfig match Self::run_rescue_cmd("chroot", &["/mnt", "grub2-mkconfig", "-o", "/boot/grub2/grub.cfg"]) { - Ok(m) => self.log.push(format!("✓ grub2-mkconfig: {}", m)), - Err(e) => self.log.push(format!("❌ grub2-mkconfig: {}", e)), + Ok(m) => self.log.push(format!("\u{EB7B} grub2-mkconfig: {}", m)), + Err(e) => self.log.push(format!("\u{EA21} grub2-mkconfig: {}", e)), } } }); @@ -479,11 +479,11 @@ impl InstallerStep for RescueStep { .inner_margin(egui::Margin::same(8.0)) .show(ui, |ui| { for line in &self.log { - let color = if line.starts_with("✓") { + let color = if line.starts_with("\u{EB7B}") { theme::c_success() - } else if line.starts_with("❌") { + } else if line.starts_with("\u{EA21}") { theme::c_error() - } else if line.starts_with("⚠") { + } else if line.starts_with("\u{EA6B}") { theme::c_warning() } else { theme::c_text_dim() @@ -501,7 +501,7 @@ impl InstallerStep for RescueStep { // Geri dön butonu ui.add_space(8.0); - if theme::secondary_button(ui, &t!("rescue_return")).clicked() { + if theme::secondary_button(ui, &format!("\u{EB7C} {}", t!("rescue_return"))).clicked() { state.rescue_mode = false; } } diff --git a/src/steps/summary.rs b/src/steps/summary.rs index be97a6f..f9f6341 100644 --- a/src/steps/summary.rs +++ b/src/steps/summary.rs @@ -18,12 +18,20 @@ impl InstallerStep for SummaryStep { ui.add_space(12.0); egui::Frame::group(ui.style()).show(ui, |ui| { + // Frame'in tüm genişliği kaplamasını sağlıyoruz ui.set_width(ui.available_width()); + // Grid genişlik ayarları + let available_width = ui.available_width(); + let col1_width = 160.0; // Sol sütun (etiketler) + let col2_width = (available_width - col1_width - 20.0).max(100.0); // Sağ sütun kalan alan + egui::Grid::new("summary_grid") .num_columns(2) - .spacing([20.0, 8.0]) .striped(true) + .spacing([12.0, 8.0]) + .min_col_width(col1_width) + .max_col_width(col2_width) .show(ui, |ui| { summary_row(ui, t!("summary_language"), &state.language); summary_row(ui, t!("summary_timezone"), &state.timezone); @@ -38,9 +46,9 @@ impl InstallerStep for SummaryStep { let disk_str = match &state.selected_disk { Some(d) => { if state.erase_disk { - format!("{} — {}", d, t!("summary_erase_mode")) + format!("{} \u{EA6B} {}", d, t!("summary_erase_mode")) } else { - format!("{} — {}", d, t!("summary_manual_mode")) + format!("{} \u{EA6B} {}", d, t!("summary_manual_mode")) } } None => t!("summary_not_selected").to_string(), @@ -73,7 +81,7 @@ impl InstallerStep for SummaryStep { } else { format!("{} MB", part.size_mb) }; - plan_lines.push(format!("{} ➔ {} ({}, {})", part.device, part.mountpoint, part.fstype, size_str)); + plan_lines.push(format!("{} \u{EA6B} {} ({}, {})", part.device, part.mountpoint, part.fstype, size_str)); } summary_row(ui, t!("summary_custom_partitions"), &plan_lines.join("\n")); } @@ -118,16 +126,18 @@ impl InstallerStep for SummaryStep { ui.add_space(16.0); - // Uyarı kutusu + // Uyarı kutusu (\u{EA6B} uyarısı eklenmiş) egui::Frame::none() .fill(egui::Color32::from_rgba_unmultiplied(200, 60, 40, 30)) .rounding(6.0) .inner_margin(egui::Margin::same(10.0)) .show(ui, |ui| { - ui.colored_label( - egui::Color32::from_rgb(180, 60, 40), - t!("summary_warning"), - ); + ui.horizontal(|ui| { + ui.colored_label( + egui::Color32::from_rgb(255, 255, 255), + format!("\u{EA21} {}", t!("summary_warning")), + ); + }); }); } @@ -139,6 +149,9 @@ impl InstallerStep for SummaryStep { fn summary_row(ui: &mut egui::Ui, label: impl Into, value: &str) { ui.label(egui::RichText::new(label.into()).strong().color(crate::ui::theme::c_text())); - ui.label(egui::RichText::new(value).color(crate::ui::theme::c_text())); + + // Değer sütununun taşmasını engellemek ve hizalamayı korumak için wrap() kullanıyoruz + ui.add(egui::Label::new(egui::RichText::new(value).color(crate::ui::theme::c_text())).wrap(true)); + ui.end_row(); -} +} \ No newline at end of file diff --git a/src/steps/users.rs b/src/steps/users.rs index a5654d9..897f45f 100644 --- a/src/steps/users.rs +++ b/src/steps/users.rs @@ -211,16 +211,16 @@ impl InstallerStep for UsersStep { if !state.real_name.is_empty() { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/check.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_success()) + ui.label( + egui::RichText::new("\u{EB7B}") + .size(18.0) + .color(theme::c_success()) ); }else{ - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/fail-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_error()) + ui.label( + egui::RichText::new("\u{EA21}") + .size(18.0) + .color(theme::c_error()) ); } }); @@ -238,16 +238,16 @@ impl InstallerStep for UsersStep { form_input_text(ui, &mut state.username); if !state.username.is_empty() { if let Some(_err) = validate_username(&state.username) { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/fail-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_error()) + ui.label( + egui::RichText::new("\u{EA21}") + .size(18.0) + .color(theme::c_error()) ); } else { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/check.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_success()) + ui.label( + egui::RichText::new("\u{EB7B}") + .size(18.0) + .color(theme::c_success()) ); } } @@ -290,16 +290,16 @@ impl InstallerStep for UsersStep { form_input_password(ui, &mut state.password_confirm, show_pwd); if !state.password_confirm.is_empty() { if state.password == state.password_confirm { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/check.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_success()) + ui.label( + egui::RichText::new("\u{EB7B}") + .size(18.0) + .color(theme::c_success()) ); } else { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/fail-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_error()) + ui.label( + egui::RichText::new("\u{EA21}") + .size(18.0) + .color(theme::c_error()) ); } } @@ -316,16 +316,16 @@ impl InstallerStep for UsersStep { form_input_text(ui, &mut state.hostname); if !state.hostname.is_empty() { if is_valid_hostname(&state.hostname) { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/check.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_success()) + ui.label( + egui::RichText::new("\u{EB7B}") + .size(18.0) + .color(theme::c_success()) ); } else { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/fail-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_error()) + ui.label( + egui::RichText::new("\u{EA21}") + .size(18.0) + .color(theme::c_error()) ); } } @@ -377,16 +377,16 @@ impl InstallerStep for UsersStep { form_input_password(ui, &mut state.root_password_confirm, show_root_pwd_conf); if !state.root_password_confirm.is_empty() { if state.root_password == state.root_password_confirm { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/check.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_success()) + ui.label( + egui::RichText::new("\u{EB7B}") + .size(18.0) + .color(theme::c_success()) ); } else { - ui.add( - egui::Image::new(egui::include_image!("../../assets/icons/fail-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(theme::c_error()) + ui.label( + egui::RichText::new("\u{EA21}") + .size(18.0) + .color(theme::c_error()) ); } } @@ -410,15 +410,17 @@ impl InstallerStep for UsersStep { let user_ok = is_valid_username(&state.username) && is_valid_hostname(&state.hostname) - && state.password.len() >= 8 + // DÜZELTME: Kullanıcı şifresi en az 3 karakter olmalı + && state.password.len() >= 3 && state.password == state.password_confirm; if self.use_same_for_admin { user_ok } else { + // DÜZELTME: Root şifresi boşsa veya 3 karakterden uzunsa ve eşleşiyorsa geçerli user_ok && ( state.root_password.is_empty() - || (state.root_password.len() >= 8 && state.root_password == state.root_password_confirm) + || (state.root_password.len() >= 3 && state.root_password == state.root_password_confirm) ) } } diff --git a/src/ui/slideshow.rs b/src/ui/slideshow.rs index ce63cbb..02fd0be 100644 --- a/src/ui/slideshow.rs +++ b/src/ui/slideshow.rs @@ -2,327 +2,91 @@ //! //! Her slayt: başlık, açıklama metni ve isteğe bağlı bir simge karakteri. //! Slaytlar otomatik olarak 6 saniyede bir değişir. -//! Masaüstü ortamına göre farklı slayt setleri yüklenebilir. +//! Slaytlar harici `slides/slides_{lang}.toml` dosyasından yüklenir. use eframe::egui; -use std::collections::HashMap; use std::time::{Duration, Instant}; -use rust_i18n::t; use std::borrow::Cow; const SLIDE_INTERVAL: Duration = Duration::from_secs(6); pub struct Slide { - pub icon: &'static str, + pub icon: String, pub title: Cow<'static, str>, pub description: Cow<'static, str>, } -/// Masaüstü ortamına göre slayt seti döner. -/// ISO meta verisi ileride `/etc/livecd-desktop` gibi bir dosyadan okunabilir. -pub fn slides_for_desktop(desktop: &str, branding_slides: &[crate::branding::SlideItem]) -> Vec { - if !branding_slides.is_empty() { - branding_slides - .iter() - .filter(|item| item.desktop.is_empty() || item.desktop.to_lowercase() == desktop.to_lowercase()) - .map(|item| Slide { - icon: Box::leak(item.icon.clone().into_boxed_str()), - title: Cow::Owned(item.title.clone()), - description: Cow::Owned(item.description.clone()), - }) - .collect() - } else { - let mut slides = default_slides(); - let specific_slides = match desktop { - "budgie" => budgie_slides(), - "cinnamon" => cinnamon_slides(), - "gnome" => gnome_slides(), - "kde" | "plasma" => kde_slides(), - "lxde" => lxde_slides(), - "lxqt" => lxqt_slides(), - "lumina" => lumina_slides(), - "mate" => mate_slides(), - "xfce" => xfce_slides(), - _ => vec![], - }; - slides.extend(specific_slides); - slides - } -} - -fn default_slides() -> Vec { - vec![ - Slide { - icon: "pisilogo", - title: t!("welcome_slide_title"), - description: t!("welcome_slide_description"), - }, - Slide { - icon: "pisi", - title: t!("package_manager_title"), - description: t!("package_manager_description"), - }, - Slide { - icon: "community", - title: t!("community_title"), - description: t!("community_description"), - }, - Slide { - icon: "pisi_speed", - title: t!("speed_title"), - description: t!("speed_description"), - }, - Slide { - icon: "securety", - title: t!("security_title"), - description: t!("security_description"), - }, - Slide { - icon: "customization", - title: t!("customization_title"), - description: t!("customization_description"), - }, - ] -} - -fn budgie_slides() -> Vec { - vec![ - Slide { - icon: "budgie", - title: t!("budgie_title"), - description: t!("budgie_description"), - }, - Slide { - icon: "budgie_applets", - title: t!("budgie_applets_title"), - description: t!("budgie_applets_description"), - }, - Slide { - icon: "budgie_raven", - title: t!("budgie_raven_title"), - description: t!("budgie_raven_description"), - }, - Slide { - icon: "budgie_gtk_theme", - title: t!("budgie_gtk_theme_title"), - description: t!("budgie_gtk_theme_description"), - }, - ] -} - -fn cinnamon_slides() -> Vec { - vec![ - Slide { - icon: "cinnamon", - title: t!("cinnamon_title"), - description: t!("cinnamon_description"), - }, - Slide { - icon: "cinnamon_panel", - title: t!("cinnamon_panel_title"), - description: t!("cinnamon_panel_description"), - }, - Slide { - icon: "cinnamon_settings", - title: t!("cinnamon_settings_title"), - description: t!("cinnamon_settings_description"), - }, - Slide { - icon: "cinnamon_desklets", - title: t!("cinnamon_desklets_title"), - description: t!("cinnamon_desklets_description"), - }, - ] -} - -fn gnome_slides() -> Vec { - vec![ - Slide { - icon: "gnome", - title: t!("gnome_title"), - description: t!("gnome_description"), - }, - Slide { - icon: "gnome_search", - title: t!("gnome_search_title"), - description: t!("gnome_search_description"), - }, - Slide { - icon: "gnome_extensions", - title: t!("gnome_extensions_title"), - description: t!("gnome_extensions_description"), - }, - ] -} - -fn kde_slides() -> Vec { - vec![ - Slide { - icon: "kde", - title: t!("kde_title"), - description: t!("kde_description"), - }, - Slide { - icon: "file_manager", - title: t!("dolphin_title"), - description: t!("dolphin_description"), - }, - Slide { - icon: "kde_connect", - title: t!("kde_connect_title"), - description: t!("kde_connect_description"), - }, - Slide { - icon: "discover", - title: t!("discover_title"), - description: t!("discover_description"), - }, - ] -} - -fn lxde_slides() -> Vec { - vec![ - Slide { - icon: "lxde", - title: t!("lxde_title"), - description: t!("lxde_description"), - }, - Slide { - icon: "lxde_openbox", - title: t!("lxde_openbox_title"), - description: t!("lxde_openbox_description"), - }, - Slide { - icon: "file_manager", - title: t!("lxde_pcmanfm_title"), - description: t!("lxde_pcmanfm_description"), - }, - Slide { - icon: "lxde_lxpanel", - title: t!("lxde_lxpanel_title"), - description: t!("lxde_lxpanel_description"), - }, - ] -} - -fn lxqt_slides() -> Vec { - vec![ - Slide { - icon: "lxqt", - title: t!("lxqt_title"), - description: t!("lxqt_description"), - }, - Slide { - icon: "lxqt_panel", - title: t!("lxqt_panel_title"), - description: t!("lxqt_panel_description"), - }, - Slide { - icon: "file_manager", - title: t!("lxqt_pcmanfm_qt_title"), - description: t!("lxqt_pcmanfm_qt_description"), - }, - ] -} - -fn lumina_slides() -> Vec { - vec![ - Slide { - icon: "lumina", - title: t!("lumina_title"), - description: t!("lumina_description"), - }, - Slide { - icon: "lumina_applications", - title: t!("lumina_applications_title"), - description: t!("lumina_applications_description"), - }, - Slide { - icon: "lumina_theme", - title: t!("lumina_theme_title"), - description: t!("lumina_theme_description"), - }, - Slide { - icon: "lumina_panel", - title: t!("lumina_panel_title"), - description: t!("lumina_panel_description"), - }, - ] -} - -fn mate_slides() -> Vec { - vec![ - Slide { - icon: "mate", - title: t!("mate_title"), - description: t!("mate_description"), - }, - Slide { - icon: "file_manager", - title: t!("mate_caja_title"), - description: t!("mate_caja_description"), - }, - Slide { - icon: "mate_settings", - title: t!("mate_settings_title"), - description: t!("mate_settings_description"), - }, - Slide { - icon: "mate_applications", - title: t!("mate_applications_title"), - description: t!("mate_applications_description"), - }, - ] -} - -fn xfce_slides() -> Vec { - vec![ - Slide { - icon: "xfce", - title: t!("xfce_title"), - description: t!("xfce_description"), - }, - Slide { - icon: "xfce_panel", - title: t!("xfce_panel_title"), - description: t!("xfce_panel_description"), - }, - Slide { - icon: "file_manager", - title: t!("xfce_thunar_title"), - description: t!("xfce_thunar_description"), - }, - Slide { - icon: "xfce_settings", - title: t!("xfce_settings_title"), - description: t!("xfce_settings_description"), - }, - ] -} - - // ─── Slayt gösterisi widget'ı ─────────────────────────────────────────── pub struct Slideshow { slides: Vec, current: usize, last_advance: Instant, - /// branding.toml'dan gelen ikon-adı → `file://` URI eşlemesi - icons: HashMap, } impl Slideshow { - pub fn new(desktop: &str, icons: HashMap, branding_slides: Vec) -> Self { + pub fn new(desktop: &str, lang: &str) -> Self { + let slides = Self::load_slides(desktop, lang); Self { - slides: slides_for_desktop(desktop, &branding_slides), - current: 0, + slides, + current: 0, last_advance: Instant::now(), - icons, } } + fn load_slides(desktop: &str, lang: &str) -> Vec { + let filenames = [ + format!("slides_{}.toml", lang), + "slides.toml".to_string(), + ]; + let exe_dir = std::env::current_exe() + .ok() + .and_then(|p| p.parent().map(|d| d.to_path_buf())) + .unwrap_or_default(); + let search_dirs = [ + std::env::current_dir().unwrap_or_default(), + exe_dir, + std::path::PathBuf::from("/usr/share/yali"), + std::path::PathBuf::from("/etc/yali"), + ]; + for dir in &search_dirs { + for fname in &filenames { + let path = dir.join("slides").join(fname); + let content = match std::fs::read_to_string(&path) { + Ok(c) => c, + Err(_) => continue, + }; + match toml::from_str::(&content) { + Ok(cfg) => { + let slides: Vec = cfg.items + .into_iter() + .filter(|item| item.desktop.is_empty() || item.desktop.to_lowercase() == desktop.to_lowercase()) + .map(|item| Slide { + icon: item.icon, + title: Cow::Owned(item.title), + description: Cow::Owned(item.description), + }) + .collect(); + eprintln!("[slides] {} -> {} slayt yüklendi", path.display(), slides.len()); + return slides; + } + Err(e) => { + eprintln!("[slides] {} ayrıştırılamadı: {}", path.display(), e); + } + } + } + } + eprintln!("[slides] hiçbir slayt dosyası yüklenemedi"); + Vec::new() + } + /// Her frame'de çağrılır. Otomatik ilerlemeyi ve çizimi yönetir. pub fn show(&mut self, ui: &mut egui::Ui) { + if self.slides.is_empty() { + ui.label(egui::RichText::new("Slayt yüklenemedi").size(14.0)); + return; + } + // Otomatik ilerleme if self.last_advance.elapsed() >= SLIDE_INTERVAL { self.current = (self.current + 1) % self.slides.len(); @@ -338,15 +102,12 @@ impl Slideshow { let slide = &self.slides[self.current]; - // İkona karşılık gelen URI: önce branding haritasından, yoksa doğrudan dosya yolu olarak dene - let resolved_uri = self.icons.get(slide.icon).cloned() - .or_else(|| { - if slide.icon.contains('/') || slide.icon.contains('\\') { - Some(crate::branding::path_to_file_uri(slide.icon)) - } else { - None - } - }); + // İkon: doğrudan dosya yolundan file:// URI'sine çevir + let resolved_uri = if !slide.icon.is_empty() { + Some(crate::branding::path_to_file_uri(&slide.icon)) + } else { + None + }; egui::Frame::none() .fill(crate::ui::theme::c_bg_widget()) @@ -363,50 +124,8 @@ impl Slideshow { .rounding(egui::Rounding::same(8.0)), ); } else { - let emoji = match slide.icon { - "pisilogo" | "pisi" => "\u{1f427}", - "community" => "\u{1f465}", - "pisi_speed" => "\u{26a1}", - "securety" => "\u{1f512}", - "customization" => "\u{1f3a8}", - "budgie" => "\u{1f98e}", - "budgie_applets" => "\u{1f9e9}", - "budgie_raven" => "\u{1f426}", - "budgie_gtk_theme" => "\u{1f3ad}", - "cinnamon" => "\u{1f36e}", - "cinnamon_panel" => "\u{1f4cb}", - "cinnamon_settings" => "\u{2699}\u{fe0f}", - "cinnamon_desklets" => "\u{1f4cc}", - "gnome" => "\u{1f9d1}\u{200d}\u{1f4bb}", - "gnome_search" => "\u{1f50d}", - "gnome_extensions" => "\u{1f9e9}", - "kde" => "\u{1f48e}", - "file_manager" => "\u{1f4c1}", - "kde_connect" => "\u{1f4f1}", - "discover" => "\u{1f6cd}\u{fe0f}", - "lxde" => "\u{1f5a5}\u{fe0f}", - "lxde_openbox" => "\u{1f4e6}", - "lxde_lxpanel" => "\u{1f4ca}", - "lxde_pcmanfm" => "\u{1f4c2}", - "lxqt" => "\u{1f5a5}\u{fe0f}", - "lxqt_panel" => "\u{1f4cb}", - "lxqt_pcmanfm_qt" => "\u{1f4c2}", - "lumina" => "\u{1f31f}", - "lumina_applications" => "\u{1f4f1}", - "lumina_theme" => "\u{1f3a8}", - "lumina_panel" => "\u{1f4cb}", - "mate" => "\u{1f9c9}", - "mate_caja" => "\u{1f4c2}", - "mate_settings" => "\u{2699}\u{fe0f}", - "mate_applications" => "\u{1f4f1}", - "xfce" => "\u{1f42d}", - "xfce_panel" => "\u{1f4cb}", - "xfce_thunar" => "\u{1f4c2}", - "xfce_settings" => "\u{2699}\u{fe0f}", - _ => "\u{1f5bc}\u{fe0f}", - }; ui.label( - egui::RichText::new(emoji) + egui::RichText::new("\u{1f5bc}\u{fe0f}") .size(48.0), ); } @@ -452,6 +171,10 @@ impl Slideshow { }); } + pub fn slide_count(&self) -> usize { + self.slides.len() + } + pub fn advance(&mut self) { self.current = (self.current + 1) % self.slides.len(); self.last_advance = Instant::now(); diff --git a/src/ui/theme.rs b/src/ui/theme.rs index 9115376..a3749a9 100644 --- a/src/ui/theme.rs +++ b/src/ui/theme.rs @@ -168,6 +168,18 @@ fn setup_fonts(ctx: &egui::Context) { } } + // 3. ADIM: Remixicon ikon fontunu projeye göm (PUA bölgesindeki karakterler için fallback) + let remixicon_data = include_bytes!("../../assets/remixicon.ttf"); + fonts.font_data.insert( + "remixicon".to_owned(), + egui::FontData::from_owned(remixicon_data.to_vec()), + ); + fonts + .families + .entry(egui::FontFamily::Proportional) + .or_default() + .push("remixicon".to_owned()); + ctx.set_fonts(fonts); } @@ -282,9 +294,11 @@ pub fn error_box(ui: &mut egui::Ui, msg: &str) { .inner_margin(egui::Margin::same(10.0)) .show(ui, |ui| { ui.horizontal(|ui| { - ui.add(egui::Image::new(egui::include_image!("../../assets/icons/fail-icon.svg")) - .max_width(18.0).max_height(18.0) - .tint(c_error())); + ui.label( + egui::RichText::new("\u{F4C6}") + .color(c_error()) + .size(18.0) // SVG max_width/height yerine font boyutu + ); ui.colored_label(c_error(), msg); }); });