Skip to content

Commit af9a17f

Browse files
committed
feat: Update install command to check for Arch Linux package and download mkarchiso script
1 parent b70e819 commit af9a17f

3 files changed

Lines changed: 274 additions & 13 deletions

File tree

alteriso/go.mod

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ module github.com/FascodeNet/alterlinux
33
go 1.25.1
44

55
require (
6+
github.com/Hayao0819/go-distro v0.0.0-20240502052126-476ea8836793
67
github.com/Hayao0819/nahi v0.0.4-0.20250226153401-b90a5060c85a
8+
github.com/Jguer/go-alpm/v2 v2.3.1
9+
github.com/go-git/go-git/v6 v6.0.0-20260114124804-a8db3a6585a6
710
github.com/m-mizutani/clog v0.1.0
811
github.com/moby/sys/mount v0.3.4
912
github.com/moby/sys/mountinfo v0.7.2
@@ -15,18 +18,34 @@ require (
1518
)
1619

1720
require (
21+
github.com/Microsoft/go-winio v0.6.2 // indirect
22+
github.com/ProtonMail/go-crypto v1.3.0 // indirect
23+
github.com/ashcrow/osrelease v0.0.0-20180626175927-9b292693c55c // indirect
24+
github.com/cloudflare/circl v1.6.1 // indirect
25+
github.com/cyphar/filepath-securejoin v0.6.1 // indirect
26+
github.com/emirpasic/gods v1.18.1 // indirect
1827
github.com/fatih/color v1.16.0 // indirect
28+
github.com/go-git/gcfg/v2 v2.0.2 // indirect
29+
github.com/go-git/go-billy/v6 v6.0.0-20251217170237-e9738f50a3cd // indirect
30+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
1931
github.com/google/uuid v1.6.0 // indirect
2032
github.com/inconshreveable/mousetrap v1.1.0 // indirect
2133
github.com/k0kubun/pp/v3 v3.2.0 // indirect
34+
github.com/kevinburke/ssh_config v1.4.0 // indirect
35+
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
2236
github.com/m-mizutani/goerr/v2 v2.0.0-alpha.1.0.20250108231337-0b64a5f93f03 // indirect
2337
github.com/mattn/go-colorable v0.1.13 // indirect
2438
github.com/mattn/go-isatty v0.0.20 // indirect
2539
github.com/otiai10/mint v1.6.3 // indirect
40+
github.com/pjbgf/sha1cd v0.5.0 // indirect
41+
github.com/sergi/go-diff v1.4.0 // indirect
2642
github.com/spf13/pflag v1.0.5 // indirect
27-
golang.org/x/sync v0.11.0 // indirect
28-
golang.org/x/sys v0.33.0 // indirect
29-
golang.org/x/text v0.22.0 // indirect
43+
golang.org/x/crypto v0.47.0 // indirect
44+
golang.org/x/net v0.49.0 // indirect
45+
golang.org/x/sync v0.19.0 // indirect
46+
golang.org/x/sys v0.40.0 // indirect
47+
golang.org/x/text v0.33.0 // indirect
48+
howett.net/plist v1.0.0 // indirect
3049
)
3150

3251
ignore (

alteriso/go.sum

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,65 @@
1+
github.com/Hayao0819/go-distro v0.0.0-20240502052126-476ea8836793 h1:tN03nA+W+ZvPcXr5ON1bnieA908g3jorP2UbBtedNJQ=
2+
github.com/Hayao0819/go-distro v0.0.0-20240502052126-476ea8836793/go.mod h1:C7RUU7FdBZWMNpHLW23ZoaRZnFraq9CEyEPgA6KIuwY=
13
github.com/Hayao0819/nahi v0.0.4-0.20250226153401-b90a5060c85a h1:b04Merzo0nmiQVoYau3ZGmRD5wYZjZOR5r+ron3dA44=
24
github.com/Hayao0819/nahi v0.0.4-0.20250226153401-b90a5060c85a/go.mod h1:cup9lsmub3ZNT4CKb1S7wdCp+v3TCORul2la3Iim+a0=
5+
github.com/Jguer/go-alpm/v2 v2.3.1 h1:6xgyL28aI4E4gng/cH+kvCnpa95f4Qgmddmh8A7iTGk=
6+
github.com/Jguer/go-alpm/v2 v2.3.1/go.mod h1:lfe8gSe83F/KERaQvEfrSqQ4n+8bES+ZIyKWR/gm3MI=
7+
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
8+
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
9+
github.com/Morganamilo/go-pacmanconf v0.0.0-20210502114700-cff030e927a5 h1:TMscPjkb1ThXN32LuFY5bEYIcXZx3YlwzhS1GxNpn/c=
10+
github.com/Morganamilo/go-pacmanconf v0.0.0-20210502114700-cff030e927a5/go.mod h1:Hk55m330jNiwxRodIlMCvw5iEyoRUCIY64W1p9D+tHc=
11+
github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw=
12+
github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
13+
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
14+
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
15+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
16+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
17+
github.com/ashcrow/osrelease v0.0.0-20180626175927-9b292693c55c h1:icme0QhxrgZOxTBnT6K8dfGLwbKWSOVwPB95XTbo8Ws=
18+
github.com/ashcrow/osrelease v0.0.0-20180626175927-9b292693c55c/go.mod h1:BRljTyotlu+6N+Qlu5MhjxpdmccCnp9lDvZjNNV8qr4=
19+
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
20+
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
321
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
22+
github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=
23+
github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
24+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
25+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
26+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
27+
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
28+
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
429
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
530
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
31+
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
32+
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
33+
github.com/go-git/gcfg/v2 v2.0.2 h1:MY5SIIfTGGEMhdA7d7JePuVVxtKL7Hp+ApGDJAJ7dpo=
34+
github.com/go-git/gcfg/v2 v2.0.2/go.mod h1:/lv2NsxvhepuMrldsFilrgct6pxzpGdSRC13ydTLSLs=
35+
github.com/go-git/go-billy/v6 v6.0.0-20251217170237-e9738f50a3cd h1:Gd/f9cGi/3h1JOPaa6er+CkKUGyGX2DBJdFbDKVO+R0=
36+
github.com/go-git/go-billy/v6 v6.0.0-20251217170237-e9738f50a3cd/go.mod h1:d3XQcsHu1idnquxt48kAv+h+1MUiYKLH/e7LAzjP+pI=
37+
github.com/go-git/go-git-fixtures/v5 v5.1.2-0.20251229094738-4b14af179146 h1:xYfxAopYyL44ot6dMBIb1Z1njFM0ZBQ99HdIB99KxLs=
38+
github.com/go-git/go-git-fixtures/v5 v5.1.2-0.20251229094738-4b14af179146/go.mod h1:QE/75B8tBSLNGyUUbA9tw3EGHoFtYOtypa2h8YJxsWI=
39+
github.com/go-git/go-git/v6 v6.0.0-20260114124804-a8db3a6585a6 h1:Yo1MlE8LpvD0pr7mZ04b6hKZKQcPvLrQFgyY1jNMEyU=
40+
github.com/go-git/go-git/v6 v6.0.0-20260114124804-a8db3a6585a6/go.mod h1:enMzPHv+9hL4B7tH7OJGQKNzCkMzXovUoaiXfsLF7Xs=
641
github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=
742
github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
43+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
44+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
845
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
946
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
1047
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
1148
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
1249
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
1350
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
51+
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
1452
github.com/k0kubun/pp/v3 v3.2.0 h1:h33hNTZ9nVFNP3u2Fsgz8JXiF5JINoZfFq4SvKJwNcs=
1553
github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA=
54+
github.com/kevinburke/ssh_config v1.4.0 h1:6xxtP5bZ2E4NF5tuQulISpTO2z8XbtH8cg1PWkxoFkQ=
55+
github.com/kevinburke/ssh_config v1.4.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M=
56+
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
57+
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
58+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
1659
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
1760
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
61+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
62+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
1863
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
1964
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
2065
github.com/m-mizutani/clog v0.1.0 h1:VRMFLVYodCbkdwfjBzJFqTmkz5j6kNLoYtXs249cI3A=
@@ -36,26 +81,49 @@ github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
3681
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
3782
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
3883
github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
84+
github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0=
85+
github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM=
86+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
87+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
3988
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
4089
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
4190
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
4291
github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI=
4392
github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
93+
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
94+
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
4495
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
4596
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
4697
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
4798
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
99+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
100+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
101+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
102+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
48103
github.com/ztrue/tracerr v0.4.0 h1:vT5PFxwIGs7rCg9ZgJ/y0NmOpJkPCPFK8x0vVIYzd04=
49104
github.com/ztrue/tracerr v0.4.0/go.mod h1:PaFfYlas0DfmXNpo7Eay4MFhZUONqvXM+T2HyGPpngk=
50-
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
51-
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
105+
golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8=
106+
golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A=
107+
golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
108+
golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
109+
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
110+
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
52111
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
53112
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
54-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
55-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
56-
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
57-
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
113+
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
114+
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
115+
golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
116+
golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=
117+
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
118+
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
58119
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
120+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
121+
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
122+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
123+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
124+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
59125
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
126+
howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
127+
howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
60128
mvdan.cc/sh/v3 v3.12.0 h1:ejKUR7ONP5bb+UGHGEG/k9V5+pRVIyD+LsZz7o8KHrI=
61129
mvdan.cc/sh/v3 v3.12.0/go.mod h1:Se6Cj17eYSn+sNooLZiEUnNNmNxg0imoYlTu4CyaGyg=

alteriso/src/internal/cmd/install.go

Lines changed: 178 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,194 @@
11
package cmd
22

33
import (
4+
"fmt"
5+
"io"
6+
"log/slog"
7+
"net/http"
8+
"os"
9+
"os/exec"
10+
11+
"github.com/Hayao0819/go-distro"
12+
"github.com/Hayao0819/go-distro/linux"
13+
414
"github.com/FascodeNet/alterlinux/src/internal/archiso"
15+
"github.com/FascodeNet/alterlinux/src/internal/errors"
16+
"github.com/Jguer/go-alpm/v2"
17+
"github.com/go-git/go-git/v6"
18+
"github.com/go-git/go-git/v6/plumbing"
519
"github.com/spf13/cobra"
620
)
721

22+
func isPkgInstalled(name ...string) (bool, error) {
23+
24+
if !isArchLinux() {
25+
return false, nil
26+
}
27+
28+
h, err := alpm.Initialize("/", "/var/lib/pacman")
29+
if err != nil {
30+
return false, err
31+
}
32+
defer h.Release()
33+
34+
db, err := h.LocalDB()
35+
if err != nil {
36+
return false, err
37+
}
38+
39+
pkg := db.Search(name)
40+
if pkg == nil {
41+
return false, nil
42+
}
43+
44+
return true, nil
45+
}
46+
47+
func downloadFile(url, dest string) error {
48+
res, err := http.Get(url)
49+
if err != nil {
50+
return err
51+
}
52+
defer res.Body.Close()
53+
54+
file, err := os.Create(dest)
55+
if err != nil {
56+
return err
57+
}
58+
defer file.Close()
59+
60+
_, err = io.Copy(file, res.Body)
61+
if err != nil {
62+
return err
63+
}
64+
65+
return nil
66+
}
67+
68+
func checkoutBranch(repo *git.Repository, branch string) error {
69+
w, err := repo.Worktree()
70+
if err != nil {
71+
return err
72+
}
73+
74+
err = w.Checkout(&git.CheckoutOptions{
75+
Branch: plumbing.ReferenceName(branch),
76+
})
77+
if err != nil {
78+
return err
79+
}
80+
81+
return nil
82+
}
83+
84+
func gitCloneIntoTempDir(repoURL string) (*git.Repository, string, error) {
85+
tempDir, err := os.MkdirTemp("", "archiso-injectable-")
86+
if err != nil {
87+
return nil, "", err
88+
}
89+
90+
// err = gitClone(repoURL, tempDir)
91+
r, err := git.PlainClone(tempDir, &git.CloneOptions{
92+
URL: repoURL,
93+
})
94+
if err != nil {
95+
os.RemoveAll(tempDir)
96+
return nil, "", err
97+
}
98+
99+
return r, tempDir, nil
100+
}
101+
102+
func isArchLinux() bool {
103+
return distro.GetDetail().ID() == linux.Arch.ID()
104+
}
105+
8106
func installArchisoCmd() *cobra.Command {
9-
return &cobra.Command{
107+
cmd := cobra.Command{
10108
Use: "install-archiso",
11109
Short: "Install injectable Archiso",
12-
RunE: func(cmd *cobra.Command, args []string) error {
13-
// return errors.New("not implemented yet")
14-
archiso.IsInjectable()
110+
PreRunE: func(cmd *cobra.Command, args []string) error {
111+
installed, err := archiso.IsInjectable()
112+
if err != nil {
113+
return err
114+
}
115+
if installed {
116+
return errors.New("archiso-injectable is already installed")
117+
}
15118
return nil
16119
},
120+
RunE: func(cmd *cobra.Command, args []string) error {
121+
isArchisoInstalled, err := isPkgInstalled("archiso", "archiso-git")
122+
if err != nil {
123+
return err
124+
}
125+
126+
githubOwner, err := cmd.Flags().GetString("github-owner")
127+
if err != nil {
128+
return err
129+
}
130+
131+
githubRepo, err := cmd.Flags().GetString("github-repo")
132+
if err != nil {
133+
return err
134+
}
135+
136+
githubRef, err := cmd.Flags().GetString("github-ref")
137+
if err != nil {
138+
return err
139+
}
140+
141+
if isArchisoInstalled {
142+
slog.Info("archiso package is installed, downloading mkarchiso script directly")
143+
dest, err := cmd.Flags().GetString("script-dest")
144+
if err != nil {
145+
return err
146+
}
147+
148+
// https://raw.githubusercontent.com/FascodeNet/alterlinux/refs/heads/dev/archiso/mkarchiso
149+
url := fmt.Sprintf("https://raw.githubusercontent.com/%s/%s/%s/archiso/mkarchiso", githubOwner, githubRepo, githubRef)
150+
err = downloadFile(url, dest)
151+
if err != nil {
152+
return err
153+
}
154+
err = os.Chmod(dest, 0755)
155+
if err != nil {
156+
return err
157+
}
158+
return nil
159+
} else {
160+
slog.Info("archiso package is not installed, cloning full repository and installing from source")
161+
repoURL := fmt.Sprintf("https://github.com/%s/%s.git", githubOwner, githubRepo)
162+
repo, tempDir, err := gitCloneIntoTempDir(repoURL)
163+
if err != nil {
164+
return err
165+
}
166+
defer os.RemoveAll(tempDir)
167+
168+
if err := checkoutBranch(repo, githubRef); err != nil {
169+
return err
170+
}
171+
172+
makeCmd := exec.Command("make", "install")
173+
makeCmd.Dir = tempDir
174+
makeCmd.Stdout = os.Stdout
175+
makeCmd.Stderr = os.Stderr
176+
if err := makeCmd.Run(); err != nil {
177+
return err
178+
}
179+
return nil
180+
181+
}
182+
},
17183
}
184+
185+
cmd.Flags().StringP("script-dest", "", "/usr/local/bin/mkarchiso", "Local destination path for the mkarchiso script")
186+
cmd.Flags().StringP("github-owner", "", "FascodeNet", "GitHub owner of the archiso-injectable repository")
187+
cmd.Flags().StringP("github-repo", "", "archiso-injectable", "GitHub repository name of the archiso-injectable repository")
188+
cmd.Flags().StringP("github-ref", "", "main", "GitHub reference (branch, tag, commit) of the archiso-injectable repository")
189+
190+
return &cmd
191+
18192
}
19193

20194
func init() {

0 commit comments

Comments
 (0)