Skip to content

Commit

Permalink
Fix disk setup and documentation for Turnkey VMs (#141)
Browse files Browse the repository at this point in the history
  • Loading branch information
havardthom authored Nov 8, 2024
1 parent 4c46e94 commit 957f7e8
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 44 deletions.
16 changes: 8 additions & 8 deletions frontend/src/app/scripts/_components/ScriptAccordion.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,22 @@ export default function ScriptAccordion({
undefined,
);
const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({});

const handleAccordionChange = (value: string | undefined) => {
setExpandedItem(value);
};

const handleSelected = useCallback(
(title: string) => {
setSelectedScript(title);
(slug: string) => {
setSelectedScript(slug);
},
[setSelectedScript],
);

useEffect(() => {
if (selectedScript) {
const category = items.find((category) =>
category.scripts.some((script) => script.name === selectedScript),
category.scripts.some((script) => script.slug === selectedScript),
);
if (category) {
setExpandedItem(category.name);
Expand Down Expand Up @@ -89,17 +89,17 @@ export default function ScriptAccordion({
<Link
href={{
pathname: "/scripts",
query: { id: script.name },
query: { id: script.slug },
}}
prefetch={false}
className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${
selectedScript === script.name
selectedScript === script.slug
? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white"
: ""
}`}
onClick={() => handleSelected(script.name)}
onClick={() => handleSelected(script.slug)}
ref={(el) => {
linkRefs.current[script.name] = el;
linkRefs.current[script.slug] = el;
}}
>
<div className="flex items-center">
Expand Down
8 changes: 4 additions & 4 deletions frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
<div className="min-w flex w-full flex-row flex-wrap gap-4">
{latestScripts.slice(startIndex, endIndex).map((script) => (
<Card
key={script.name}
key={script.slug}
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
>
<CardHeader>
Expand Down Expand Up @@ -121,7 +121,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
<Link
href={{
pathname: "/scripts",
query: { id: script.name },
query: { id: script.slug },
}}
>
View Script
Expand Down Expand Up @@ -153,7 +153,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
<div className="min-w flex w-full flex-row flex-wrap gap-4">
{mostViewedScripts.map((script) => (
<Card
key={script.name}
key={script.slug}
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
>
<CardHeader>
Expand Down Expand Up @@ -189,7 +189,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
<Link
href={{
pathname: "/scripts",
query: { id: script.name },
query: { id: script.slug },
}}
prefetch={false}
>
Expand Down
10 changes: 5 additions & 5 deletions frontend/src/app/scripts/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
export const dynamic = "force-static";

import ScriptItem from "@/app/scripts/_components/ScriptItem";
import { fetchCategories } from "@/lib/data";
import { Category, Script } from "@/lib/types";
import { Loader2 } from "lucide-react";
import { Suspense, useEffect, useState } from "react";
import Sidebar from "./_components/Sidebar";
import { useQueryState } from "nuqs";
import { Suspense, useEffect, useState } from "react";
import {
LatestScripts,
MostViewedScripts,
} from "./_components/ScriptInfoBlocks";
import { fetchCategories } from "@/lib/data";
import Sidebar from "./_components/Sidebar";

function ScriptContent() {
const [selectedScript, setSelectedScript] = useQueryState("id");
Expand All @@ -24,7 +24,7 @@ function ScriptContent() {
const script = links
.map((category) => category.scripts)
.flat()
.find((script) => script.name === selectedScript);
.find((script) => script.slug === selectedScript);
setItem(script);
}
}, [selectedScript, links]);
Expand Down Expand Up @@ -76,4 +76,4 @@ export default function Page() {
<ScriptContent />
</Suspense>
);
}
}
6 changes: 3 additions & 3 deletions frontend/src/components/CommandMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ export default function CommandMenu() {
>
{category.scripts.map((script) => (
<CommandItem
key={`script:${script.name}`}
value={script.name}
key={`script:${script.slug}`}
value={script.slug}
onSelect={() => {
setOpen(false);
router.push(`/scripts?id=${script.name}`);
router.push(`/scripts?id=${script.slug}`);
}}
>
<div className="flex gap-2" onClick={() => setOpen(false)}>
Expand Down
2 changes: 1 addition & 1 deletion json/jellyfin.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"documentation": null,
"website": null,
"logo": "https://github.com/home-assistant/brands/blob/master/core_integrations/jellyfin/icon.png?raw=true",
"description": null,
"description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.",
"install_methods": [
{
"type": "default",
Expand Down
34 changes: 34 additions & 0 deletions json/nextcloud-vm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "Nextcloud",
"slug": "nextcloud-vm",
"categories": [
12
],
"date_created": "2023-11-14",
"type": "vm",
"updateable": false,
"privileged": false,
"interface_port": "80",
"documentation": null,
"website": "https://www.turnkeylinux.org/nextcloud",
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/nextcloud.svg",
"description": "TurnKey Nextcloud is an open-source file sharing server and collaboration platform that can store your personal content, like documents and pictures, in a centralized location.",
"install_methods": [
{
"type": "default",
"script": "vm/nextcloud-vm.sh",
"resources": {
"cpu": "2",
"ram": "2048",
"hdd": "12G",
"os": "debian",
"version": 12
}
}
],
"default_credentials": {
"username": "admin",
"password": null
},
"notes": []
}
6 changes: 3 additions & 3 deletions json/owncloud-vm.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@
"cpu": "2",
"ram": "2048",
"hdd": "12G",
"os": null,
"version": null
"os": "debian",
"version": 12
}
}
],
"default_credentials": {
"username": null,
"username": "admin",
"password": null
},
"notes": []
Expand Down
12 changes: 7 additions & 5 deletions vm/nextcloud-vm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ BFR="\\r\\033[K"
HOLD="-"
CM="${GN}${CL}"
CROSS="${RD}${CL}"
THIN="discard=on,ssd=1,"
THIN="discard=on,ssd=1"
set -e
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
trap cleanup EXIT
Expand Down Expand Up @@ -207,7 +207,7 @@ function advanced_settings() {
exit-script
fi

if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 $HN --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 turnkey-nextcloud-vm --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z $VM_NAME ]; then
HN="$HN"
echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
Expand Down Expand Up @@ -393,7 +393,7 @@ btrfs)
THIN=""
;;
esac
for i in {0,1}; do
for i in {0,1,2}; do
disk="DISK$i"
eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
Expand All @@ -403,11 +403,13 @@ msg_info "Creating a $NAME"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios seabios${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
pvesm alloc $STORAGE $VMID $DISK1 12G 1>&/dev/null
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
qm set $VMID \
-efidisk0 ${DISK0_REF}${FORMAT} \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \
-boot order=scsi0 \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \
-scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \
-boot order='scsi1;scsi0' \
-description "<div align='center'><a href='https://Helper-Scripts.com'><img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png'/></a>
# $NAME
Expand Down
32 changes: 17 additions & 15 deletions vm/owncloud-vm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ header_info
echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)

NAME="TurnKey ownCloud VM"
YW=$(echo "\033[33m")
BL=$(echo "\033[36m")
HA=$(echo "\033[1;34m")
Expand All @@ -32,7 +32,7 @@ BFR="\\r\\033[K"
HOLD="-"
CM="${GN}${CL}"
CROSS="${RD}${CL}"
THIN="discard=on,ssd=1,"
THIN="discard=on,ssd=1"
set -e
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
trap cleanup EXIT
Expand All @@ -59,7 +59,7 @@ function cleanup() {

TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "TurnKey-ownCloud VM" --yesno "This will create a New TurnKey-ownCloud VM. Proceed?" 10 58; then
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "$NAME" --yesno "This will create a New $NAME. Proceed?" 10 58; then
:
else
header_info && echo -e "⚠ User exited script \n" && exit
Expand Down Expand Up @@ -154,7 +154,7 @@ function default_settings() {
echo -e "${DGN}Using VLAN: ${BGN}Default${CL}"
echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
echo -e "${BL}Creating a TurnKey ownCloud VM using the above default settings${CL}"
echo -e "${BL}Creating a $NAME using the above default settings${CL}"
}

function advanced_settings() {
Expand Down Expand Up @@ -313,8 +313,8 @@ function advanced_settings() {
START_VM="no"
fi

if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a TurnKey ownCloud VM?" --no-button Do-Over 10 58); then
echo -e "${RD}Creating a TurnKey ownCloud VM using the above advanced settings${CL}"
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a $NAME?" --no-button Do-Over 10 58); then
echo -e "${RD}Creating a $NAME using the above advanced settings${CL}"
else
header_info
echo -e "${RD}Using Advanced Settings${CL}"
Expand Down Expand Up @@ -368,7 +368,7 @@ else
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
msg_info "Retrieving the URL for the TurnKey ownCloud ISO Disk Image"
msg_info "Retrieving the URL for the $NAME Disk Image"
URL=http://mirror.turnkeylinux.org/turnkeylinux/images/iso/turnkey-owncloud-18.0-bookworm-amd64.iso
sleep 2
msg_ok "${CL}${BL}${URL}${CL}"
Expand All @@ -393,31 +393,33 @@ btrfs)
THIN=""
;;
esac
for i in {0,1}; do
for i in {0,1,2}; do
disk="DISK$i"
eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
done

msg_info "Creating a TurnKey ownCloud VM"
msg_info "Creating a $NAME"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios seabios${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
pvesm alloc $STORAGE $VMID $DISK1 12G 1>&/dev/null
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
qm set $VMID \
-efidisk0 ${DISK0_REF}${FORMAT} \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \
-boot order=scsi0 \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \
-scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \
-boot order='scsi1;scsi0' \
-description "<div align='center'><a href='https://Helper-Scripts.com'><img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png'/></a>
# TurnKey ownCloud VM
# $NAME
<a href='https://ko-fi.com/D1D7EP4GF'><img src='https://img.shields.io/badge/&#x2615;-Buy me a coffee-blue' /></a>
</div>" >/dev/null
msg_ok "Created a TurnKey ownCloud VM ${CL}${BL}(${HN})"
msg_ok "Created a $NAME ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
msg_info "Starting TurnKey ownCloud VM"
msg_info "Starting $NAME"
qm start $VMID
msg_ok "Started TurnKey ownCloud VM"
msg_ok "Started $NAME"
fi
msg_ok "Completed Successfully!\n"

0 comments on commit 957f7e8

Please sign in to comment.