Repository navigation
Expand file tree
/
Copy pathlinux.html
More file actions
264 lines (250 loc) · 12.6 KB
/
Copy pathlinux.html
File metadata and controls
264 lines (250 loc) · 12.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Linux — AI2TH</title>
<meta name="description" content="AI2TH Linux: Linxr runs Alpine Linux, containers, k3s and a desktop on Android; cryptship ships encrypted Linux containers." />
<link rel="icon" type="image/svg+xml" href="logo/ai2th-mark.svg" />
<link rel="stylesheet" href="style.css" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
</head>
<body>
<nav class="nav">
<div class="nav-inner">
<a href="index.html" class="nav-logo"><img src="logo/ai2th-animated.svg" alt="AI2TH" class="nav-logo-img" /><span class="nav-logo-text">AI2TH</span></a>
<div class="nav-links">
<a href="index.html">Home</a>
<a href="android.html">Android</a>
<a href="linux.html" class="nav-active">Linux</a>
<a href="kubernetes.html">Kubernetes</a>
<a href="security.html">Security</a>
<a href="bible.html">Bible</a>
<a href="about.html">About</a>
<a href="https://groups.google.com/g/ai2th" target="_blank" rel="noopener">Community</a>
<a href="https://github.com/AI2TH" target="_blank" rel="noopener">GitHub</a>
</div>
</div>
</nav>
<div class="page-header">
<div class="section-inner">
<div class="breadcrumb"><a href="index.html">AI2TH</a><span>/</span>Linux</div>
<h1 class="page-title">Linux,<br /><span class="accent">wherever you need it.</span></h1>
<p class="page-sub">A full Alpine Linux VM on your phone with Linxr, and Linux containers you can ship without exposing your code with cryptship.</p>
<nav class="cat-switch" aria-label="Categories">
<a href="android.html" class="filter-chip">📱 Android</a>
<a href="linux.html" class="filter-chip is-active">🐧 Linux</a>
<a href="kubernetes.html" class="filter-chip">☸️ Kubernetes</a>
<a href="security.html" class="filter-chip">🔐 Security</a>
<a href="bible.html" class="filter-chip">📖 Bible</a>
</nav>
</div>
</div>
<section class="section section-tight">
<div class="section-inner">
<h2 class="section-title">Apps</h2>
<div class="cards product-grid">
<article class="card product-card" data-cats="android linux kubernetes">
<div class="card-header">
<img src="logo/linxr.svg" alt="" class="card-logo-img" />
<div>
<h3 class="card-name"><a href="linxr.html">Linxr</a></h3>
<span class="card-tag">Linux on Android</span>
</div>
</div>
<p class="card-desc">A full Alpine Linux workstation in one APK, no root. The home for every Linux-on-Android project: Pockr, Zyvr and Kubxr are merged in, and new ones land here too.</p>
<ul class="card-features">
<li>Containers (FastTrack OCI or Docker)</li>
<li>k3s Kubernetes and Asterisk PBX</li>
<li>Linux desktop GUI and SSH terminal</li>
<li>1-click Marketplace with community recipes</li>
</ul>
<div class="product-status">v3.4.0 · Google Play closed testing · APK on GitHub</div>
<div class="card-footer">
<a href="linxr.html" class="btn btn-sm">Details →</a>
<a href="https://github.com/AI2TH/Linxr" class="btn btn-sm btn-ghost" target="_blank" rel="noopener">GitHub</a>
</div>
</article>
<article class="card product-card" data-cats="linux kubernetes security">
<div class="card-header">
<img src="logo/cryptship.svg" alt="" class="card-logo-img" />
<div>
<h3 class="card-name"><a href="cryptship.html">cryptship</a></h3>
<span class="card-tag">Software delivery</span>
</div>
</div>
<p class="card-desc">Ship encrypted, license-gated application code inside Docker images. The image is ciphertext; a small loader runs your app only with a valid license.</p>
<ul class="card-features">
<li>AES-256-GCM payloads, Ed25519 licenses</li>
<li>Air-gapped, on-prem and cloud modes</li>
<li>Instant revocation via license server</li>
<li>Hardening and per-license watermarks</li>
</ul>
<div class="product-status">v0.1.0 · Go · GPLv3</div>
<div class="card-footer">
<a href="cryptship.html" class="btn btn-sm">Details →</a>
<a href="https://github.com/AI2TH/cryptship" class="btn btn-sm btn-ghost" target="_blank" rel="noopener">GitHub</a>
</div>
</article>
</div>
</div>
</section>
<!-- Linxr is the home for Linux on Android -->
<section class="section section-alt" id="linux-on-android">
<div class="section-inner merge-section">
<div class="merge-copy">
<h2 class="section-title">One home for Linux on Android</h2>
<p class="section-sub">
AI2TH started with separate apps, each with its own VM: Docker, a phone PBX, a Kubernetes node.
They now live in <strong>Linxr</strong> as Marketplace recipes and tabs, sharing one VM and one install.
Every future Linux-on-Android project lands in Linxr too.
</p>
<div class="project-links">
<a href="linxr.html" class="btn btn-primary">Explore Linxr →</a>
<a href="linxr.html#how-it-works" class="btn btn-ghost">How Linxr works</a>
</div>
</div>
<div class="merge-flow" role="img" aria-label="Pockr, Zyvr, Kubxr and future projects merge into Linxr; Vizxr manages Linxr's k3s">
<div class="merge-sources">
<a href="pockr.html" class="merge-chip"><span class="merge-chip-name">Pockr</span><span class="merge-chip-what">Docker</span></a>
<a href="zyvr.html" class="merge-chip"><span class="merge-chip-name">Zyvr</span><span class="merge-chip-what">Asterisk PBX</span></a>
<a href="https://github.com/AI2TH/Kubxr" class="merge-chip" target="_blank" rel="noopener"><span class="merge-chip-name">Kubxr</span><span class="merge-chip-what">k3s Kubernetes</span></a>
<div class="merge-chip merge-chip-next"><span class="merge-chip-name">Next</span><span class="merge-chip-what">future Linux projects</span></div>
</div>
<div class="merge-arrow" aria-hidden="true"></div>
<a href="linxr.html" class="merge-target">
<img src="logo/linxr.svg" alt="" />
<span class="merge-target-name">Linxr</span>
<span class="merge-target-what">one VM · one APK</span>
</a>
<a href="vizxr.html" class="merge-companion">
<img src="logo/vizxr.svg" alt="" />
<span><strong>Vizxr</strong> manages Linxr’s k3s on localhost:6443</span>
</a>
</div>
</div>
</section>
<section class="section" id="terminal">
<div class="section-inner">
<h2 class="section-title">A real Linux shell</h2>
<p class="section-sub">Inside Linxr on an ordinary arm64 phone.</p>
<div class="terminal-window page-terminal">
<div class="terminal-bar">
<span class="dot red"></span><span class="dot yellow"></span><span class="dot green"></span>
<span class="terminal-title">root@linxr:~</span>
</div>
<pre class="terminal-body"><span class="t-dim">#</span> <span class="t-cmd">uname -a</span>
Linux linxr 6.18.0-virt #1 SMP PREEMPT aarch64 Linux
<span class="t-dim">#</span> <span class="t-cmd">docker run hello-world</span>
Hello from Docker! This message shows that your installation
appears to be working correctly.
<span class="t-dim">#</span> <span class="t-cmd">k3s kubectl get nodes</span>
NAME STATUS ROLES AGE VERSION
linxr Ready control-plane,master 2m v1.30.4+k3s1
<span class="t-dim">#</span> <span class="t-cmd">asterisk -rx "pjsip show endpoints"</span>
Endpoint: 1001 Not in Use 0 of inf
Endpoint: 1002 Unavailable 0 of inf
Objects found: 2
<span class="t-dim">#</span> <span class="t-green">█</span></pre>
</div>
</div>
</section>
<!-- How it works -->
<section class="section section-alt" id="how-it-works">
<div class="section-inner">
<h2 class="section-title">How Linxr works</h2>
<p class="section-sub">Linxr carries a whole Linux virtual machine inside its APK: QEMU provides the VM, Alpine Linux the system, and the app the controls.</p>
<div class="arch-grid">
<div class="arch-layer">
<div class="arch-label">Flutter UI (Dart)</div>
<div class="arch-desc">Home, Terminal, Containers, Marketplace, Desktop, Files, Settings</div>
</div>
<div class="arch-arrow">↓</div>
<div class="arch-layer">
<div class="arch-label">Kotlin VmManager</div>
<div class="arch-desc">Starts libqemu.so and keeps it alive as a foreground service</div>
</div>
<div class="arch-arrow">↓</div>
<div class="arch-layer arch-layer-highlight">
<div class="arch-label">QEMU (libqemu.so)</div>
<div class="arch-desc">Shipped inside the APK; runs as a normal app process, no root</div>
</div>
<div class="arch-arrow">↓</div>
<div class="arch-layer">
<div class="arch-label">Alpine Linux VM</div>
<div class="arch-desc">Kernel 6.18-virt, OpenRC, SSH, apk; disk image grows on boot</div>
</div>
<div class="arch-arrow">↓</div>
<div class="arch-layer">
<div class="arch-label">Your workloads</div>
<div class="arch-desc">Containers · k3s · Asterisk PBX · Linux desktop · bash</div>
</div>
</div>
<div class="port-table-wrap">
<h3 class="sub-heading">Linxr port forwards</h3>
<table class="port-table">
<thead>
<tr><th>Port</th><th>Protocol</th><th>Service</th></tr>
</thead>
<tbody>
<tr><td>7080</td><td>TCP</td><td>Linxr control API</td></tr>
<tr><td>2222</td><td>TCP</td><td>OpenSSH (<code>ssh root@localhost -p 2222</code>)</td></tr>
<tr><td>6080 / 5900</td><td>TCP</td><td>noVNC web desktop / VNC server</td></tr>
<tr><td>11434</td><td>TCP</td><td>Ollama API</td></tr>
<tr><td>8088 → 80</td><td>TCP</td><td>Web server inside the VM</td></tr>
<tr><td>3000, 5000, 8000, 8080, 8443, 9000</td><td>TCP</td><td>Your web apps (open in Chrome on the phone)</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- Linxr requirements -->
<section class="section" id="requirements">
<div class="section-inner">
<h2 class="section-title">Linxr requirements</h2>
<div class="req-grid">
<div class="req-item">
<div class="req-icon">📱</div>
<div class="req-label">Android 8.0+</div>
<div class="req-detail">API level 26 or higher</div>
</div>
<div class="req-item">
<div class="req-icon">⚙️</div>
<div class="req-label">ARM64 only</div>
<div class="req-detail">arm64-v8a architecture required</div>
</div>
<div class="req-item">
<div class="req-icon">💾</div>
<div class="req-label">~250 MB + VM disk</div>
<div class="req-detail">APK, plus 8 GB or more for the VM disk</div>
</div>
<div class="req-item">
<div class="req-icon">🔓</div>
<div class="req-label">No root needed</div>
<div class="req-detail">QEMU runs as a normal app process</div>
</div>
</div>
</div>
</section>
<footer class="footer">
<div class="footer-inner">
<img src="logo/ai2th-mark.svg" alt="AI2TH" class="nav-logo-img footer-logo-img" />
<p class="footer-tagline">Applied Intelligence To Tackle Hardships.</p>
<div class="footer-links">
<a href="linxr.html">Linxr</a>
<a href="vizxr.html">Vizxr</a>
<a href="miktam.html">Miktam Bible</a>
<a href="cryptship.html">cryptship</a>
<a href="bible.html">Bible</a>
<a href="about.html">About</a>
<a href="contribute.html">Contribute</a>
<a href="privacy.html">Privacy</a>
<a href="https://github.com/AI2TH" target="_blank" rel="noopener">GitHub</a>
<a href="https://groups.google.com/g/ai2th" target="_blank" rel="noopener">Community</a>
</div>
</div>
</footer>
</body>
</html>