app_versions.json 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. {
  2. "1.2.5": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/tftpd-hpa/1.2.5",
  7. "last_update": "2025-09-02 11:33:24",
  8. "required_features": [],
  9. "human_version": "1.0.0_1.2.5",
  10. "version": "1.2.5",
  11. "app_metadata": {
  12. "annotations": {
  13. "min_scale_version": "24.10.2.2"
  14. },
  15. "app_version": "1.0.0",
  16. "capabilities": [
  17. {
  18. "description": "Tftpd is able to bind to privileged ports (< 1024)",
  19. "name": "NET_BIND_SERVICE"
  20. },
  21. {
  22. "description": "Tftpd is able to change group ID of processes",
  23. "name": "SETGID"
  24. },
  25. {
  26. "description": "Tftpd is able to change user ID of processes",
  27. "name": "SETUID"
  28. },
  29. {
  30. "description": "Tftpd is able to use chroot() system call",
  31. "name": "SYS_CHROOT"
  32. }
  33. ],
  34. "categories": [
  35. "networking"
  36. ],
  37. "date_added": "2024-08-27",
  38. "description": "A lightweight tftp-server",
  39. "home": "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
  40. "host_mounts": [],
  41. "icon": "https://media.sys.truenas.net/apps/tftpd-hpa/icons/icon.png",
  42. "keywords": [
  43. "tftp",
  44. "netboot"
  45. ],
  46. "lib_version": "2.1.49",
  47. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  48. "maintainers": [
  49. {
  50. "email": "dev@ixsystems.com",
  51. "name": "truenas",
  52. "url": "https://www.truenas.com/"
  53. }
  54. ],
  55. "name": "tftpd-hpa",
  56. "run_as_context": [
  57. {
  58. "description": "TFTP requires root privileges to start it's processes.",
  59. "gid": 0,
  60. "group_name": "root",
  61. "uid": 0,
  62. "user_name": "root"
  63. }
  64. ],
  65. "screenshots": [],
  66. "sources": [
  67. "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
  68. "https://hub.docker.com/r/ixsystems/tftpd-hpa"
  69. ],
  70. "title": "TFTP Server",
  71. "train": "community",
  72. "version": "1.2.5"
  73. },
  74. "schema": {
  75. "groups": [
  76. {
  77. "name": "TFTPD Configuration",
  78. "description": "Configure TFTPD"
  79. },
  80. {
  81. "name": "Network Configuration",
  82. "description": "Configure Network for TFTPD"
  83. },
  84. {
  85. "name": "Storage Configuration",
  86. "description": "Configure Storage for TFTPD"
  87. },
  88. {
  89. "name": "Labels Configuration",
  90. "description": "Configure Labels for TFTPD"
  91. },
  92. {
  93. "name": "Resources Configuration",
  94. "description": "Configure Resources for TFTPD"
  95. }
  96. ],
  97. "questions": [
  98. {
  99. "variable": "TZ",
  100. "label": "Timezone",
  101. "group": "TFTPD Configuration",
  102. "schema": {
  103. "type": "string",
  104. "default": "Etc/UTC",
  105. "required": true,
  106. "$ref": [
  107. "definitions/timezone"
  108. ]
  109. }
  110. },
  111. {
  112. "variable": "tftpd",
  113. "label": "",
  114. "group": "TFTPD Configuration",
  115. "schema": {
  116. "type": "dict",
  117. "attrs": [
  118. {
  119. "variable": "allow_create",
  120. "label": "Allow Create",
  121. "description": "Allow creation of files.",
  122. "schema": {
  123. "type": "boolean",
  124. "default": false
  125. }
  126. },
  127. {
  128. "variable": "additional_envs",
  129. "label": "Additional Environment Variables",
  130. "schema": {
  131. "type": "list",
  132. "default": [],
  133. "items": [
  134. {
  135. "variable": "env",
  136. "label": "Environment Variable",
  137. "schema": {
  138. "type": "dict",
  139. "attrs": [
  140. {
  141. "variable": "name",
  142. "label": "Name",
  143. "schema": {
  144. "type": "string",
  145. "required": true
  146. }
  147. },
  148. {
  149. "variable": "value",
  150. "label": "Value",
  151. "schema": {
  152. "type": "string"
  153. }
  154. }
  155. ]
  156. }
  157. }
  158. ]
  159. }
  160. }
  161. ]
  162. }
  163. },
  164. {
  165. "variable": "network",
  166. "label": "",
  167. "group": "Network Configuration",
  168. "schema": {
  169. "type": "dict",
  170. "attrs": [
  171. {
  172. "variable": "tftp_port",
  173. "label": "TFTP Port",
  174. "schema": {
  175. "type": "dict",
  176. "show_if": [
  177. [
  178. "host_network",
  179. "=",
  180. false
  181. ]
  182. ],
  183. "attrs": [
  184. {
  185. "variable": "bind_mode",
  186. "label": "Port Bind Mode",
  187. "description": "The port bind mode.</br>\n- Publish: The port will be published on the host for external access.</br>\n- Expose: The port will be exposed for inter-container communication.</br>\n- None: The port will not be exposed or published.</br>\nNote: If the Dockerfile defines an EXPOSE directive,\nthe port will still be exposed for inter-container communication regardless of this setting.\n",
  188. "schema": {
  189. "type": "string",
  190. "default": "published",
  191. "enum": [
  192. {
  193. "value": "published",
  194. "description": "Publish port on the host for external access"
  195. },
  196. {
  197. "value": "exposed",
  198. "description": "Expose port for inter-container communication"
  199. },
  200. {
  201. "value": "",
  202. "description": "None"
  203. }
  204. ]
  205. }
  206. },
  207. {
  208. "variable": "port_number",
  209. "label": "Port Number",
  210. "schema": {
  211. "type": "int",
  212. "show_if": [
  213. [
  214. "bind_mode",
  215. "=",
  216. "published"
  217. ]
  218. ],
  219. "default": 30031,
  220. "min": 1,
  221. "max": 65535,
  222. "required": true
  223. }
  224. },
  225. {
  226. "variable": "host_ips",
  227. "label": "Host IPs",
  228. "description": "IPs on the host to bind this port",
  229. "schema": {
  230. "type": "list",
  231. "show_if": [
  232. [
  233. "bind_mode",
  234. "=",
  235. "published"
  236. ]
  237. ],
  238. "default": [],
  239. "items": [
  240. {
  241. "variable": "host_ip",
  242. "label": "Host IP",
  243. "schema": {
  244. "type": "string",
  245. "required": true,
  246. "$ref": [
  247. "definitions/node_bind_ip"
  248. ]
  249. }
  250. }
  251. ]
  252. }
  253. }
  254. ]
  255. }
  256. },
  257. {
  258. "variable": "host_network",
  259. "label": "Host Network",
  260. "description": "Bind to the host network. It's recommended to keep this disabled.\n",
  261. "schema": {
  262. "type": "boolean",
  263. "default": true
  264. }
  265. }
  266. ]
  267. }
  268. },
  269. {
  270. "variable": "storage",
  271. "label": "",
  272. "group": "Storage Configuration",
  273. "schema": {
  274. "type": "dict",
  275. "attrs": [
  276. {
  277. "variable": "tftpboot",
  278. "label": "TFTPD tftpboot Storage",
  279. "description": "The path to store TFTPD tftpboot.",
  280. "schema": {
  281. "type": "dict",
  282. "attrs": [
  283. {
  284. "variable": "type",
  285. "label": "Type",
  286. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  287. "schema": {
  288. "type": "string",
  289. "required": true,
  290. "default": "ix_volume",
  291. "enum": [
  292. {
  293. "value": "host_path",
  294. "description": "Host Path (Path that already exists on the system)"
  295. },
  296. {
  297. "value": "ix_volume",
  298. "description": "ixVolume (Dataset created automatically by the system)"
  299. }
  300. ]
  301. }
  302. },
  303. {
  304. "variable": "ix_volume_config",
  305. "label": "ixVolume Configuration",
  306. "description": "The configuration for the ixVolume dataset.",
  307. "schema": {
  308. "type": "dict",
  309. "show_if": [
  310. [
  311. "type",
  312. "=",
  313. "ix_volume"
  314. ]
  315. ],
  316. "$ref": [
  317. "normalize/ix_volume"
  318. ],
  319. "attrs": [
  320. {
  321. "variable": "acl_enable",
  322. "label": "Enable ACL",
  323. "description": "Enable ACL for the storage.",
  324. "schema": {
  325. "type": "boolean",
  326. "default": false
  327. }
  328. },
  329. {
  330. "variable": "dataset_name",
  331. "label": "Dataset Name",
  332. "description": "The name of the dataset to use for storage.",
  333. "schema": {
  334. "type": "string",
  335. "required": true,
  336. "hidden": true,
  337. "default": "tftpboot"
  338. }
  339. },
  340. {
  341. "variable": "acl_entries",
  342. "label": "ACL Configuration",
  343. "schema": {
  344. "type": "dict",
  345. "show_if": [
  346. [
  347. "acl_enable",
  348. "=",
  349. true
  350. ]
  351. ],
  352. "attrs": []
  353. }
  354. }
  355. ]
  356. }
  357. },
  358. {
  359. "variable": "host_path_config",
  360. "label": "Host Path Configuration",
  361. "schema": {
  362. "type": "dict",
  363. "show_if": [
  364. [
  365. "type",
  366. "=",
  367. "host_path"
  368. ]
  369. ],
  370. "attrs": [
  371. {
  372. "variable": "acl_enable",
  373. "label": "Enable ACL",
  374. "description": "Enable ACL for the storage.",
  375. "schema": {
  376. "type": "boolean",
  377. "default": false
  378. }
  379. },
  380. {
  381. "variable": "acl",
  382. "label": "ACL Configuration",
  383. "schema": {
  384. "type": "dict",
  385. "show_if": [
  386. [
  387. "acl_enable",
  388. "=",
  389. true
  390. ]
  391. ],
  392. "attrs": [],
  393. "$ref": [
  394. "normalize/acl"
  395. ]
  396. }
  397. },
  398. {
  399. "variable": "path",
  400. "label": "Host Path",
  401. "description": "The host path to use for storage.",
  402. "schema": {
  403. "type": "hostpath",
  404. "show_if": [
  405. [
  406. "acl_enable",
  407. "=",
  408. false
  409. ]
  410. ],
  411. "required": true
  412. }
  413. }
  414. ]
  415. }
  416. }
  417. ]
  418. }
  419. },
  420. {
  421. "variable": "additional_storage",
  422. "label": "Additional Storage",
  423. "schema": {
  424. "type": "list",
  425. "default": [],
  426. "items": [
  427. {
  428. "variable": "storageEntry",
  429. "label": "Storage Entry",
  430. "schema": {
  431. "type": "dict",
  432. "attrs": [
  433. {
  434. "variable": "type",
  435. "label": "Type",
  436. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to as a volume.\n",
  437. "schema": {
  438. "type": "string",
  439. "required": true,
  440. "default": "ix_volume",
  441. "enum": [
  442. {
  443. "value": "host_path",
  444. "description": "Host Path (Path that already exists on the system)"
  445. },
  446. {
  447. "value": "ix_volume",
  448. "description": "ixVolume (Dataset created automatically by the system)"
  449. },
  450. {
  451. "value": "cifs",
  452. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  453. }
  454. ]
  455. }
  456. },
  457. {
  458. "variable": "read_only",
  459. "label": "Read Only",
  460. "description": "Mount the volume as read only.",
  461. "schema": {
  462. "type": "boolean",
  463. "default": false
  464. }
  465. },
  466. {
  467. "variable": "mount_path",
  468. "label": "Mount Path",
  469. "description": "The path inside the container to mount the storage.",
  470. "schema": {
  471. "type": "path",
  472. "required": true
  473. }
  474. },
  475. {
  476. "variable": "host_path_config",
  477. "label": "Host Path Configuration",
  478. "schema": {
  479. "type": "dict",
  480. "show_if": [
  481. [
  482. "type",
  483. "=",
  484. "host_path"
  485. ]
  486. ],
  487. "attrs": [
  488. {
  489. "variable": "acl_enable",
  490. "label": "Enable ACL",
  491. "description": "Enable ACL for the storage.",
  492. "schema": {
  493. "type": "boolean",
  494. "default": false
  495. }
  496. },
  497. {
  498. "variable": "acl",
  499. "label": "ACL Configuration",
  500. "schema": {
  501. "type": "dict",
  502. "show_if": [
  503. [
  504. "acl_enable",
  505. "=",
  506. true
  507. ]
  508. ],
  509. "attrs": [],
  510. "$ref": [
  511. "normalize/acl"
  512. ]
  513. }
  514. },
  515. {
  516. "variable": "path",
  517. "label": "Host Path",
  518. "description": "The host path to use for storage.",
  519. "schema": {
  520. "type": "hostpath",
  521. "show_if": [
  522. [
  523. "acl_enable",
  524. "=",
  525. false
  526. ]
  527. ],
  528. "required": true
  529. }
  530. }
  531. ]
  532. }
  533. },
  534. {
  535. "variable": "ix_volume_config",
  536. "label": "ixVolume Configuration",
  537. "description": "The configuration for the ixVolume dataset.",
  538. "schema": {
  539. "type": "dict",
  540. "show_if": [
  541. [
  542. "type",
  543. "=",
  544. "ix_volume"
  545. ]
  546. ],
  547. "$ref": [
  548. "normalize/ix_volume"
  549. ],
  550. "attrs": [
  551. {
  552. "variable": "acl_enable",
  553. "label": "Enable ACL",
  554. "description": "Enable ACL for the storage.",
  555. "schema": {
  556. "type": "boolean",
  557. "default": false
  558. }
  559. },
  560. {
  561. "variable": "dataset_name",
  562. "label": "Dataset Name",
  563. "description": "The name of the dataset to use for storage.",
  564. "schema": {
  565. "type": "string",
  566. "required": true,
  567. "default": "storage_entry"
  568. }
  569. },
  570. {
  571. "variable": "acl_entries",
  572. "label": "ACL Configuration",
  573. "schema": {
  574. "type": "dict",
  575. "show_if": [
  576. [
  577. "acl_enable",
  578. "=",
  579. true
  580. ]
  581. ],
  582. "attrs": []
  583. }
  584. }
  585. ]
  586. }
  587. },
  588. {
  589. "variable": "cifs_config",
  590. "label": "SMB Configuration",
  591. "description": "The configuration for the SMB dataset.",
  592. "schema": {
  593. "type": "dict",
  594. "show_if": [
  595. [
  596. "type",
  597. "=",
  598. "cifs"
  599. ]
  600. ],
  601. "attrs": [
  602. {
  603. "variable": "server",
  604. "label": "Server",
  605. "description": "The server to mount the SMB share.",
  606. "schema": {
  607. "type": "string",
  608. "required": true
  609. }
  610. },
  611. {
  612. "variable": "path",
  613. "label": "Path",
  614. "description": "The path to mount the SMB share.",
  615. "schema": {
  616. "type": "string",
  617. "required": true
  618. }
  619. },
  620. {
  621. "variable": "username",
  622. "label": "Username",
  623. "description": "The username to use for the SMB share.",
  624. "schema": {
  625. "type": "string",
  626. "required": true
  627. }
  628. },
  629. {
  630. "variable": "password",
  631. "label": "Password",
  632. "description": "The password to use for the SMB share.",
  633. "schema": {
  634. "type": "string",
  635. "required": true,
  636. "private": true
  637. }
  638. },
  639. {
  640. "variable": "domain",
  641. "label": "Domain",
  642. "description": "The domain to use for the SMB share.",
  643. "schema": {
  644. "type": "string"
  645. }
  646. }
  647. ]
  648. }
  649. }
  650. ]
  651. }
  652. }
  653. ]
  654. }
  655. }
  656. ]
  657. }
  658. },
  659. {
  660. "variable": "labels",
  661. "label": "",
  662. "group": "Labels Configuration",
  663. "schema": {
  664. "type": "list",
  665. "default": [],
  666. "items": [
  667. {
  668. "variable": "label",
  669. "label": "Label",
  670. "schema": {
  671. "type": "dict",
  672. "attrs": [
  673. {
  674. "variable": "key",
  675. "label": "Key",
  676. "schema": {
  677. "type": "string",
  678. "required": true
  679. }
  680. },
  681. {
  682. "variable": "value",
  683. "label": "Value",
  684. "schema": {
  685. "type": "string",
  686. "required": true
  687. }
  688. },
  689. {
  690. "variable": "containers",
  691. "label": "Containers",
  692. "description": "Containers where the label should be applied",
  693. "schema": {
  694. "type": "list",
  695. "items": [
  696. {
  697. "variable": "container",
  698. "label": "Container",
  699. "schema": {
  700. "type": "string",
  701. "required": true,
  702. "enum": [
  703. {
  704. "value": "tftpd",
  705. "description": "tftpd"
  706. }
  707. ]
  708. }
  709. }
  710. ]
  711. }
  712. }
  713. ]
  714. }
  715. }
  716. ]
  717. }
  718. },
  719. {
  720. "variable": "resources",
  721. "label": "",
  722. "group": "Resources Configuration",
  723. "schema": {
  724. "type": "dict",
  725. "attrs": [
  726. {
  727. "variable": "limits",
  728. "label": "Limits",
  729. "schema": {
  730. "type": "dict",
  731. "attrs": [
  732. {
  733. "variable": "cpus",
  734. "label": "CPUs",
  735. "description": "CPUs limit for TFTPD.",
  736. "schema": {
  737. "type": "int",
  738. "default": 2,
  739. "required": true
  740. }
  741. },
  742. {
  743. "variable": "memory",
  744. "label": "Memory (in MB)",
  745. "description": "Memory limit for TFTPD.",
  746. "schema": {
  747. "type": "int",
  748. "default": 4096,
  749. "required": true
  750. }
  751. }
  752. ]
  753. }
  754. }
  755. ]
  756. }
  757. }
  758. ]
  759. },
  760. "readme": "<h1>TFTP</h1> <p><a href=\"https://manpages.debian.org/testing/tftpd-hpa/tftpd.8.en.html\">TFTP</a> is a server for the Trivial File Transfer Protocol.</p> <p>The app runs as <code>root</code> user and drops privileges to <code>tftp</code> (9069) user for the TFTP service.</p>",
  761. "changelog": null,
  762. "chart_metadata": {
  763. "annotations": {
  764. "min_scale_version": "24.10.2.2"
  765. },
  766. "app_version": "1.0.0",
  767. "capabilities": [
  768. {
  769. "description": "Tftpd is able to bind to privileged ports (< 1024)",
  770. "name": "NET_BIND_SERVICE"
  771. },
  772. {
  773. "description": "Tftpd is able to change group ID of processes",
  774. "name": "SETGID"
  775. },
  776. {
  777. "description": "Tftpd is able to change user ID of processes",
  778. "name": "SETUID"
  779. },
  780. {
  781. "description": "Tftpd is able to use chroot() system call",
  782. "name": "SYS_CHROOT"
  783. }
  784. ],
  785. "categories": [
  786. "networking"
  787. ],
  788. "date_added": "2024-08-27",
  789. "description": "A lightweight tftp-server",
  790. "home": "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
  791. "host_mounts": [],
  792. "icon": "https://media.sys.truenas.net/apps/tftpd-hpa/icons/icon.png",
  793. "keywords": [
  794. "tftp",
  795. "netboot"
  796. ],
  797. "lib_version": "2.1.49",
  798. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  799. "maintainers": [
  800. {
  801. "email": "dev@ixsystems.com",
  802. "name": "truenas",
  803. "url": "https://www.truenas.com/"
  804. }
  805. ],
  806. "name": "tftpd-hpa",
  807. "run_as_context": [
  808. {
  809. "description": "TFTP requires root privileges to start it's processes.",
  810. "gid": 0,
  811. "group_name": "root",
  812. "uid": 0,
  813. "user_name": "root"
  814. }
  815. ],
  816. "screenshots": [],
  817. "sources": [
  818. "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
  819. "https://hub.docker.com/r/ixsystems/tftpd-hpa"
  820. ],
  821. "title": "TFTP Server",
  822. "train": "community",
  823. "version": "1.2.5"
  824. }
  825. }
  826. }