app_versions.json 78 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359
  1. {
  2. "1.3.12": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/stable/pihole/1.3.12",
  7. "last_update": "2025-09-02 11:33:24",
  8. "required_features": [],
  9. "human_version": "2025.08.0_1.3.12",
  10. "version": "1.3.12",
  11. "app_metadata": {
  12. "annotations": {
  13. "min_scale_version": "24.10.2.2"
  14. },
  15. "app_version": "2025.08.0",
  16. "capabilities": [
  17. {
  18. "description": "Pi-hole is able to change file ownership arbitrarily",
  19. "name": "CHOWN"
  20. },
  21. {
  22. "description": "Pi-hole is able to bypass file permission checks",
  23. "name": "DAC_OVERRIDE"
  24. },
  25. {
  26. "description": "Pi-hole is able to bypass permission checks for file operations",
  27. "name": "FOWNER"
  28. },
  29. {
  30. "description": "Pi-hole is able to send signals to any process",
  31. "name": "KILL"
  32. },
  33. {
  34. "description": "Pi-hole is able to perform network administration tasks",
  35. "name": "NET_ADMIN"
  36. },
  37. {
  38. "description": "Pi-hole is able to bind to privileged ports (< 1024)",
  39. "name": "NET_BIND_SERVICE"
  40. },
  41. {
  42. "description": "Pi-hole is able to use raw and packet sockets",
  43. "name": "NET_RAW"
  44. },
  45. {
  46. "description": "Pi-hole is able to set file capabilities on other files",
  47. "name": "SETFCAP"
  48. },
  49. {
  50. "description": "Pi-hole is able to change group ID of processes",
  51. "name": "SETGID"
  52. },
  53. {
  54. "description": "Pi-hole is able to transfer capabilities between processes",
  55. "name": "SETPCAP"
  56. },
  57. {
  58. "description": "Pi-hole is able to change user ID of processes",
  59. "name": "SETUID"
  60. },
  61. {
  62. "description": "Pi-hole is able to modify process scheduling priority",
  63. "name": "SYS_NICE"
  64. },
  65. {
  66. "description": "Pi-hole is able to set system clock and real-time clock",
  67. "name": "SYS_TIME"
  68. }
  69. ],
  70. "categories": [
  71. "networking"
  72. ],
  73. "changelog_url": "https://github.com/pi-hole/docker-pi-hole/releases",
  74. "date_added": "2024-07-30",
  75. "description": "DNS and Ad-filtering for your network.",
  76. "home": "https://pi-hole.net",
  77. "host_mounts": [],
  78. "icon": "https://media.sys.truenas.net/apps/pihole/icons/icon.png",
  79. "keywords": [
  80. "networking",
  81. "dns"
  82. ],
  83. "lib_version": "2.1.49",
  84. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  85. "maintainers": [
  86. {
  87. "email": "dev@ixsystems.com",
  88. "name": "truenas",
  89. "url": "https://www.truenas.com/"
  90. }
  91. ],
  92. "name": "pihole",
  93. "run_as_context": [
  94. {
  95. "description": "Pi-hole runs as root user.",
  96. "gid": 0,
  97. "group_name": "root",
  98. "uid": 0,
  99. "user_name": "root"
  100. }
  101. ],
  102. "screenshots": [
  103. "https://media.sys.truenas.net/apps/pihole/screenshots/screenshot1.png"
  104. ],
  105. "sources": [
  106. "https://pi-hole.net/",
  107. "https://github.com/pi-hole/docker-pi-hole"
  108. ],
  109. "title": "Pi-hole",
  110. "train": "stable",
  111. "version": "1.3.12"
  112. },
  113. "schema": {
  114. "groups": [
  115. {
  116. "name": "Pi-Hole Configuration",
  117. "description": "Configure Pi-Hole"
  118. },
  119. {
  120. "name": "User and Group Configuration",
  121. "description": "Configure User and Group for Pi-Hole"
  122. },
  123. {
  124. "name": "Network Configuration",
  125. "description": "Configure Network for Pi-Hole"
  126. },
  127. {
  128. "name": "Storage Configuration",
  129. "description": "Configure Storage for Pi-Hole"
  130. },
  131. {
  132. "name": "Labels Configuration",
  133. "description": "Configure Labels for Pi-Hole"
  134. },
  135. {
  136. "name": "Resources Configuration",
  137. "description": "Configure Resources for Pi-Hole"
  138. }
  139. ],
  140. "questions": [
  141. {
  142. "variable": "TZ",
  143. "group": "Pi-Hole Configuration",
  144. "label": "Timezone",
  145. "schema": {
  146. "type": "string",
  147. "default": "Etc/UTC",
  148. "required": true,
  149. "$ref": [
  150. "definitions/timezone"
  151. ]
  152. }
  153. },
  154. {
  155. "variable": "pihole",
  156. "label": "",
  157. "group": "Pi-Hole Configuration",
  158. "schema": {
  159. "type": "dict",
  160. "attrs": [
  161. {
  162. "variable": "web_password",
  163. "label": "Web Password",
  164. "description": "The password for Pi-Hole WebUI.",
  165. "schema": {
  166. "type": "string",
  167. "default": "",
  168. "private": true
  169. }
  170. },
  171. {
  172. "variable": "shm_size_mb",
  173. "label": "Shared Memory Size (in MiB)",
  174. "schema": {
  175. "type": "int",
  176. "default": 64,
  177. "min": 64,
  178. "max": 2048,
  179. "required": true
  180. }
  181. },
  182. {
  183. "variable": "additional_envs",
  184. "label": "Additional Environment Variables",
  185. "schema": {
  186. "type": "list",
  187. "default": [],
  188. "items": [
  189. {
  190. "variable": "env",
  191. "label": "Environment Variable",
  192. "schema": {
  193. "type": "dict",
  194. "attrs": [
  195. {
  196. "variable": "name",
  197. "label": "Name",
  198. "schema": {
  199. "type": "string",
  200. "required": true
  201. }
  202. },
  203. {
  204. "variable": "value",
  205. "label": "Value",
  206. "schema": {
  207. "type": "string"
  208. }
  209. }
  210. ]
  211. }
  212. }
  213. ]
  214. }
  215. }
  216. ]
  217. }
  218. },
  219. {
  220. "variable": "network",
  221. "label": "",
  222. "group": "Network Configuration",
  223. "schema": {
  224. "type": "dict",
  225. "attrs": [
  226. {
  227. "variable": "web_port",
  228. "label": "WebUI Port",
  229. "schema": {
  230. "type": "dict",
  231. "attrs": [
  232. {
  233. "variable": "bind_mode",
  234. "label": "Port Bind Mode",
  235. "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",
  236. "schema": {
  237. "type": "string",
  238. "default": "published",
  239. "enum": [
  240. {
  241. "value": "published",
  242. "description": "Publish port on the host for external access"
  243. },
  244. {
  245. "value": "exposed",
  246. "description": "Expose port for inter-container communication"
  247. },
  248. {
  249. "value": "",
  250. "description": "None"
  251. }
  252. ]
  253. }
  254. },
  255. {
  256. "variable": "port_number",
  257. "label": "Port Number",
  258. "schema": {
  259. "type": "int",
  260. "default": 20720,
  261. "min": 1,
  262. "max": 65535,
  263. "required": true
  264. }
  265. },
  266. {
  267. "variable": "host_ips",
  268. "label": "Host IPs",
  269. "description": "IPs on the host to bind this port",
  270. "schema": {
  271. "type": "list",
  272. "show_if": [
  273. [
  274. "bind_mode",
  275. "=",
  276. "published"
  277. ]
  278. ],
  279. "default": [],
  280. "items": [
  281. {
  282. "variable": "host_ip",
  283. "label": "Host IP",
  284. "schema": {
  285. "type": "string",
  286. "required": true,
  287. "$ref": [
  288. "definitions/node_bind_ip"
  289. ]
  290. }
  291. }
  292. ]
  293. }
  294. }
  295. ]
  296. }
  297. },
  298. {
  299. "variable": "https_port",
  300. "label": "HTTPS Port",
  301. "schema": {
  302. "type": "dict",
  303. "attrs": [
  304. {
  305. "variable": "bind_mode",
  306. "label": "Port Bind Mode",
  307. "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",
  308. "schema": {
  309. "type": "string",
  310. "default": "",
  311. "enum": [
  312. {
  313. "value": "published",
  314. "description": "Publish port on the host for external access"
  315. },
  316. {
  317. "value": "exposed",
  318. "description": "Expose port for inter-container communication"
  319. },
  320. {
  321. "value": "",
  322. "description": "None"
  323. }
  324. ]
  325. }
  326. },
  327. {
  328. "variable": "port_number",
  329. "label": "Port Number",
  330. "schema": {
  331. "type": "int",
  332. "default": 30132,
  333. "min": 1,
  334. "max": 65535,
  335. "required": true
  336. }
  337. },
  338. {
  339. "variable": "host_ips",
  340. "label": "Host IPs",
  341. "description": "IPs on the host to bind this port",
  342. "schema": {
  343. "type": "list",
  344. "show_if": [
  345. [
  346. "bind_mode",
  347. "=",
  348. "published"
  349. ]
  350. ],
  351. "default": [],
  352. "items": [
  353. {
  354. "variable": "host_ip",
  355. "label": "Host IP",
  356. "schema": {
  357. "type": "string",
  358. "required": true,
  359. "$ref": [
  360. "definitions/node_bind_ip"
  361. ]
  362. }
  363. }
  364. ]
  365. }
  366. }
  367. ]
  368. }
  369. },
  370. {
  371. "variable": "dns_port",
  372. "label": "DNS Port",
  373. "schema": {
  374. "type": "dict",
  375. "show_if": [
  376. [
  377. "host_network",
  378. "=",
  379. false
  380. ]
  381. ],
  382. "attrs": [
  383. {
  384. "variable": "bind_mode",
  385. "label": "Port Bind Mode",
  386. "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",
  387. "schema": {
  388. "type": "string",
  389. "default": "published",
  390. "enum": [
  391. {
  392. "value": "published",
  393. "description": "Publish port on the host for external access"
  394. },
  395. {
  396. "value": "exposed",
  397. "description": "Expose port for inter-container communication"
  398. },
  399. {
  400. "value": "",
  401. "description": "None"
  402. }
  403. ]
  404. }
  405. },
  406. {
  407. "variable": "port_number",
  408. "label": "Port Number",
  409. "schema": {
  410. "type": "int",
  411. "show_if": [
  412. [
  413. "bind_mode",
  414. "=",
  415. "published"
  416. ]
  417. ],
  418. "default": 53,
  419. "min": 1,
  420. "max": 65535,
  421. "required": true
  422. }
  423. },
  424. {
  425. "variable": "host_ips",
  426. "label": "Host IPs",
  427. "description": "IPs on the host to bind this port",
  428. "schema": {
  429. "type": "list",
  430. "show_if": [
  431. [
  432. "bind_mode",
  433. "=",
  434. "published"
  435. ]
  436. ],
  437. "default": [],
  438. "items": [
  439. {
  440. "variable": "host_ip",
  441. "label": "Host IP",
  442. "schema": {
  443. "type": "string",
  444. "required": true,
  445. "$ref": [
  446. "definitions/node_bind_ip"
  447. ]
  448. }
  449. }
  450. ]
  451. }
  452. }
  453. ]
  454. }
  455. },
  456. {
  457. "variable": "host_network",
  458. "label": "Host Network",
  459. "description": "Bind to the host network. It's recommended to keep this disabled.</br>\nOnly enable this if you are going to use DHCP.\n",
  460. "schema": {
  461. "type": "boolean",
  462. "default": false
  463. }
  464. },
  465. {
  466. "variable": "interface_name",
  467. "label": "Interface Name",
  468. "description": "The name of the physical interface to use for Pi-Hole.",
  469. "schema": {
  470. "type": "string",
  471. "show_if": [
  472. [
  473. "host_network",
  474. "=",
  475. true
  476. ]
  477. ],
  478. "default": ""
  479. }
  480. },
  481. {
  482. "variable": "dns_listening_mode",
  483. "label": "DNS Listening Mode",
  484. "description": "The DNS listening mode for Pi-Hole.",
  485. "schema": {
  486. "type": "string",
  487. "default": "single",
  488. "show_if": [
  489. [
  490. "host_network",
  491. "=",
  492. true
  493. ],
  494. [
  495. "interface_name",
  496. "!=",
  497. ""
  498. ]
  499. ],
  500. "required": true,
  501. "enum": [
  502. {
  503. "value": "single",
  504. "description": "Single"
  505. },
  506. {
  507. "value": "bind",
  508. "description": "Bind"
  509. },
  510. {
  511. "value": "all",
  512. "description": "All"
  513. }
  514. ]
  515. }
  516. },
  517. {
  518. "variable": "dhcp_config",
  519. "label": "DHCP Configuration",
  520. "description": "The configuration for DHCP.",
  521. "schema": {
  522. "type": "dict",
  523. "show_if": [
  524. [
  525. "host_network",
  526. "=",
  527. true
  528. ]
  529. ],
  530. "attrs": [
  531. {
  532. "variable": "dhcp_enabled",
  533. "label": "DHCP",
  534. "description": "Enable DHCP for Pi-Hole",
  535. "schema": {
  536. "type": "boolean",
  537. "default": false
  538. }
  539. },
  540. {
  541. "variable": "start",
  542. "label": "Start",
  543. "description": "The start IP for DHCP.",
  544. "schema": {
  545. "type": "ipaddr",
  546. "show_if": [
  547. [
  548. "dhcp_enabled",
  549. "=",
  550. true
  551. ]
  552. ],
  553. "cidr": false,
  554. "required": true,
  555. "default": ""
  556. }
  557. },
  558. {
  559. "variable": "end",
  560. "label": "End",
  561. "description": "The end IP for DHCP.",
  562. "schema": {
  563. "type": "ipaddr",
  564. "show_if": [
  565. [
  566. "dhcp_enabled",
  567. "=",
  568. true
  569. ]
  570. ],
  571. "cidr": false,
  572. "required": true,
  573. "default": ""
  574. }
  575. },
  576. {
  577. "variable": "gateway",
  578. "label": "Gateway",
  579. "description": "The gateway for DHCP.",
  580. "schema": {
  581. "type": "ipaddr",
  582. "show_if": [
  583. [
  584. "dhcp_enabled",
  585. "=",
  586. true
  587. ]
  588. ],
  589. "cidr": false,
  590. "required": true,
  591. "default": ""
  592. }
  593. }
  594. ]
  595. }
  596. },
  597. {
  598. "variable": "dns_opts",
  599. "label": "DNS Options",
  600. "description": "DNS options for the container.</br>\nFormat: key:value</br>\nExample: attempts:3\n",
  601. "schema": {
  602. "type": "list",
  603. "default": [],
  604. "items": [
  605. {
  606. "variable": "option",
  607. "label": "Option",
  608. "schema": {
  609. "type": "string",
  610. "required": true
  611. }
  612. }
  613. ]
  614. }
  615. }
  616. ]
  617. }
  618. },
  619. {
  620. "variable": "storage",
  621. "label": "",
  622. "group": "Storage Configuration",
  623. "schema": {
  624. "type": "dict",
  625. "attrs": [
  626. {
  627. "variable": "config",
  628. "label": "Pi-Hole Config Storage",
  629. "description": "The path to store Pi-Hole Config.",
  630. "schema": {
  631. "type": "dict",
  632. "attrs": [
  633. {
  634. "variable": "type",
  635. "label": "Type",
  636. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  637. "schema": {
  638. "type": "string",
  639. "required": true,
  640. "default": "ix_volume",
  641. "enum": [
  642. {
  643. "value": "host_path",
  644. "description": "Host Path (Path that already exists on the system)"
  645. },
  646. {
  647. "value": "ix_volume",
  648. "description": "ixVolume (Dataset created automatically by the system)"
  649. }
  650. ]
  651. }
  652. },
  653. {
  654. "variable": "ix_volume_config",
  655. "label": "ixVolume Configuration",
  656. "description": "The configuration for the ixVolume dataset.",
  657. "schema": {
  658. "type": "dict",
  659. "show_if": [
  660. [
  661. "type",
  662. "=",
  663. "ix_volume"
  664. ]
  665. ],
  666. "$ref": [
  667. "normalize/ix_volume"
  668. ],
  669. "attrs": [
  670. {
  671. "variable": "acl_enable",
  672. "label": "Enable ACL",
  673. "description": "Enable ACL for the storage.",
  674. "schema": {
  675. "type": "boolean",
  676. "default": false
  677. }
  678. },
  679. {
  680. "variable": "dataset_name",
  681. "label": "Dataset Name",
  682. "description": "The name of the dataset to use for storage.",
  683. "schema": {
  684. "type": "string",
  685. "required": true,
  686. "hidden": true,
  687. "default": "config"
  688. }
  689. },
  690. {
  691. "variable": "acl_entries",
  692. "label": "ACL Configuration",
  693. "schema": {
  694. "type": "dict",
  695. "show_if": [
  696. [
  697. "acl_enable",
  698. "=",
  699. true
  700. ]
  701. ],
  702. "attrs": []
  703. }
  704. }
  705. ]
  706. }
  707. },
  708. {
  709. "variable": "host_path_config",
  710. "label": "Host Path Configuration",
  711. "schema": {
  712. "type": "dict",
  713. "show_if": [
  714. [
  715. "type",
  716. "=",
  717. "host_path"
  718. ]
  719. ],
  720. "attrs": [
  721. {
  722. "variable": "acl_enable",
  723. "label": "Enable ACL",
  724. "description": "Enable ACL for the storage.",
  725. "schema": {
  726. "type": "boolean",
  727. "default": false
  728. }
  729. },
  730. {
  731. "variable": "acl",
  732. "label": "ACL Configuration",
  733. "schema": {
  734. "type": "dict",
  735. "show_if": [
  736. [
  737. "acl_enable",
  738. "=",
  739. true
  740. ]
  741. ],
  742. "attrs": [],
  743. "$ref": [
  744. "normalize/acl"
  745. ]
  746. }
  747. },
  748. {
  749. "variable": "path",
  750. "label": "Host Path",
  751. "description": "The host path to use for storage.",
  752. "schema": {
  753. "type": "hostpath",
  754. "show_if": [
  755. [
  756. "acl_enable",
  757. "=",
  758. false
  759. ]
  760. ],
  761. "required": true
  762. }
  763. }
  764. ]
  765. }
  766. }
  767. ]
  768. }
  769. },
  770. {
  771. "variable": "dnsmasq",
  772. "label": "Pi-Hole DNSMASQ Configuration",
  773. "description": "The path to store Pi-Hole DNSMASQ Config.",
  774. "schema": {
  775. "type": "dict",
  776. "attrs": [
  777. {
  778. "variable": "type",
  779. "label": "Type",
  780. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  781. "schema": {
  782. "type": "string",
  783. "required": true,
  784. "default": "ix_volume",
  785. "enum": [
  786. {
  787. "value": "host_path",
  788. "description": "Host Path (Path that already exists on the system)"
  789. },
  790. {
  791. "value": "ix_volume",
  792. "description": "ixVolume (Dataset created automatically by the system)"
  793. }
  794. ]
  795. }
  796. },
  797. {
  798. "variable": "ix_volume_config",
  799. "label": "ixVolume Configuration",
  800. "description": "The configuration for the ixVolume dataset.",
  801. "schema": {
  802. "type": "dict",
  803. "show_if": [
  804. [
  805. "type",
  806. "=",
  807. "ix_volume"
  808. ]
  809. ],
  810. "$ref": [
  811. "normalize/ix_volume"
  812. ],
  813. "attrs": [
  814. {
  815. "variable": "acl_enable",
  816. "label": "Enable ACL",
  817. "description": "Enable ACL for the storage.",
  818. "schema": {
  819. "type": "boolean",
  820. "default": false
  821. }
  822. },
  823. {
  824. "variable": "dataset_name",
  825. "label": "Dataset Name",
  826. "description": "The name of the dataset to use for storage.",
  827. "schema": {
  828. "type": "string",
  829. "required": true,
  830. "hidden": true,
  831. "default": "dnsmasq"
  832. }
  833. },
  834. {
  835. "variable": "acl_entries",
  836. "label": "ACL Configuration",
  837. "schema": {
  838. "type": "dict",
  839. "show_if": [
  840. [
  841. "acl_enable",
  842. "=",
  843. true
  844. ]
  845. ],
  846. "attrs": []
  847. }
  848. }
  849. ]
  850. }
  851. },
  852. {
  853. "variable": "host_path_config",
  854. "label": "Host Path Configuration",
  855. "schema": {
  856. "type": "dict",
  857. "show_if": [
  858. [
  859. "type",
  860. "=",
  861. "host_path"
  862. ]
  863. ],
  864. "attrs": [
  865. {
  866. "variable": "acl_enable",
  867. "label": "Enable ACL",
  868. "description": "Enable ACL for the storage.",
  869. "schema": {
  870. "type": "boolean",
  871. "default": false
  872. }
  873. },
  874. {
  875. "variable": "acl",
  876. "label": "ACL Configuration",
  877. "schema": {
  878. "type": "dict",
  879. "show_if": [
  880. [
  881. "acl_enable",
  882. "=",
  883. true
  884. ]
  885. ],
  886. "attrs": [],
  887. "$ref": [
  888. "normalize/acl"
  889. ]
  890. }
  891. },
  892. {
  893. "variable": "path",
  894. "label": "Host Path",
  895. "description": "The host path to use for storage.",
  896. "schema": {
  897. "type": "hostpath",
  898. "show_if": [
  899. [
  900. "acl_enable",
  901. "=",
  902. false
  903. ]
  904. ],
  905. "required": true
  906. }
  907. }
  908. ]
  909. }
  910. }
  911. ]
  912. }
  913. },
  914. {
  915. "variable": "additional_storage",
  916. "label": "Additional Storage",
  917. "schema": {
  918. "type": "list",
  919. "default": [],
  920. "items": [
  921. {
  922. "variable": "storageEntry",
  923. "label": "Storage Entry",
  924. "schema": {
  925. "type": "dict",
  926. "attrs": [
  927. {
  928. "variable": "type",
  929. "label": "Type",
  930. "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",
  931. "schema": {
  932. "type": "string",
  933. "required": true,
  934. "default": "ix_volume",
  935. "enum": [
  936. {
  937. "value": "host_path",
  938. "description": "Host Path (Path that already exists on the system)"
  939. },
  940. {
  941. "value": "ix_volume",
  942. "description": "ixVolume (Dataset created automatically by the system)"
  943. },
  944. {
  945. "value": "cifs",
  946. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  947. }
  948. ]
  949. }
  950. },
  951. {
  952. "variable": "read_only",
  953. "label": "Read Only",
  954. "description": "Mount the volume as read only.",
  955. "schema": {
  956. "type": "boolean",
  957. "default": false
  958. }
  959. },
  960. {
  961. "variable": "mount_path",
  962. "label": "Mount Path",
  963. "description": "The path inside the container to mount the storage.",
  964. "schema": {
  965. "type": "path",
  966. "required": true
  967. }
  968. },
  969. {
  970. "variable": "host_path_config",
  971. "label": "Host Path Configuration",
  972. "schema": {
  973. "type": "dict",
  974. "show_if": [
  975. [
  976. "type",
  977. "=",
  978. "host_path"
  979. ]
  980. ],
  981. "attrs": [
  982. {
  983. "variable": "acl_enable",
  984. "label": "Enable ACL",
  985. "description": "Enable ACL for the storage.",
  986. "schema": {
  987. "type": "boolean",
  988. "default": false
  989. }
  990. },
  991. {
  992. "variable": "acl",
  993. "label": "ACL Configuration",
  994. "schema": {
  995. "type": "dict",
  996. "show_if": [
  997. [
  998. "acl_enable",
  999. "=",
  1000. true
  1001. ]
  1002. ],
  1003. "attrs": [],
  1004. "$ref": [
  1005. "normalize/acl"
  1006. ]
  1007. }
  1008. },
  1009. {
  1010. "variable": "path",
  1011. "label": "Host Path",
  1012. "description": "The host path to use for storage.",
  1013. "schema": {
  1014. "type": "hostpath",
  1015. "show_if": [
  1016. [
  1017. "acl_enable",
  1018. "=",
  1019. false
  1020. ]
  1021. ],
  1022. "required": true
  1023. }
  1024. }
  1025. ]
  1026. }
  1027. },
  1028. {
  1029. "variable": "ix_volume_config",
  1030. "label": "ixVolume Configuration",
  1031. "description": "The configuration for the ixVolume dataset.",
  1032. "schema": {
  1033. "type": "dict",
  1034. "show_if": [
  1035. [
  1036. "type",
  1037. "=",
  1038. "ix_volume"
  1039. ]
  1040. ],
  1041. "$ref": [
  1042. "normalize/ix_volume"
  1043. ],
  1044. "attrs": [
  1045. {
  1046. "variable": "acl_enable",
  1047. "label": "Enable ACL",
  1048. "description": "Enable ACL for the storage.",
  1049. "schema": {
  1050. "type": "boolean",
  1051. "default": false
  1052. }
  1053. },
  1054. {
  1055. "variable": "dataset_name",
  1056. "label": "Dataset Name",
  1057. "description": "The name of the dataset to use for storage.",
  1058. "schema": {
  1059. "type": "string",
  1060. "required": true,
  1061. "default": "storage_entry"
  1062. }
  1063. },
  1064. {
  1065. "variable": "acl_entries",
  1066. "label": "ACL Configuration",
  1067. "schema": {
  1068. "type": "dict",
  1069. "show_if": [
  1070. [
  1071. "acl_enable",
  1072. "=",
  1073. true
  1074. ]
  1075. ],
  1076. "attrs": []
  1077. }
  1078. }
  1079. ]
  1080. }
  1081. },
  1082. {
  1083. "variable": "cifs_config",
  1084. "label": "SMB Configuration",
  1085. "description": "The configuration for the SMB dataset.",
  1086. "schema": {
  1087. "type": "dict",
  1088. "show_if": [
  1089. [
  1090. "type",
  1091. "=",
  1092. "cifs"
  1093. ]
  1094. ],
  1095. "attrs": [
  1096. {
  1097. "variable": "server",
  1098. "label": "Server",
  1099. "description": "The server to mount the SMB share.",
  1100. "schema": {
  1101. "type": "string",
  1102. "required": true
  1103. }
  1104. },
  1105. {
  1106. "variable": "path",
  1107. "label": "Path",
  1108. "description": "The path to mount the SMB share.",
  1109. "schema": {
  1110. "type": "string",
  1111. "required": true
  1112. }
  1113. },
  1114. {
  1115. "variable": "username",
  1116. "label": "Username",
  1117. "description": "The username to use for the SMB share.",
  1118. "schema": {
  1119. "type": "string",
  1120. "required": true
  1121. }
  1122. },
  1123. {
  1124. "variable": "password",
  1125. "label": "Password",
  1126. "description": "The password to use for the SMB share.",
  1127. "schema": {
  1128. "type": "string",
  1129. "required": true,
  1130. "private": true
  1131. }
  1132. },
  1133. {
  1134. "variable": "domain",
  1135. "label": "Domain",
  1136. "description": "The domain to use for the SMB share.",
  1137. "schema": {
  1138. "type": "string"
  1139. }
  1140. }
  1141. ]
  1142. }
  1143. }
  1144. ]
  1145. }
  1146. }
  1147. ]
  1148. }
  1149. }
  1150. ]
  1151. }
  1152. },
  1153. {
  1154. "variable": "labels",
  1155. "label": "",
  1156. "group": "Labels Configuration",
  1157. "schema": {
  1158. "type": "list",
  1159. "default": [],
  1160. "items": [
  1161. {
  1162. "variable": "label",
  1163. "label": "Label",
  1164. "schema": {
  1165. "type": "dict",
  1166. "attrs": [
  1167. {
  1168. "variable": "key",
  1169. "label": "Key",
  1170. "schema": {
  1171. "type": "string",
  1172. "required": true
  1173. }
  1174. },
  1175. {
  1176. "variable": "value",
  1177. "label": "Value",
  1178. "schema": {
  1179. "type": "string",
  1180. "required": true
  1181. }
  1182. },
  1183. {
  1184. "variable": "containers",
  1185. "label": "Containers",
  1186. "description": "Containers where the label should be applied",
  1187. "schema": {
  1188. "type": "list",
  1189. "items": [
  1190. {
  1191. "variable": "container",
  1192. "label": "Container",
  1193. "schema": {
  1194. "type": "string",
  1195. "required": true,
  1196. "enum": [
  1197. {
  1198. "value": "pihole",
  1199. "description": "pihole"
  1200. }
  1201. ]
  1202. }
  1203. }
  1204. ]
  1205. }
  1206. }
  1207. ]
  1208. }
  1209. }
  1210. ]
  1211. }
  1212. },
  1213. {
  1214. "variable": "resources",
  1215. "label": "",
  1216. "group": "Resources Configuration",
  1217. "schema": {
  1218. "type": "dict",
  1219. "attrs": [
  1220. {
  1221. "variable": "limits",
  1222. "label": "Limits",
  1223. "schema": {
  1224. "type": "dict",
  1225. "attrs": [
  1226. {
  1227. "variable": "cpus",
  1228. "label": "CPUs",
  1229. "description": "CPUs limit for Pihole.",
  1230. "schema": {
  1231. "type": "int",
  1232. "default": 2,
  1233. "required": true
  1234. }
  1235. },
  1236. {
  1237. "variable": "memory",
  1238. "label": "Memory (in MB)",
  1239. "description": "Memory limit for Pihole.",
  1240. "schema": {
  1241. "type": "int",
  1242. "default": 4096,
  1243. "required": true
  1244. }
  1245. }
  1246. ]
  1247. }
  1248. }
  1249. ]
  1250. }
  1251. }
  1252. ]
  1253. },
  1254. "readme": "<h1>Pi-hole</h1> <p><a href=\"https://pi-hole.net/\">Pi-hole</a> is a black hole for Internet advertisements</p>",
  1255. "changelog": null,
  1256. "chart_metadata": {
  1257. "annotations": {
  1258. "min_scale_version": "24.10.2.2"
  1259. },
  1260. "app_version": "2025.08.0",
  1261. "capabilities": [
  1262. {
  1263. "description": "Pi-hole is able to change file ownership arbitrarily",
  1264. "name": "CHOWN"
  1265. },
  1266. {
  1267. "description": "Pi-hole is able to bypass file permission checks",
  1268. "name": "DAC_OVERRIDE"
  1269. },
  1270. {
  1271. "description": "Pi-hole is able to bypass permission checks for file operations",
  1272. "name": "FOWNER"
  1273. },
  1274. {
  1275. "description": "Pi-hole is able to send signals to any process",
  1276. "name": "KILL"
  1277. },
  1278. {
  1279. "description": "Pi-hole is able to perform network administration tasks",
  1280. "name": "NET_ADMIN"
  1281. },
  1282. {
  1283. "description": "Pi-hole is able to bind to privileged ports (< 1024)",
  1284. "name": "NET_BIND_SERVICE"
  1285. },
  1286. {
  1287. "description": "Pi-hole is able to use raw and packet sockets",
  1288. "name": "NET_RAW"
  1289. },
  1290. {
  1291. "description": "Pi-hole is able to set file capabilities on other files",
  1292. "name": "SETFCAP"
  1293. },
  1294. {
  1295. "description": "Pi-hole is able to change group ID of processes",
  1296. "name": "SETGID"
  1297. },
  1298. {
  1299. "description": "Pi-hole is able to transfer capabilities between processes",
  1300. "name": "SETPCAP"
  1301. },
  1302. {
  1303. "description": "Pi-hole is able to change user ID of processes",
  1304. "name": "SETUID"
  1305. },
  1306. {
  1307. "description": "Pi-hole is able to modify process scheduling priority",
  1308. "name": "SYS_NICE"
  1309. },
  1310. {
  1311. "description": "Pi-hole is able to set system clock and real-time clock",
  1312. "name": "SYS_TIME"
  1313. }
  1314. ],
  1315. "categories": [
  1316. "networking"
  1317. ],
  1318. "changelog_url": "https://github.com/pi-hole/docker-pi-hole/releases",
  1319. "date_added": "2024-07-30",
  1320. "description": "DNS and Ad-filtering for your network.",
  1321. "home": "https://pi-hole.net",
  1322. "host_mounts": [],
  1323. "icon": "https://media.sys.truenas.net/apps/pihole/icons/icon.png",
  1324. "keywords": [
  1325. "networking",
  1326. "dns"
  1327. ],
  1328. "lib_version": "2.1.49",
  1329. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  1330. "maintainers": [
  1331. {
  1332. "email": "dev@ixsystems.com",
  1333. "name": "truenas",
  1334. "url": "https://www.truenas.com/"
  1335. }
  1336. ],
  1337. "name": "pihole",
  1338. "run_as_context": [
  1339. {
  1340. "description": "Pi-hole runs as root user.",
  1341. "gid": 0,
  1342. "group_name": "root",
  1343. "uid": 0,
  1344. "user_name": "root"
  1345. }
  1346. ],
  1347. "screenshots": [
  1348. "https://media.sys.truenas.net/apps/pihole/screenshots/screenshot1.png"
  1349. ],
  1350. "sources": [
  1351. "https://pi-hole.net/",
  1352. "https://github.com/pi-hole/docker-pi-hole"
  1353. ],
  1354. "title": "Pi-hole",
  1355. "train": "stable",
  1356. "version": "1.3.12"
  1357. }
  1358. }
  1359. }