{"id":1358,"date":"2024-11-01T09:42:49","date_gmt":"2024-11-01T08:42:49","guid":{"rendered":"https:\/\/artheodoc.fr\/?page_id=1358"},"modified":"2024-11-02T17:42:28","modified_gmt":"2024-11-02T16:42:28","slug":"jellyfin","status":"publish","type":"page","link":"https:\/\/artheodoc.fr\/index.php\/jellyfin\/","title":{"rendered":"Jellyfin"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>Installation Jellyfin sous Debian 12<\/strong><\/h2>\n\n\n\n<p><em>Jellyfin est un logiciel de serveur multim\u00e9dia sous licence libre, con\u00e7u pour organiser, lire et partager des fichiers multim\u00e9dias num\u00e9riques sur des appareils en r\u00e9seau.<\/em><\/p>\n\n\n\n<p><em>Wikip\u00e9dia<\/em><\/p>\n\n\n\n<p>Source&nbsp;:<\/p>\n\n\n\n<p><a href=\"https:\/\/jellyfin.org\/docs\/general\/quick-start\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/jellyfin.org\/docs\/general\/quick-start<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>installation de la machine virtuelle sous Debian 12 pour Jellyfin<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pas d\u2019interface graphique<\/li>\n\n\n\n<li>Pas de serveur WEB<\/li>\n\n\n\n<li>Serveur <a href=\"https:\/\/artheodoc.fr\/index.php\/changer-le-port-pour-ssh\/\" data-type=\"page\" data-id=\"50\" target=\"_blank\" rel=\"noreferrer noopener\">SSH<\/a><\/li>\n<\/ul>\n\n\n\n<p>Cr\u00e9ation des dossiers pour les vid\u00e9os, les photos,etc.<\/p>\n\n\n\n<p>Droits sur les dossiers&nbsp;(en administrateur root <strong>su<\/strong> ) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>chmod -R 755 <em>\/chemin\/vers\/vos\/dossiers<\/em><\/strong><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>Installation automatique de Jellyfin avec un script BASH<\/strong><\/h2>\n\n\n\n<p><em>Pour simplifier le d\u00e9ploiement et aider \u00e0 l&rsquo;automatiser pour le plus grand nombre d&rsquo;utilisateurs possible, nous fournissons un script BASH pour g\u00e9rer l&rsquo;installation du r\u00e9f\u00e9rentiel ainsi que l&rsquo;installation de Jellyfin. Tout ce que vous avez \u00e0 faire est d&rsquo;ex\u00e9cuter cette commande sur votre syst\u00e8me (n\u00e9cessite curl ou un substitut)<\/em><\/p>\n\n\n\n<p>En administrateur root.<\/p>\n\n\n\n<p>Installez curl&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>apt install curl<\/strong><\/pre>\n\n\n\n<p><em>cURL est une interface en ligne de commande, destin\u00e9e \u00e0 r\u00e9cup\u00e9rer le contenu d&rsquo;une ressource accessible par un r\u00e9seau informatique. La ressource est d\u00e9sign\u00e9e \u00e0 l&rsquo;aide d&rsquo;une URL et doit \u00eatre d&rsquo;un type support\u00e9 par le logiciel.<\/em><\/p>\n\n\n\n<p><em>Wikip\u00e9dia<\/em><\/p>\n\n\n\n<p><br>T\u00e9l\u00e9chargement et ex\u00e9cution du script BASH d\u2019installation&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>curl https:\/\/repo.jellyfin.org\/install-debuntu.sh | bash<\/strong><\/pre>\n\n\n\n<p>L\u2019utilisateur jellyfin doit \u00eatre propri\u00e9taire des dossiers vid\u00e9os etc.&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>chown -R jellyfin:jellyfin <em>\/chemin\/vers\/vos\/dossiers<\/em><\/strong><\/pre>\n\n\n\n<p>Configuration de la box et du pare-feu si n\u00e9cessaire pour l\u2019acc\u00e8s avec le port 8096.<\/p>\n\n\n\n<p>Connexion au serveur depuis un navigateur WEB :<\/p>\n\n\n\n<p>http:\/\/<em>SERVER_IP<\/em>:8096<\/p>\n\n\n\n<p><br><em>Pour transf\u00e9rer vid\u00e9os et photos dans un dossier. J\u2019attribue les droits d\u2019acc\u00e8s \u00e0 mon utilisateur, je transf\u00e8re en sftp avec <a href=\"https:\/\/artheodoc.fr\/index.php\/utilisation-de-filezilla-depuis-le-reseau-local-ou-a-distance\/\" data-type=\"page\" data-id=\"58\" target=\"_blank\" rel=\"noreferrer noopener\">Filezilla<\/a> mes fichiers dans le dossier, j\u2019attribue ensuite ce dossier \u00e0 l\u2019utilisateur jellyfin.<\/em><br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>Le script BASH pour l&rsquo;installation de Jellyfin sous Debian<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env bash\n\nshopt -s extglob\n\n# Lists of supported architectures, Debian, and Ubuntu releases\nSUPPORTED_ARCHITECTURES='@(amd64|armhf|arm64)'\nSUPPORTED_DEBIAN_RELEASES='@(buster|bullseye|bookworm)'\nSUPPORTED_UBUNTU_RELEASES='@(bionic|cosmic|disco|eoan|focal|groovy|hirsute|impish|jammy|kinetic|lunar|mantic|noble)'\n\nSCRIPT_URL=\"https:\/\/repo.jellyfin.org\/install-debuntu.sh\"\nGPG_KEY_URL=\"https:\/\/repo.jellyfin.org\/jellyfin_team.gpg.key\"\nDOWNLOADS_URL=\"https:\/\/jellyfin.org\/downloads\/server\"\nCONTACT_URL=\"https:\/\/jellyfin.org\/contact\"\n\n# Fail out if we can't find \/etc\/apt or \/etc\/os-release\nif &#91;&#91; ! -d \/etc\/apt || ! -f \/etc\/os-release ]]; then\n    echo \"ERROR: Couldn't find the '\/etc\/apt' directory or '\/etc\/os-release' manifest.\"\n    echo \"This script is for Debian-based distributions using APT only. Please consider a Docker-based or manual install instead: ${DOWNLOADS_URL}\"\n    exit 1\nfi\n\n# Check that we're root; if not, fail out\nif &#91;&#91; $(whoami) != \"root\" ]]; then\n    echo \"ERROR: This script must be run as 'root' or with 'sudo' to function.\"\n    echo \"Try using this command instead: curl ${SCRIPT_URL} | sudo bash\"\n    exit 1\nfi\n\necho \"&gt; Determining optimal repository settings.\"\n\n# Get the (dpkg) architecture and base OS from \/etc\/os-release\nARCHITECTURE=\"$( dpkg --print-architecture )\"\nBASE_OS=\"$( awk -F'=' '\/^ID=\/{ print $NF }' \/etc\/os-release )\"\n\n# Validate that we're running on a supported (dpkg) architecture\n# shellcheck disable=SC2254\n# We cannot quote this extglob expansion or it doesn't work\ncase \"${ARCHITECTURE}\" in\n    ${SUPPORTED_ARCHITECTURES})\n        true\n    ;;\n    *)\n        echo \"ERROR: We don't support the CPU architecture '${ARCHITECTURE}' with this script.\"\n        echo \"Please consider a Docker-based or manual install instead: ${DOWNLOADS_URL}\"\n        exit 1\n    ;;\nesac\n\n# Handle some known alternative base OS values with 1-to-1 mappings\n# Use the result as our repository base OS\ncase \"${BASE_OS}\" in\n    raspbian)\n        # Raspbian uses our Debian repository\n        REPO_OS=\"debian\"\n        VERSION=\"$( awk -F'=' '\/^VERSION_CODENAME=\/{ print $NF }' \/etc\/os-release )\"\n    ;;\n    neon)\n        # Neon uses our Ubuntu repository\n        REPO_OS=\"ubuntu\"\n        VERSION=\"$( awk -F'=' '\/^VERSION_CODENAME=\/{ print $NF }' \/etc\/os-release )\"\n    ;;\n    *)\n        # Try to determine upstream info automatically (e.g. Linux Mint)\n        if grep -q \"DEBIAN_CODENAME=\" \/etc\/os-release &amp;&gt;\/dev\/null; then\n            REPO_OS=\"debian\"\n            VERSION=\"$( awk -F'=' '\/^DEBIAN_CODENAME=\/{ print $NF }' \/etc\/os-release )\"\n        elif grep -q \"UBUNTU_CODENAME=\" \/etc\/os-release &amp;&gt;\/dev\/null; then\n            REPO_OS=\"ubuntu\"\n            VERSION=\"$( awk -F'=' '\/^UBUNTU_CODENAME=\/{ print $NF }' \/etc\/os-release )\"\n        else\n            REPO_OS=\"${BASE_OS}\"\n            VERSION=\"$( awk -F'=' '\/^VERSION_CODENAME=\/{ print $NF }' \/etc\/os-release )\"\n        fi\n    ;;\nesac\n\n# Validate that we're running a supported release (variables at top of file)\ncase \"${REPO_OS}\" in\n    debian)\n        # shellcheck disable=SC2254\n        # We cannot quote this extglob expansion or it doesn't work\n        case \"${VERSION}\" in\n            ${SUPPORTED_DEBIAN_RELEASES})\n                true\n            ;;\n            *)\n                echo \"ERROR: We don't support the Debian codename '${VERSION}' with this script.\"\n                echo \"Note: We only support stable versions of Debian.\"\n                echo \"Please consider a Docker-based or manual install instead: ${DOWNLOADS_URL}\"\n                exit 1\n            ;;\n        esac\n    ;;\n    ubuntu)\n        # shellcheck disable=SC2254\n        # We cannot quote this extglob expansion or it doesn't work\n        case \"${VERSION}\" in\n            ${SUPPORTED_UBUNTU_RELEASES})\n                true\n            ;;\n            *)\n                echo \"ERROR: We don't support the Ubuntu codename '${VERSION}' with this script.\"\n                echo \"Note: We only support LTS versions of Ubuntu.\"\n                echo \"Please consider a Docker-based or manual install instead: ${DOWNLOADS_URL}\"\n                exit 1\n            ;;\n        esac\n    ;;\n    *)\n        YELLOW='\\033&#91;0;33m'\n        NC='\\033&#91;0m' # No Color\n        echo -e \"${YELLOW}WARNING${NC}: Autodetection of base OS and version failed.\"\n        echo -e \"To continue, please enter the following as 'Repo OS' and 'Repo Release', respectively::\"\n        echo -e \"  (1) The upsteam distribution of your current distro (either 'debian' or 'ubuntu').\"\n        echo -e \"  (2) The closest upstream release codename of your current distro ('bookworm', 'focal', etc.).\"\n        echo -e \"If you do not know, please consult your distribution's documentation, or try the latest Ubuntu LTS details.\"\n        echo\n        echo -en \"Repo OS: \"\n        read -r REPO_OS &lt; \/dev\/tty\n        echo -en \"Repo Release: \"\n        read -r VERSION &lt; \/dev\/tty\n    ;;\nesac\n\necho\necho -e \"Found the following details from '\/etc\/os-release':\"\necho -e \"  Real OS:            ${BASE_OS}\"\necho -e \"  Repository OS:      ${REPO_OS}\"\necho -e \"  Repository Release: ${VERSION}\"\necho -e \"  CPU Architecture:   ${ARCHITECTURE}\"\necho -en \"If this looks correct, press &lt;Enter&gt; now to continue installing Jellyfin. \"\n# Use &lt; \/dev\/tty construct to ensure we stop even in a curl|bash scenario\n# See https:\/\/stackoverflow.com\/a\/6562852\/5253131\n# shellcheck disable=SC2162\n# We are OK with this read stripping backslashes, as it is just a pause and is discarded\nread &lt; \/dev\/tty\n\necho\n\n# Get the paths to curl and wget\nCURL=$( which curl )\nWGET=$( which wget )\n\n# Create our array of to-be-installed packages\nINSTALL_PKGS=()\n\n# Pick our optimal fetching program (curl, then wget, then install curl)\nif &#91;&#91; -n ${CURL} ]]; then\n    FETCH=\"${CURL} -fsSL\"\nelif &#91;&#91; -n ${WGET} ]]; then\n    FETCH=\"${WGET} -O-\"\nelse\n    echo \"Failed to find a suitable download program. We're not sure how you dowloaded this script, but we'll install 'curl' automatically.\"\n    # shellcheck disable=SC2206\n    # We are OK with word-splitting here since we control the contents\n    INSTALL_PKGS=( ${INSTALL_PKGS&#91;@]} curl )\n    FETCH=\"${CURL} -fsSL\"\n    echo\nfi\n\n# Get the path to gpg or install it\nGNUPG=$( which gpg )\nif &#91;&#91; -z ${GNUPG} ]]; then\n    echo \"Failed to find the GNUPG binary, but we'll install 'gnupg' automatically.\"\n    # shellcheck disable=SC2206\n    # We are OK with word-splitting here since we control the contents\n    INSTALL_PKGS=( ${INSTALL_PKGS&#91;@]} gnupg )\n    echo\nfi\n\n# If we have at least 1 dependency package to install (either curl or gnupg), do so\nif &#91;&#91; ${#INSTALL_PKGS&#91;@]} -gt 0 ]]; then\n    echo \"&gt; Updating APT repositories.\"\n    apt update\n    echo\n    echo \"&gt; Installing required dependencies.\"\n    apt install --yes \"${INSTALL_PKGS&#91;@]}\"\n    echo\nfi\n\n# If the keyring directory is absent, create it\nif &#91;&#91; ! -d \/etc\/apt\/keyrings ]]; then\n    echo \"&gt; Creating APT keyring directory.\"\n    mkdir -p \/etc\/apt\/keyrings\n    echo\nfi\n\n# Download our repository signing key and install it to the keyring directory\necho \"&gt; Fetching repository signing key.\"\n$FETCH ${GPG_KEY_URL} | gpg --dearmor --yes --output \/etc\/apt\/keyrings\/jellyfin.gpg\n# shellcheck disable=SC2181\n# We don't want to explicitly include the command in the 'if' for readibility\nif &#91;&#91; $? -gt 0 ]]; then\n    echo \"ERROR: Failed to install key. Use ${CONTACT_URL} to find us for troubleshooting.\"\n    exit 1\nfi\necho\n\n# Check for and remove the obsoleted jellyfin.list configuration if present\nif &#91;&#91; -f \/etc\/apt\/sources.list.d\/jellyfin.list ]]; then\n    echo \"&gt; Found old-style '\/etc\/apt\/sources.list.d\/jellyfin.list' configuration; removing it.\"\n    rm -f \/etc\/apt\/sources.list.d\/jellyfin.list\n    echo\nfi\n\n# Install the Deb822 format jellyfin.sources entry\necho \"&gt; Installing Jellyfin repository into APT.\"\ncat &lt;&lt;EOF | tee \/etc\/apt\/sources.list.d\/jellyfin.sources\nTypes: deb\nURIs: https:\/\/repo.jellyfin.org\/${REPO_OS}\nSuites: ${VERSION}\nComponents: main\nArchitectures: ${ARCHITECTURE}\nSigned-By: \/etc\/apt\/keyrings\/jellyfin.gpg\nEOF\necho\n\n# Update the apt repositories to fetch the new Jellyfin repository\necho \"&gt; Updating APT repositories.\"\napt update\n# shellcheck disable=SC2181\n# We don't want to explicitly include the command in the 'if' for readibility\nif &#91;&#91; $? -gt 0 ]]; then\n    echo \"ERROR: Failed to update APT repositories. Something is wrong with your APT sources, GPG keys, or Internet connection. Try again shortly or use ${CONTACT_URL} to find us for troubleshooting.\"\n    exit 1\nfi\necho\n\n# Install Jellyfin using the metapackage (which will fetch jellyfin-server, jellyfin-web, and jellyfin-ffmpeg&#91;5]\necho \"&gt; Installing Jellyfin.\"\napt install --yes jellyfin\n# Works around https:\/\/github.com\/jellyfin\/jellyfin-packaging\/issues\/37 for now\nchown -R jellyfin:adm \/etc\/jellyfin\n# shellcheck disable=SC2181\n# We don't want to explicitly include the command in the 'if' for readibility\nif &#91;&#91; $? -gt 0 ]]; then\n    echo \"ERROR: Failed to install Jellyfin. Use ${CONTACT_URL} to find us for troubleshooting.\"\n    exit 1\nfi\necho\n\n# Wait for Jellyfin to actually start up, preempting quick users who might click the link below too quickly\necho \"&gt; Waiting 15 seconds for Jellyfin to fully start up.\"\nsleep 15\necho\n\n# Output the result of systemctl status (or service status for init.d\/upstart) to validate Jellyfin is running\necho \"-------------------------------------------------------------------------------\"\nexport SYSTEMD_PAGER=\nsystemctl status jellyfin.service || service jellyfin status\necho \"-------------------------------------------------------------------------------\"\necho\n\n# Determine the IP address of the interface which contains the default gateway\n# This is a relatively sure bet to be the IP address that Jellyfin can be accessed on, for later display\nGATEWAY_IFACE=\"$( ip route \\\n                  | grep '^default' \\\n                  | head -1 \\\n                  | grep -o 'dev &#91;a-z0-9]* ' \\\n                  | awk '{ print $NF }' )\"\nIP_ADDRESS=\"$( ip address show dev \"${GATEWAY_IFACE}\" \\\n               | grep -w \"inet .* ${GATEWAY_IFACE}$\" \\\n               | awk '{ print $2 }' \\\n               | awk -F '\/' '{ print $1 }' )\"\n\n# Output the explanation of the above output, next-step including link with IP address\/port, and welcome message\necho \"You should see the service as 'active (running)' above. If not, use ${CONTACT_URL} to find us for troubleshooting.\"\necho\necho \"You can access your new instance now at http:\/\/${IP_ADDRESS}:8096 in your web browser to finish setting up Jellyfin.\"\necho\necho \"Thank you for installing Jellyfin, and happy watching!\"\necho\n\n# Explicitly exit cleanly\nexit 0<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Installation Jellyfin sous Debian 12 Jellyfin est un logiciel de serveur multim\u00e9dia sous licence libre, con\u00e7u pour organiser, lire et partager des fichiers multim\u00e9dias num\u00e9riques sur des appareils en r\u00e9seau. Wikip\u00e9dia Source&nbsp;: https:\/\/jellyfin.org\/docs\/general\/quick-start installation de la machine virtuelle sous Debian 12 pour Jellyfin Cr\u00e9ation des dossiers pour les vid\u00e9os, les photos,etc. Droits sur les dossiers&nbsp;(en [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1358","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/pages\/1358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1358"}],"version-history":[{"count":5,"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/pages\/1358\/revisions"}],"predecessor-version":[{"id":1364,"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/pages\/1358\/revisions\/1364"}],"wp:attachment":[{"href":"https:\/\/artheodoc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}