this post was submitted on 07 Jun 2023
2 points (100.0% liked)

Lemmy Support

4651 readers
4 users here now

Support / questions about Lemmy.

Matrix Space: #lemmy-space

founded 5 years ago
MODERATORS
 

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?

top 14 comments
sorted by: hot top controversial new old

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.

[–] derek@lemmy.one 1 points 1 year ago (1 children)

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.

[–] KIM_JONG_JUICEBOX@lemmy.ml 0 points 1 year ago (1 children)

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.

[–] RoundSparrow@lemmy.ml 0 points 1 year ago (1 children)

I am stuck at this same point!

We need some help here....

[–] KIM_JONG_JUICEBOX@lemmy.ml 1 points 1 year ago* (last edited 1 year ago) (1 children)

So I am able to build from the git repo.

Had to remove rust from apt (v 1.65)

And install rust from rustup (v 1.70)

That fixes the build, but now I still get this db migrations error on startup.

Jun 09 15:47:37 ip-x systemd[1]: Started Lemmy - A link aggregator for the fediverse.
Jun 09 15:47:37 ip-x lemmy_server[15239]: 2023-06-09T15:47:37.238544Z  INFO lemmy_db_schema::utils: Running Database migrations (This may take a long time)...
Jun 09 15:47:37 ip-x lemmy_server[15239]: thread 'main' panicked at 'Couldn't run DB Migrations', crates/db_schema/src/utils.rs:165:25
Jun 09 15:47:37 ip-x lemmy_server[15239]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Jun 09 15:47:37 ip-x systemd[1]: lemmy.service: Main process exited, code=exited, status=101/n/a

I know it can connect to the db because I see it created some tables already.

I wonder if this is related to this warning regarding schema, which I see during the build.

warning: /root/git-clones/lemmy/crates/api_common/Cargo.toml: `default-features` is ignored for lemmy_db_schema, since `default-features` was not specified for `workspace.dependencies.lemmy_db_schema`, this could become a hard error in the future
[–] RoundSparrow@lemmy.ml 2 points 1 year ago* (last edited 1 year ago) (1 children)

> thread 'main' panicked at 'Couldn't run DB Migrations', crates/db_schema/src/utils.rs:165:25

I fixed this by issuing:

sudo -iu postgres psql -c “ALTER USER lemmy WITH SUPERUSER;”

Obviously this has database security implications, but at least it identified that was why DB Migrations is failing.

EDIT: I found the developers of Lemmy seem to have identified the cause for this, it's just a couple SQL statements: https://github.com/LemmyNet/lemmy/pull/2983/commits/29c4144e61e97e895fb7eb37d2c257c8520fd6a6

EDIT 2: The developers are currently treating this as a documentation bug: https://github.com/LemmyNet/lemmy-docs/issues/201

[–] KIM_JONG_JUICEBOX@lemmy.ml 2 points 1 year ago (2 children)

Thank you!

So the git based build instructions from @Grouchy@lemmy.grouchysysadmin.com works.

What was missing for me was then the rust version and the full list of sql commands.

1. Rust version

Remove rust installed from Ubuntu apt repo (v 1.65)
Install rust from rustup (v 1.70)

2. Postgres commands

sudo -iu postgres psql -c "CREATE USER lemmy WITH PASSWORD 'db-passwd';"
sudo -iu postgres psql -c "CREATE DATABASE lemmy WITH OWNER lemmy;"
sudo -iu postgres psql -c "ALTER USER lemmy WITH SUPERUSER;"


[–] RoundSparrow@lemmy.ml 2 points 1 year ago (1 children)

The lemmy-ui steps, the next part - are pretty outdated. It has instructions to install NodeJS 12.x, which is really far back. I have no idea which version the Docker install is using...

The latest version of Node is 20

[–] KIM_JONG_JUICEBOX@lemmy.ml 2 points 1 year ago* (last edited 1 year ago) (1 children)

Before I even get there, the instructions say I should be able to run

curl localhost:8536/api/{version}/site

And it should return some json structure.

But I see this returning 404

lemmy_server[41511]: 2023-06-09T17:02:35.296098Z  INFO actix_web::middleware::logger: 127.0.0.1 "GET /api/0.17.3/site HTTP/1.1" 404 0 "-" "curl/7.81.0" 0.000074

Is that the correct way to specify the version?

Is there a better log than journalctl which would actually tell me what REST endpoints it is using?

[–] RoundSparrow@lemmy.ml 2 points 1 year ago (1 children)

Is that the correct was to specify the version?

No, I had to dig around too, the correct command is:

curl localhost:8536/api/v3/site

[–] KIM_JONG_JUICEBOX@lemmy.ml 1 points 1 year ago (2 children)

Thank you, again!

How was I to know {version} in the REST endpoint path was supposed to be "v3"?

Any luck with the lemmy-ui install?

[–] RoundSparrow@lemmy.ml 1 points 1 year ago

I found another documentation page that actually tells you how to get the "v3" version....

https://join-lemmy.org/docs/en/contributors/04-api.html

That needs to be part of the "Lemmy from Scratch" documentation page too.

[–] RoundSparrow@lemmy.ml 1 points 1 year ago* (last edited 1 year ago)

I knew it was v3 because I saw a webapp failure on one of the Lemmy instance (lemmy.ml) I was using ;) We need to update those install documents.

It seems right now I can get a client to load, but websockets aren't working. Others on Reddit reported the same issue: https://old.reddit.com/r/Lemmy/comments/142sszq/spinning_up_lemmy_websockets_dont_connect/

EDIT: Ok, I solved the websocket problem by using proper nginx config that the instructions said. I was confused about the domain names with the certification generation as I already had some nginx certs for other subdomains in place.

I'm glad you got it working :)

load more comments
view more: next ›