Skip Navigation
Lemmy Support @lemmy.ml

Install Lemmy from Scratch docs seem broken

join-lemmy.org

Install from Scratch - Lemmy Documentation

I'm trying this on Ubuntu 22.04 Rust's cargo install seems to keep creating permission problems between what I have to install, compile and what gets published in the cargo "registry", which causes issues at runtime when I run as lemmy:lemmy through systemctl.

If I run: cargo install lemmy_server --target-dir /usr/bin/ --locked --features embed-pictrs as a non-root user, I get permission denied issues with /usr/bin/.future-incompat-report.json and /usr/bin/release

If I run the build as a root user, and then manually copy the binaries to /usr/bin and chmod them to lemmy:lemmy, then try to run as lemmy:lemmy, it appears the binary is trying to access some "registry" files in /root/.cargo/registry (for which of course it does not have permissions.)

How do I fix this?

36 comments
  • I've seen guys here making PR's to docs and install scripts, hope someone gonna do the same after finding solution for your question.

    • Thanks.

      So if I go on a mad chmod spree, making /usr/bin/lemmy_server and all of its dependencies readable/executable (which is super insecure) I finally get to this log message in journalctl:

       
          
      Jun 07 13:50:57 ip-172-31-4-153 lemmy_server[3868]: thread 'main' panicked at 'C
      ouldn't run DB Migrations', /home/ubuntu/.cargo/registry/src/index.crates.io-6f1
      7d22bba15001f/lemmy_db_schema-0.17.3/src/utils.rs:165:25
      
        

      Which is this code:

       
          
      pub fn run_migrations(db_url: &str) {
        // Needs to be a sync connection
        let mut conn =
          PgConnection::establish(db_url).unwrap_or_else(|_| panic!("Error connecting to {db_url}"));
        info!("Running Database migrations (This may take a long time)...");
        let _ = &mut conn
          .run_pending_migrations(MIGRATIONS)
          .unwrap_or_else(|_| panic!("Couldn't run DB Migrations"));
        info!("Database migrations complete.");
      }
      
        

      Hope that helps someone figure this out.

      I'm pretty unhappy that I can't get this to work.

  • I'll try and make one on Void, see how it goes.

  • Here's how I do it. Might be worth giving it a shot. This is on FreeBSD, but I doubt that matters.

     
        
    git clone https://github.com/LemmyNet/lemmy.git lemmy
    cd lemmy
    git checkout 0.17.3
    git submodule init
    git submodule update --recursive --remote
    echo "pub const VERSION: &str = \"$(git describe --tag)\";" > "crates/utils/src/version.rs"
    cargo build --release
    strip target/release/lemmy_server
    
    
      

    Then copy target/release/lemmy_server to wherever you want to run it.

    • Thanks. On cargo build --release I get this

       
          
      ...
         Compiling strum_macros v0.24.3
         Compiling deadpool v0.9.5
         Compiling tokio-postgres v0.7.8
         Compiling enum_delegate v0.2.0
         Compiling doku v0.20.0
         Compiling jsonwebtoken v8.3.0
      error: failed to run custom build command for `lemmy_utils v0.17.3 (/home/ubuntu/git-clones/lemmy/crates/utils)`
      
      Caused by:
        process didn't exit successfully: `/home/ubuntu/git-clones/lemmy/target/release/build/lemmy_utils-6fa456450f9c975a/build-script-build` (exit status: 1)
        --- stdout
        cargo:rerun-if-changed=translations/email/en.json
        cargo:rerun-if-changed=translations/email/ko.json
        cargo:rerun-if-changed=translations/email/pt.json
      
        --- stderr
        Error: Parse(InvalidParameters { key: "new_application_subject", missing: ["hostname"], unknown: ["instance"] })
      warning: build failed, waiting for other jobs to finish...
      ubuntu@xxx:~/git-clones/lemmy$ 
      
      
        
      • I was able to follow these build from git checkout instructions on Ubuntu 22.04, I didn't get the error you got.

        What version of rust/cargo are you using? cargo --version I get:
        cargo 1.70.0 (ec8a8a0ca 2023-04-25)

  • ... Build as non-root, install as root? AUR PKGBUILD just werks. All the functions in here are run as non-root though, the package() function installs to a fake directory tree, and then pacman, run as root, copies that into real tree. It works out to be one file total. Not sure why cargo install wants to put some other garbage in.

    • Oh and warning to anyone who wants to use that AUR package: You'll need to fix pkgver and _commit before running it. Actually fixing pkgver may not be necessary. But yeah, grab the commit hash for 0.17.3 tag.

36 comments