Package Details: immich-cli 1.118.0-3

Git Clone URL: https://aur.archlinux.org/immich.git (read-only, click to copy)
Package Base: immich
Description: Self-hosted photos and videos backup tool
Upstream URL: https://github.com/immich-app/immich
Licenses: MIT
Submitter: wabi
Maintainer: wabi (pikl)
Last Packager: pikl
Votes: 10
Popularity: 1.60
First Submitted: 2022-12-30 11:41 (UTC)
Last Updated: 2024-10-15 21:23 (UTC)

Pinned Comments

pikl commented on 2024-08-05 09:52 (UTC)

From v1.111.0, this package does not build with nodejs < v20.

Latest Comments

« First ‹ Previous 1 2 3 4 5 6 7 8 Next › Last »

wabi commented on 2023-11-25 14:44 (UTC)

libvips requires additional optional packages to run for immich-microservices: poppler-glib openslide

wabi commented on 2023-11-19 18:28 (UTC)

@pikl: thank you for your participation. I've added you as co-maintainer. Currently I'm blocked from pushing updates as my personal gitlab server is down. Let's see with the big 1.88 update what changes.

pikl commented on 2023-11-19 16:49 (UTC)

I have a working PKGBUILD at latest version v1.87.0 and with all features working (typesense search, machine learning, etc), see here on github. Happy to be co-maintainer.

trainzkid commented on 2023-10-15 05:07 (UTC)

@wabi sorry for the massive delay!

I just tried to install this immich package into a systemd-nspawn container and didn't receive the poppler-glib related error. I'm going to guess it's a possible conflict on my server. I'll research further and get back to you when I've got more information.

I also see a lot of the changes you made, because setting immich up on this container was a thousand times easier this time than when I tried on my server before. Thanks for all your hard work!!!

hrdl commented on 2023-08-25 11:37 (UTC)

@wabi: thanks for packaging immich. chown requires the user to exist, which in general doesn't happen until installation -- hence my suggestion to use tmpfiles.d. I use something like this:

# PKGBUILD
package() {
...
install -Dm644 "${srcdir}/immich.sysusers" "${pkgdir}/usr/lib/sysusers.d/immich.conf"
install -Dm644 "${srcdir}/immich.tmpfiles" "${pkgdir}/usr/lib/tmpfiles.d/immich.conf"
...
install -d "${pkgdir}/var/lib/immich/upload" "${pkgdir}/var/lib/immich/app/server/.reverse-geocoding-dump"
}
# immich.tmpfiles
d /var/lib/immich 0700 immich immich -

wabi commented on 2023-08-25 08:19 (UTC)

@trainzkid: thanks for the suggestions. Incorporated some of them. The redis connection is configurable to either use sockets or a network connection in the immich.conf file. What I can't replicate is the use of poppler-glib. What tries to call these libraries on your system (they are not installed or used on mine).

hrdl commented on 2023-08-24 19:55 (UTC)

@trainzkid: nginx.immich.conf contains a configuration for nginx. For immich.tmpfiles I would use something like d /var/lib/immich 0700 immich immich -, possibly adjusting the mode bits to something less restrictive. I'd be happy to see a more elegant solution though.

trainzkid commented on 2023-08-24 19:37 (UTC) (edited on 2023-08-24 19:37 (UTC) by trainzkid)

@hrdl: is there documentation or a guide for either of those that I could reference? I've set up a reverse proxy before, but I'm not familiar with configuring it to strip a portion of the URL, and I've never explicitly configured tmpfiles.d.

I'm utilizing lighttpd as my web server if it helps!

I'm assuming tmpfiles.d allows a copy of a directory to be stored and accessed in /tmp/* with different permissions than the original.

hrdl commented on 2023-08-24 13:56 (UTC)

@trainzkid: immich is intended to be run behind a reverse proxy that strips the api/ component from the URL. The ownership for /var/lib/immich and its subdirectories can be fixed via tmpfiles.d.

trainzkid commented on 2023-07-25 06:08 (UTC) (edited on 2023-07-25 06:10 (UTC) by trainzkid)

Here's a collection of errors I came across while trying to set immich up, as well as the ways I resolved them. Some of these should probably be added/updated in this aur PKGBUILD. Some of these are just dumb mistakes on my part, but may help others running into them.

 node:fs:1396
   handleErrorFromBinding(ctx);
   ^
 Error: EACCES: permission denied, mkdir 'upload/library'
     at mkdirSync (node:fs:1396:3)
     at FilesystemProvider.mkdirSync (/var/lib/immich/app/server/dist/infra/repositories/filesystem.provider.js:72:32)
     at StorageService.init (/var/lib/immich/app/server/dist/domain/storage/storage.service.js:28:32)
     at AppService.init (/var/lib/immich/app/server/dist/immich/app.service.js:28:29)
     at bootstrap (/var/lib/immich/app/server/dist/immich/main.js:31:45)
     at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
   errno: -13,
   syscall: 'mkdir',
   code: 'EACCES',
   path: 'upload/library'
 }

/var/lib/immich/* needs proper permissions if services are ran as user immich; chmod --recursive immich:immich /var/lib/immich/ to fix.

/var/lib/immich/app/server/node_modules/@nestjs/config/dist/config.module.js:75
                 throw new Error(`Config validation error: ${error.message}`);
                 ^
 Error: Config validation error: "TYPESENSE_API_KEY" is not allowed to be empty
     at ConfigModule.forRoot (/var/lib/immich/app/server/node_modules/@nestjs/config/dist/config.module.js:75:23)
     at Object.<anonymous> (/var/lib/immich/app/server/dist/infra/infra.module.js:49:35)
     at Module._compile (node:internal/modules/cjs/loader:1254:14)
     at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
     at Module.load (node:internal/modules/cjs/loader:1117:32)
     at Module._load (node:internal/modules/cjs/loader:958:12)
     at Module.require (node:internal/modules/cjs/loader:1141:19)
     at require (node:internal/modules/cjs/helpers:110:18)
     at Object.<anonymous> (/var/lib/immich/app/server/dist/infra/index.js:19:14)
     at Module._compile (node:internal/modules/cjs/loader:1254:14)

Fix by commenting out TYPESENSE_API_KEY= in /etc/immich.conf.

unable to load "/usr/lib/vips-modules-8.14/vips-openslide.so" -- libopenslide.so.0: cannot open shared object file: No such file or directory
unable to load "/usr/lib/vips-modules-8.14/vips-poppler.so" -- libpoppler-glib.so.8: cannot open shared object file: No such file or directory

Fix by installing extra/poppler-glib.

 Error: connect ENOENT /run/redis/redis.sock
     at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) {
   errno: -2,
   code: 'ENOENT',
   syscall: 'connect',
   address: '/run/redis/redis.sock'
 }

Make sure to configure redis to provide a unix socket

Error: connect EACCES /run/redis/redis.sock
    at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) {
  errno: -13,
  code: 'EACCES',
  syscall: 'connect',
  address: '/run/redis/redis.sock'
}

Again, make sure to follow the redis guide on the arch wiki about providing a unix socket, specifically the socket's permissions; the immich user also needs to be added to the redis group

immich-microservices.service: Failed to set up mount namespacing: /run/systemd/unit-root/var/lib/immich/app/server/.reverse-geocoding-dump: No such file or directory
immich-microservices.service: Failed at step NAMESPACE spawning node: No such file or directory
immich-microservices.service: Main process exited, code=exited, status=226/NAMESPACE

mkdir /var/lib/immich/app/server/.reverse-geocoding-dump to fix.

I also noticed /var/lib/immich/app/server/upload/ is a symbolic link to /var/lib/immich/upload, which doesn't exist after install, so I mkdir'd it and chown'd it to immich:immich.

After fixing all these and starting all 3 services (immich-{server,web,microservices}), they run without errors and I get a first time login page at port 3000, but filling out all the fields and pressing 'sign up' does nothing. By using the browser's debugging, it looks like pressing 'sign up' sends a post req to port 3001, which is returning a 404 not found. Accessing immich-server and immich-microservices located on ports 3001 and 3002 respectively show json returning a 404 for 'Cannot GET /'. As of right now, this is as far as I've gotten. Any advice or feedback is welcomed! Let me know if these were obvious, or if there's some documentation I might have missed.