-
-
Save ryin/3106801 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# Script for installing tmux on systems where you don't have root access. | |
# tmux will be installed in $HOME/local/bin. | |
# It's assumed that wget and a C/C++ compiler are installed. | |
# exit on error | |
set -e | |
TMUX_VERSION=1.8 | |
# create our directories | |
mkdir -p $HOME/local $HOME/tmux_tmp | |
cd $HOME/tmux_tmp | |
# download source files for tmux, libevent, and ncurses | |
wget -O tmux-${TMUX_VERSION}.tar.gz http://sourceforge.net/projects/tmux/files/tmux/tmux-${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz/download | |
wget https://github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz | |
wget ftp://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz | |
# extract files, configure, and compile | |
############ | |
# libevent # | |
############ | |
tar xvzf libevent-2.0.19-stable.tar.gz | |
cd libevent-2.0.19-stable | |
./configure --prefix=$HOME/local --disable-shared | |
make | |
make install | |
cd .. | |
############ | |
# ncurses # | |
############ | |
tar xvzf ncurses-5.9.tar.gz | |
cd ncurses-5.9 | |
./configure --prefix=$HOME/local | |
make | |
make install | |
cd .. | |
############ | |
# tmux # | |
############ | |
tar xvzf tmux-${TMUX_VERSION}.tar.gz | |
cd tmux-${TMUX_VERSION} | |
./configure CFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-L$HOME/local/lib -L$HOME/local/include/ncurses -L$HOME/local/include" | |
CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib" make | |
cp tmux $HOME/local/bin | |
cd .. | |
# cleanup | |
rm -rf $HOME/tmux_tmp | |
echo "$HOME/local/bin/tmux is now available. You can optionally add $HOME/local/bin to your PATH." |
To use the latest tmux release v2.8, the following works for me (notice you need to do
autogen.sh
before using./configure
, and usemake -j
can speed up the build process):#!/bin/bash # Script for installing tmux on systems where you don't have root access. # tmux will be installed in $HOME/local/bin. # It's assumed that wget and a C/C++ compiler are installed. # exit on error set -e TMUX_VERSION=2.8 # create our directories mkdir -p $HOME/local $HOME/tmux_tmp cd $HOME/tmux_tmp # download source files for tmux, libevent, and ncurses wget -O tmux-${TMUX_VERSION}.tar.gz https://github.com/tmux/tmux/archive/${TMUX_VERSION}.tar.gz wget https://github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz wget ftp://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz # extract files, configure, and compile ############ # libevent # ############ tar xvzf libevent-2.0.19-stable.tar.gz cd libevent-2.0.19-stable ./configure --prefix=$HOME/local --disable-shared make -j make install cd .. ############ # ncurses # ############ tar xvzf ncurses-5.9.tar.gz cd ncurses-5.9 ./configure --prefix=$HOME/local make -j make install cd .. ############ # tmux # ############ tar xvzf tmux-${TMUX_VERSION}.tar.gz cd tmux-${TMUX_VERSION} ./autogen.sh ./configure CFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-L$HOME/local/lib -L$HOME/local/include/ncurses -L$HOME/local/include" CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib" make cp tmux $HOME/local/bin cd .. # cleanup rm -rf $HOME/tmux_tmp echo "$HOME/local/bin/tmux is now available. You can optionally add $HOME/local/bin to your PATH."
Thanks for the help. This worked for me on Red Hat Enterprise Linux Server release 6.9 (Santiago).
My ~/.bashrc also contains export PATH="$PATH:$HOME/local/bin" to make tmux accessible everywhere.
Just updated links of latest tmux and it worked perfectly. Thanks!
Thank you @mnsmar
The above from @StevenShi-23 and @amlestin (including the part about adding to $PATH) worked for me on Centos 7.6. Thanks!
I updated for 2.9a.
# Script for installing tmux on systems where you don't have root access.
# tmux will be installed in $HOME/local/bin.
# It's assumed that wget and a C/C++ compiler are installed.
# exit on error
set -e
TMUX_VERSION=2.9a
LIBEVENT_VERSION=2.1.8-stable
NCURSES_VERSION=6.1
# create our directories
mkdir -p $HOME/local $HOME/tmux_tmp
cd $HOME/tmux_tmp
# download all the files
wget https://github.com/tmux/tmux/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz
wget https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_VERSION}/libevent-${LIBEVENT_VERSION}.tar.gz
wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-${NCURSES_VERSION}.tar.gz
############
# libevent #
############
tar xvzf libevent-${LIBEVENT_VERSION}.tar.gz
cd libevent-${LIBEVENT_VERSION}
./configure --prefix=$HOME/local --disable-shared
make
make install
cd ..
############
# ncurses #
############
tar xvzf ncurses-${NCURSES_VERSION}.tar.gz
cd ncurses-${NCURSES_VERSION}
./configure --prefix=$HOME/local
make
make install
cd ..
############
# tmux #
############
tar xvzf tmux-${TMUX_VERSION}.tar.gz
cd tmux-${TMUX_VERSION}
./configure CFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-L$HOME/local/lib -L$HOME/local/include/ncurses -L$HOME/local/include"
CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib" make
cp tmux $HOME/local/bin
cd ..
cd $HOME
# cleanup
rm -rf $HOME/tmux_tmp
echo "$HOME/local/bin/tmux is now available. You can optionally add $HOME/local/bin to your PATH."
# for the in order to add to the .bashrc (for /sh/bash) comment-in below line
# echo 'export PATH="$HOME/local/bin:$PATH"' >> $HOME/.bashrc
Curious, why not use make install
after compiling Tmux rather than cp tmux $HOME/local/bin
?
Not a big difference, but you are missing the man page:
make[1]: Entering directory `/home/flakrat/sources/tmux-2.9a'
/usr/bin/mkdir -p '/home/flakrat/local/bin'
/usr/bin/install -c tmux '/home/flakrat/local/bin'
make install-exec-hook
make[2]: Entering directory `/home/flakrat/sources/tmux-2.9a'
if test xmdoc = xmdoc; then \
sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1 \
>./tmux.1.mdoc; \
else \
sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1| \
gawk -f ./mdoc2man.awk >./tmux.1.man; \
fi
/usr/bin/mkdir -p /home/flakrat/local/share/man/man1
/usr/bin/install -c -m 644 ./tmux.1.mdoc \
/home/flakrat/local/share/man/man1/tmux.1
Note: The latest version of tmux (3.0a) is distributed as an Appimage. So you can simply download the Appimage and either:
- Put the Appimage somewhere on your path (and thus call
tmux.Appimage
directly) or - Extract out the Appimage. This may be necessary depending on whether your machine can directly run Appimages.
Thank you so much!
For anyone looking to do this for Windows. Installing Tmux in Git Bash for instance without admin privileges.
You can grab the file from https://packages.msys2.org/package/tmux?repo=msys&variant=x86_64 and it contains tmux.exe
along with appendices.
https://github.com/msys2/MSYS2-packages/blob/master/tmux/PKGBUILD is how they build it.
Wow this is an older version of my build script, I will have to look through the commits for suggestions
https://github.com/nodswal/tmux-install
@StevenShi-23 script is breaking in
CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib" make
with
make: *** No rule to make target 'compat/forkpty-linux.c', needed by 'compat/forkpty-linux.o'. Stop.
I am using CentOS 6.10. Any ideas?
Any solution to this? I know CentOS6.10 is ancient but that is the version @StevenShi-23 and I are using. Is this only a problem on older distros? tmux refuses to to continue to compile with this error:
$ ./configure CFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-L$HOME/local/lib -L$HOME/local/include/ncurses -L$HOME/local/include" CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib"
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/dh016d/tmux/packages_downloaded/tmux-2.2':
configure: error: C compiler cannot create executables
See `config.log' for more details
I can get past it if I just run
./configure CFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses -I$HOME/local/include/event2" LDFLAGS="-L$HOME/local/lib -L$HOME/local/include/ncurses -L$HOME/local/include -L$HOME/local/include/event2" CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses -I$HOME/local/include/event2"
However after I make
tmux throws this error:
$tmux -V
./tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
$ldd ./tmux
linux-vdso.so.1 => (0x00007ffca26e0000)
libutil.so.1 => /lib64/libutil.so.1 (0x0000003b71e00000)
libevent-2.0.so.5 => not found
librt.so.1 => /lib64/librt.so.1 (0x0000003b68600000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003b69200000)
libc.so.6 => /lib64/libc.so.6 (0x0000003b67600000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003b67e00000)
/lib64/ld-linux-x86-64.so.2 (0x0000561f0752f000)
configure refuses to link the library for libevent, I cant figure out why. Anyone know?
EDIT: Got it working, followed this post here.
Steps to fix. Do not compile the way the script as above, do the following after you untar tmux and go into the directory.
export DIR="$HOME/local"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DIR/lib
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
make
make install
One more note, all the posts about using autogen.sh
, that did not work for me because aclocal was not installed. To avoid having to install autogen and autoconf I just downloaded the release version from here
https://github.com/tmux/tmux/releases/download/2.2/tmux-2.2.tar.gz
Change the version to what you want, like this. The configure script should be inside so you dont need to use autogen
https://github.com/tmux/tmux/releases/download/2.8/tmux-2.8.tar.gz
@StevenShi-23 script is breaking in
CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib" make
with
make: *** No rule to make target 'compat/forkpty-linux.c', needed by 'compat/forkpty-linux.o'. Stop.
I am using CentOS 6.10. Any ideas?