-
-
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." |
Edited the script to have right folder path, based on @ZhouYL0213 comment,
#!/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.5
# 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/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz
wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
wget http://invisible-island.net/datafiles/release/ncurses.tar.gz
# extract files, configure, and compile
############
# libevent #
############
tar xvzf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=$HOME/local --disable-shared
make
make install
cd ..
############
# ncurses #
############
tar xvzf ncurses.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."
@smilesun run
export CPPFLAGS="-P"
before the script as per https://stackoverflow.com/a/37475223/130152
I have trouble with configuring tmux: libevent is not found. Executing the above scripts gives:
...
checking for LIBEVENT... no
checking for library containing event_init... no
checking event.h usability... yes
checking event.h presence... no
configure: WARNING: event.h: accepted by the compiler, rejected by the preprocessor!
configure: WARNING: event.h: proceeding with the compiler's result
checking for event.h... yes
configure: error: "libevent not found"
edit: the LDFLAGS was missing $HOME/local/lib64 for libevent. adding -L$HOME/local/lib64 to LDFLAGS in the tmux ./configure and make calls fixed this.
I use script of @yogeshpv, and it works now.
Thanks all of you.
@smilesun
Compile error is caused by GCC Version equaling 5.X which is too higher.
https://dev.openwrt.org/ticket/19749
Modify ncurses source code as below:
--- a/meta/recipes-core/ncurses/ncurses.inc
+++ b/meta/recipes-core/ncurses/ncurses.inc
@@ -26,7 +26,7 @@ ENABLE_WIDEC ?= "true"
# _GNU_SOURCE is required for widec stuff and is detected automatically
# for target objects. But it must be set manually for native and sdk
# builds.
-BUILD_CPPFLAGS += "-D_GNU_SOURCE"
+BUILD_CPPFLAGS += "-D_GNU_SOURCE -P"
# natives don't generally look in base_libdir
base_libdir_class-native = "${libdir}"
Thanks a lot mate. You are a life saver.
Hey there, I tried to run this but https://sourceforge.net/projects/tmux/files/tmux/tmux-1.8/tmux-1.8.tar.gz/download
is 404'ing for me :(
And then when I search for tmux on SourceForge, the project doesn't exist: https://sourceforge.net/directory/os:linux/?q=tmux
Any ideas?
EDIT: Solution is in @ZhouYL0213 's comment
Just updated the links and it is working perfectly. Thanks a lot for saving a lot of my time!
I used the solution in @yogeshpv 's comment. It worked with only one modification: cd to new version of ncurses (as of right now it is ncurses-6.1). Thanks!
Thank you so much!
#!/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.5
# 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/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz
wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
wget http://invisible-island.net/datafiles/release/ncurses.tar.gz
# extract files, configure, and compile
############
# libevent #
############
tar xvzf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=$HOME/local --disable-shared
make
make install
cd ..
############
# ncurses #
############
tar xvzf ncurses.tar.gz
cd ncurses-6.1
./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."
The links to libevent
and ncurses
redirect and wget
tries to save them with a different filename.
Have fixed them (i.e. hardcoded) to the correct filenames. Also, bumped tmux
version from 2.5
to 2.7
.
#!/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.7
# 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/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz
wget -O libevent-2.1.8-stable.tar.gz https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
wget -O ncurses.tar.gz http://invisible-island.net/datafiles/release/ncurses.tar.gz
# extract files, configure, and compile
############
# libevent #
############
tar xvzf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=$HOME/local --disable-shared
make
make install
cd ..
############
# ncurses #
############
tar xvzf ncurses.tar.gz
cd ncurses-6.1
./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."
Thanks @musically-ut . Your fixes worked for me.
@musically-ut, I see that you put some include dir for LDFLAGS
. AFAIK, the LDFLAGS
are for library files, not header files. Is there anything that I am missing here? Or because Tmux is different in that it requires us to do so? It seems I can not find some official guide.
@musically-ut script works. Thanks a lot!
To use the latest tmux release v2.8, the following works for me (notice you need to do autogen.sh
before using ./configure
, and use make -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."
Everything is right But when I runtmux
it says -bash: tmux: command not found
what can I do ?
@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?
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
Thank you for your script, it helps me a lot. However, it must be better to update download link of latest sources of tmux, ncurses and libevent.
I replace them in "# download source files for tmux, libevent, and ncurses" section by the following:
wget -O tmux-${TMUX_VERSION}.tar.gz https://github.com/tmux/tmux/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz wget http://invisible-island.net/datafiles/release/ncurses.tar.gz
and tmux version should be changed firstly:
TMUX_VERSION=2.5