diff options
-rw-r--r-- | .SRCINFO | 19 | ||||
-rw-r--r-- | PKGBUILD | 34 | ||||
-rw-r--r-- | patch | 340 | ||||
-rw-r--r-- | xlsh.install | 19 |
4 files changed, 412 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..cd71a8e6da1c --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,19 @@ +pkgbase = xlsh-without-x + pkgdesc = eXtended Login Shell - fast, minimalistic login replacement (without X support) + pkgver = 0.2.2 + pkgrel = 1 + url = https://github.com/Nadrin/xlsh/wiki + install = xlsh.install + arch = i686 + arch = x86_64 + license = GPL3 + depends = pam + depends = readline + provides = xlsh=0.2.2 + source = https://github.com/Nadrin/xlsh/tarball/master + source = patch + md5sums = cf78ceec269cc3e35797fe6e8631c3b3 + md5sums = bf4e6b42787da0988ae56456d1246937 + +pkgname = xlsh-without-x + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..8776a9543ae9 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: jjacky +# Contributor: MichaĆ Siejak <my_fistname@my_lastname.pl> +pkgname=xlsh-without-x +pkgver=0.2.2 +pkgrel=1 +pkgdesc="eXtended Login Shell - fast, minimalistic login replacement (without X support)" +arch=('i686' 'x86_64') +url="https://github.com/Nadrin/xlsh/wiki" +license=('GPL3') +depends=('pam' 'readline') +provides=('xlsh=0.2.2') +source=(https://github.com/Nadrin/xlsh/tarball/master + patch) +install=xlsh.install + +build() { + cd "$srcdir" + + folder=$(ls |grep Nadrin) + mv $folder/* . + rmdir $folder + + patch -p1 -i patch + + make +} + +package() { + cd "$srcdir" + make DESTDIR="$pkgdir" install +} + +md5sums=('cf78ceec269cc3e35797fe6e8631c3b3' + 'bf4e6b42787da0988ae56456d1246937') diff --git a/patch b/patch new file mode 100644 index 000000000000..819ad807acb5 --- /dev/null +++ b/patch @@ -0,0 +1,340 @@ +diff -r c2c082c4832e Makefile +--- a/Makefile Tue Nov 15 13:02:40 2011 +0100 ++++ b/Makefile Fri Nov 18 10:31:51 2011 +0100 +@@ -4,7 +4,7 @@ + .DEFAULT_GOAL = all + .PHONY: all install install-strip installdirs uninstall clean + +-prefix = /usr/local ++prefix = /usr + + exec_prefix = $(prefix) + bindir = $(exec_prefix)/bin +@@ -26,49 +26,33 @@ + .SUFFIXES: .o + vpath %.c ./src + +-PROGRAMS = xlsh xlshd ++PROGRAMS = xlsh + + XLSH_OBJ = xlsh.o libxlsh.o + XLSH_SOURCE = xlsh.c libxlsh.c + XLSH_HEADERS = xlsh.h libxlsh.h config.h + XLSH_LIBS = -lreadline -lpam + +-XLSHD_OBJ = xlshd.o libxlsh.o +-XLSHD_SOURCE = xlshd.c libxlsh.c +-XLSHD_HEADERS = config.h libxlsh.h +- + all: $(PROGRAMS) + + xlsh: $(XLSH_OBJ) + xlsh: LDLIBS=$(XLSH_LIBS) + +-xlshd: $(XLSHD_OBJ) +- + install: installdirs + $(INSTALL_PROGRAM) xlsh $(DESTDIR)$(sbindir) +- $(INSTALL_PROGRAM) xlshd $(DESTDIR)$(sbindir) +- $(INSTALL_DATA) etc/xlshrc $(DESTDIR)$(sysconfdir)/xlsh +- $(INSTALL_DATA) etc/Xresources $(DESTDIR)$(sysconfdir)/xlsh +- $(INSTALL_DATA) etc/pam.d/xlshd $(DESTDIR)$(sysconfdir)/pam.d + + install-strip: installdirs + $(INSTALL_PROGRAM_STRIP) xlsh $(DESTDIR)$(sbindir) +- $(INSTALL_PROGRAM_STRIP) xlshd $(DESTDIR)$(sbindir) +- $(INSTALL_DATA) etc/xlshrc $(DESTDIR)$(sysconfdir)/xlsh +- $(INSTALL_DATA) etc/Xresources $(DESTDIR)$(sysconfdir)/xlsh + + installdirs: + $(INSTALL_DIR) $(DESTDIR)$(sbindir) +- $(INSTALL_DIR) $(DESTDIR)$(sysconfdir)/xlsh +- $(INSTALL_DIR) $(DESTDIR)$(sysconfdir)/pam.d + + uninstall: + rm -f ${DESTDIR}$(sbindir)/xlsh +- rm -f ${DESTDIR}$(sbindir)/xlshd + + clean: + rm -f $(PROGRAMS) +- rm -f $(XLSH_OBJ) $(XLSHD_OBJ) ++ rm -f $(XLSH_OBJ) + + %.o: %.c + $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< -o $@ +diff -r c2c082c4832e include/config.h +--- a/include/config.h Tue Nov 15 13:02:40 2011 +0100 ++++ b/include/config.h Fri Nov 18 10:31:51 2011 +0100 +@@ -9,26 +9,36 @@ + + // Tweak parameters to suit your needs before compiling. + ++#define XLSH_X_SUPPORT 0 ++ + #define XLSH_EXEC "./.xsession" +-#define XLSH_PROMPT "xlsh (%s)> " ++#define XLSH_PROMPT "> " + #define XLSH_TMPDIR "/tmp" + #define XLSH_SHELLS "/etc/shells" + #define XLSH_ISSUE "/etc/issue" + #define XLSH_PATH "/bin:/usr/bin:/usr/local/bin" + #define XLSH_REBOOT "/sbin/shutdown -r now" + #define XLSH_HALT "/sbin/shutdown -h now" ++#if XLSH_X_SUPPORT + #define XLSH_XRDB "/usr/bin/xrdb -remove" ++#endif + #define XLSH_XTTY "/dev/console" ++#if XLSH_X_SUPPORT + #define XLSH_XTTY_NAME "X11" ++#endif + #define XLSH_DATEFMT "%Y-%m-%d" + #define XLSH_TIMEFMT "%H:%M" + #define XLSH_PAM_TTY "login" ++#if XLSH_X_SUPPORT + #define XLSH_PAM_X11 "xlshd" ++#endif + ++#define XLSH_COMPLETION_LOGIN 0 + #define XLSH_COMPLETION_SHOWROOT 1 + #define XLSH_COMPLETION_MINUID 1000 + #define XLSH_COMPLETION_MAXUID 65534 + ++#if XLSH_X_SUPPORT + #define XLSHD_TMPDIR XLSH_TMPDIR + #define XLSHD_SHELL "/bin/sh" + #define XLSHD_PIDFILE "/var/run/xlshd.pid" +@@ -38,5 +48,6 @@ + #define XLSHD_XLSHRC "/etc/xlsh/xlshrc" + #define XLSHD_XWAIT 1 + #define XLSHD_XRETRY 2 ++#endif + + #endif +diff -r c2c082c4832e include/libxlsh.h +--- a/include/libxlsh.h Tue Nov 15 13:02:40 2011 +0100 ++++ b/include/libxlsh.h Fri Nov 18 10:31:51 2011 +0100 +@@ -24,6 +24,7 @@ + + size_t libxlsh_strnlen(const char* s, size_t maxlen); + void libxlsh_proc_sigmask(void); ++void libxlsh_restore_sigmask(void); + pid_t libxlsh_proc_exec(const char* cmdline, int flags); + pid_t libxlsh_pid_read(const char* filename); + int libxlsh_pid_lock(const char* filename, pid_t pid, int flags); +diff -r c2c082c4832e include/xlsh.h +--- a/include/xlsh.h Tue Nov 15 13:02:40 2011 +0100 ++++ b/include/xlsh.h Fri Nov 18 10:31:51 2011 +0100 +@@ -58,7 +58,9 @@ + int xlsh_session_exec(pam_handle_t* handle, const char* session, const char* arg0); + + int xlsh_session_tty(const char* user, const char* shell); ++#if XLSH_X_SUPPORT + int xlsh_session_x(const char* user, const char* shell); ++#endif + + int xlsh_sys_getinfo(xlsh_system_t* sysinfo); + int xlsh_sys_issue(const char* issuefile); +diff -r c2c082c4832e src/libxlsh.c +--- a/src/libxlsh.c Tue Nov 15 13:02:40 2011 +0100 ++++ b/src/libxlsh.c Fri Nov 18 10:31:51 2011 +0100 +@@ -32,6 +32,11 @@ + sigprocmask(0, NULL, &xlsh_default_sigmask); + } + ++void libxlsh_restore_sigmask(void) ++{ ++ sigprocmask(SIG_SETMASK, &xlsh_default_sigmask, NULL); ++} ++ + pid_t libxlsh_proc_exec(const char* cmdline, int flags) + { + pid_t pid; +diff -r c2c082c4832e src/xlsh.c +--- a/src/xlsh.c Tue Nov 15 13:02:40 2011 +0100 ++++ b/src/xlsh.c Fri Nov 18 10:31:51 2011 +0100 +@@ -51,7 +51,9 @@ + { NULL, NULL, NULL }, + }; + ++#if XLSH_X_SUPPORT + static int xlsh_X = 0; ++#endif + + static void xlsh_usage(char* argv0) + { +@@ -99,18 +101,22 @@ + return XLSH_EARG; + } + ++#if XLSH_X_SUPPORT + if(xlsh_X) { + if(!arg_shell) + arg_shell = xlsh_config[XLSH_ID_EXEC].value; + return xlsh_session_x(arg_user, arg_shell); + } + else ++#endif + return xlsh_session_tty(arg_user, arg_shell); + } + + int xlsh_func_reboot(int argc, char** argv) + { ++#if XLSH_X_SUPPORT + pid_t xlshd_pid; ++#endif + + printf("Initiating system reboot ...\n"); + if(libxlsh_proc_exec(XLSH_REBOOT, XLSH_DETACH) == -1) { +@@ -118,28 +124,34 @@ + return XLSH_ERROR; + } + ++#if XLSH_X_SUPPORT + xlshd_pid = libxlsh_pid_read(XLSHD_PIDFILE); + if(xlshd_pid > 0) + kill(xlshd_pid, SIGTERM); +- ++#endif ++ + pause(); + return XLSH_EDONE; + } + + int xlsh_func_shutdown(int argc, char** argv) + { ++#if XLSH_X_SUPPORT + pid_t xlshd_pid; +- ++#endif ++ + printf("Initiating system shutdown ...\n"); + if(libxlsh_proc_exec(XLSH_HALT, XLSH_DETACH) == -1) { + fprintf(stderr, "Failed to execute: %s\n", XLSH_HALT); + return XLSH_ERROR; + } + ++#if XLSH_X_SUPPORT + xlshd_pid = libxlsh_pid_read(XLSHD_PIDFILE); + if(xlshd_pid > 0) + kill(xlshd_pid, SIGTERM); +- ++#endif ++ + pause(); + return XLSH_EDONE; + } +@@ -242,9 +254,11 @@ + if(pam_start(service, user, &conv, &pam_handle) != PAM_SUCCESS) + return XLSH_ERROR; + ++#if XLSH_X_SUPPORT + if(xlsh_X) + pam_set_item(pam_handle, PAM_TTY, XLSH_XTTY); + else ++#endif + pam_set_item(pam_handle, PAM_TTY, ttyname(0)); + + if(pam_authenticate(pam_handle, 0) != PAM_SUCCESS) { +@@ -318,6 +332,7 @@ + setenv("HOME", pwinfo->pw_dir, 1); + setenv("PATH", xlsh_config[XLSH_ID_PATH].value, 1); + ++#if XLSH_X_SUPPORT + if(xlsh_X) { + setenv("SHELL", pwinfo->pw_shell, 1); + setenv("DISPLAY", xlsh_config[XLSH_ID_DISPLAY].value, 1); +@@ -325,11 +340,13 @@ + wait(&proc_wait); + } + else ++#endif + setenv("SHELL", session, 1); + + if(*terminal) + setenv("TERM", terminal, 1); + ++ libxlsh_restore_sigmask(); + execlp(session, _arg0, (char*)0); + exit(EXIT_FAILURE); + } +@@ -382,6 +399,7 @@ + return XLSH_EDONE; + } + ++#if XLSH_X_SUPPORT + int xlsh_session_x(const char* user, const char* shell) + { + pid_t proc_session; +@@ -446,6 +464,7 @@ + + return XLSH_EOK; + } ++#endif + + // Configuration + void xlsh_config_init(char* exec_arg) +@@ -516,6 +535,7 @@ + return NULL; + } + ++#if XLSH_COMPLETION_LOGIN + static char* xlsh_cmd_match_user(const char* text, int state) + { + static size_t len; +@@ -540,6 +560,7 @@ + endpwent(); + return NULL; + } ++#endif + + static char** xlsh_cmd_complete(const char* text, int start, int end) + { +@@ -552,8 +573,12 @@ + return rl_completion_matches(const_cast.c, + xlsh_cmd_match_command); + else ++#if XLSH_COMPLETION_LOGIN + return rl_completion_matches(const_cast.c, + xlsh_cmd_match_user); ++#else ++ return NULL; ++#endif + } + + int xlsh_cmd_loop(void) +@@ -569,7 +594,7 @@ + int retvalue = XLSH_EOK; + + xlsh_sys_getinfo(&sysinfo); +- snprintf(prompt, 256, XLSH_PROMPT, sysinfo.ttyname); ++ snprintf(prompt, 256, XLSH_PROMPT); + + rl_attempted_completion_function = xlsh_cmd_complete; + while((line = xlsh_cmd_readline(prompt))) { +@@ -623,6 +648,7 @@ + strcpy(tty_path, XLSH_XTTY); + strncpy(sysinfo->ttypath, tty_path + 5, sizeof(sysinfo->ttypath)); + ++#if XLSH_X_SUPPORT + if(xlsh_X) { + disp_name = getenv("DISPLAY"); + if(disp_name[0] == ':') +@@ -631,6 +657,7 @@ + tty_name = tty_path; + } + else ++#endif + tty_name = tty_path + 5; + strncpy(sysinfo->ttyname, tty_name, sizeof(sysinfo->ttyname)); + +@@ -721,8 +748,10 @@ + sigaddset(&sigmask, SIGHUP); + sigprocmask(SIG_BLOCK, &sigmask, NULL); + ++#if XLSH_X_SUPPORT + if(getenv("DISPLAY")) + xlsh_X = 1; ++#endif + + xlsh_config_init(opt_exec); + xlsh_sys_issue(xlsh_config[XLSH_ID_ISSUE].value); diff --git a/xlsh.install b/xlsh.install new file mode 100644 index 000000000000..c8dc33318b19 --- /dev/null +++ b/xlsh.install @@ -0,0 +1,19 @@ +# xlsh post-install info +post_install() { + cat <<EOF + +To use xlsh as /bin/login replacement edit /etc/inittab file and replace +your usual agetty invocations with: + +c1:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty1 linux +c2:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty2 linux +c3:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty3 linux +c4:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty4 linux +c5:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty5 linux +c6:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty6 linux + +For more information see: + https://github.com/Nadrin/xlsh/wiki/Arch-Installation + +EOF +} |