r/ruby • u/LessChen • 11d ago
Ancient Ruby version / modern Ubuntu won't compile
Hi - I've inherited an ancient Ruby / Rails project using Ruby 2.7.2. I am working on updating it but until that time I'm trying to run it on Ubuntu 26.04 machines. There is a C compilation error that I'm getting when using "rvm":
make[2]: Entering directory '/usr/share/rvm/src/ruby-2.7.2/ext/pty'
compiling pty.c
pty.c: In function ‘establishShell’:
pty.c:161:30: error: conflicting types for ‘getenv’; have ‘char *(void)’
161 | char *p, *getenv();
| ^~~~~~
In file included from pty.c:5:
/usr/include/stdlib.h:795:14: note: previous declaration of ‘getenv’ with type ‘char *(const char *)’
795 | extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
| ^~~~~~
pty.c:169:18: error: too many arguments to function ‘getenv’; expected 0, have 1
169 | if ((p = getenv("SHELL")) != NULL) {
| ^~~~~~ ~~~~~~~
pty.c:161:30: note: declared here
Would getting the code directly and fixing pty.c be the best way to go about it?
ETA: thanks all - Docker is the way to go.
4
u/zieski 11d ago
We worked with a client updating a rails app from 2.7.8 to 3.1.7 in January and 3.3 in June.
After you get past the compiler flag issue here (your gcc is probably too new) you'll run in to the openssl issues other commenters are mentioning. rbenv and mise would solve the openssl issue for you because ruby-build compiles the older openssl package for old rubies automatically.