first usable version of kernel and commands
After an year of hard work, this is a first "usable" version of Jehanne.
This commit is contained in:
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,8 +1,9 @@
|
|||||||
arch/amd64/bin
|
arch/amd64/cmd
|
||||||
|
arch/amd64/aux
|
||||||
arch/amd64/kern
|
arch/amd64/kern
|
||||||
arch/amd64/lib
|
arch/amd64/lib
|
||||||
|
arch/amd64/qa
|
||||||
sys/log
|
arch/amd64/include/syscalls.h
|
||||||
|
|
||||||
sys/src/9/port/error.h
|
sys/src/9/port/error.h
|
||||||
sys/src/9/root/nvram
|
sys/src/9/root/nvram
|
||||||
|
26
README.md
26
README.md
@ -5,19 +5,25 @@
|
|||||||
|
|
||||||
Jehanne is a [simple][simplicity] operating system.
|
Jehanne is a [simple][simplicity] operating system.
|
||||||
|
|
||||||
It is a fork of [Harvey][harvey] (which in turn is a fork of
|
Jehanne has noble ancestors:
|
||||||
[Plan 9 from Bell Labs][plan9] merged with [Nix][nix] sources) but
|
|
||||||
diverges from the design and conventions of its ancestors whenever
|
|
||||||
they are at odds with its goals.
|
|
||||||
|
|
||||||
For this reason project is named after the famous French heretic [Joan of Arc][arc].
|
- most of userland tools, a lot of wisdom and some kernel modules,
|
||||||
|
come from [9front][9front]
|
||||||
|
- the kernel is a fork of Charles Forsyth's [Plan9-9k][plan9-9k]
|
||||||
|
- most of the build system and some valuable piece of code come from [Harvey OS][harvey]
|
||||||
|
|
||||||
|
Still the project is named after a humble peasant,
|
||||||
|
the famous French heretic [Joan of Arc][arc], because it diverges deeply
|
||||||
|
from the design and conventions of its predecessors.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
This is the main repository, used to build the system as a whole:
|
This is the main repository, used to build the system as a whole:
|
||||||
|
|
||||||
- [arch](./arch/) contains one folder for each
|
- [arch](./arch/) contains one folder for each
|
||||||
supported architecture, with specific C headers and binaries
|
supported architecture, with specific C headers, libraries and executables
|
||||||
|
(note that by architecture we intend any kind of physical or virtual
|
||||||
|
machine that is able to run code, thus rc is actually an architecture)
|
||||||
- [sys](./sys) is the system folder
|
- [sys](./sys) is the system folder
|
||||||
* [include](./sys/include) contains portable C headers
|
* [include](./sys/include) contains portable C headers
|
||||||
* [lib](./sys/lib) contains data and scripts used by the
|
* [lib](./sys/lib) contains data and scripts used by the
|
||||||
@ -38,7 +44,7 @@ This is the main repository, used to build the system as a whole:
|
|||||||
- [pkgs](./pkgs) will contains the installed packages
|
- [pkgs](./pkgs) will contains the installed packages
|
||||||
|
|
||||||
The running system also includes supplemental folders like `/lib`,
|
The running system also includes supplemental folders like `/lib`,
|
||||||
`/bin` and `/dev` that are bound during the boot as required.
|
`/cmd` and `/dev` that are bound during the boot as required.
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
@ -53,7 +59,7 @@ After the repository clone, you can give a look with
|
|||||||
git submodule init # we have a lot of submodules
|
git submodule init # we have a lot of submodules
|
||||||
git submodule update --init --recursive --remote
|
git submodule update --init --recursive --remote
|
||||||
./hacking/devshell.sh # start a shell with appropriate environment
|
./hacking/devshell.sh # start a shell with appropriate environment
|
||||||
./hacking/continuous-build.sh # to build everything
|
./hacking/continuous-build.sh # to build everything (will take a while)
|
||||||
./hacking/runOver9P.sh # to start the system in QEMU
|
./hacking/runOver9P.sh # to start the system in QEMU
|
||||||
./hacking/drawterm.sh # to connect Jehanne with drawterm
|
./hacking/drawterm.sh # to connect Jehanne with drawterm
|
||||||
|
|
||||||
@ -74,8 +80,10 @@ yourself and your attitudes.
|
|||||||
|
|
||||||
[simplicity]: http://plato.stanford.edu/entries/simplicity/ "What is simplicity?"
|
[simplicity]: http://plato.stanford.edu/entries/simplicity/ "What is simplicity?"
|
||||||
[harvey]: http://harvey-os.org "Harvey OS"
|
[harvey]: http://harvey-os.org "Harvey OS"
|
||||||
[plan9]: https://github.com/brho/plan9 "UC Berkeley release of Plan 9 under the GPLv2"
|
[9front]: http://9front.org/ "THE PLAN FELL OFF"
|
||||||
|
[plan9-9k]: https://bitbucket.org/forsyth/plan9-9k "Experimental 64-bit Plan 9 kernel"
|
||||||
[nix]: https://github.com/rminnich/nix-os
|
[nix]: https://github.com/rminnich/nix-os
|
||||||
[arc]: https://en.wikipedia.org/wiki/Joan_of_Arc "Jeanne d'Arc"
|
[arc]: https://en.wikipedia.org/wiki/Joan_of_Arc "Jeanne d'Arc"
|
||||||
[lic]: ./LICENSE.md "A summary of Jehanne licensing"
|
[lic]: ./LICENSE.md "A summary of Jehanne licensing"
|
||||||
[mailinglist]: https://groups.google.com/forum/#!forum/jehanneos
|
[mailinglist]: https://groups.google.com/forum/#!forum/jehanneos
|
||||||
|
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
#!/bin/rc
|
|
||||||
if(test -e /mnt/keys/$1)
|
|
||||||
echo -n disabled > /mnt/keys/$1/status
|
|
||||||
if(test -e /mnt/netkeys/$1)
|
|
||||||
echo -n disabled > /mnt/netkeys/$1/status
|
|
@ -1,5 +0,0 @@
|
|||||||
#!/bin/rc
|
|
||||||
if(test -e /mnt/keys/$1)
|
|
||||||
echo -n ok > /mnt/keys/$1/status
|
|
||||||
if(test -e /mnt/netkeys/$1)
|
|
||||||
echo -n ok > /mnt/netkeys/$1/status
|
|
@ -1,36 +0,0 @@
|
|||||||
#!/bin/rc
|
|
||||||
cd /mnt/keys/$1 > /dev/null >[2=1] && {
|
|
||||||
stat=`{cat status}
|
|
||||||
exp=`{cat expire}
|
|
||||||
switch($exp){
|
|
||||||
case never 0
|
|
||||||
exp='never expires'
|
|
||||||
case *
|
|
||||||
exp=(expires on `{date $exp})
|
|
||||||
}
|
|
||||||
switch($stat){
|
|
||||||
case expired
|
|
||||||
echo user $1: plan 9 key has expired
|
|
||||||
case *
|
|
||||||
echo user $1: plan 9 key status is $stat and $exp
|
|
||||||
}
|
|
||||||
grep '^'$1'[ ]' /adm/keys.who | tail -1
|
|
||||||
}
|
|
||||||
cd /mnt/netkeys/$1 > /dev/null >[2=1] && {
|
|
||||||
stat=`{cat status}
|
|
||||||
exp=`{cat expire}
|
|
||||||
switch($exp){
|
|
||||||
case never 0
|
|
||||||
exp='never expires'
|
|
||||||
case *
|
|
||||||
exp=(expires on `{date $exp})
|
|
||||||
}
|
|
||||||
switch($stat){
|
|
||||||
case expired
|
|
||||||
echo user $1: network key has expired
|
|
||||||
case *
|
|
||||||
echo user $1: network key status is $stat and $exp
|
|
||||||
auth/printnetkey $1
|
|
||||||
}
|
|
||||||
grep '^'$1'[ ]' /adm/netkeys.who | tail -1
|
|
||||||
}
|
|
@ -1,12 +1,6 @@
|
|||||||
{
|
{
|
||||||
"buildflags": {
|
"buildflags": {
|
||||||
"Cflags": [
|
"Cflags": [
|
||||||
"-std=c11",
|
|
||||||
"-c",
|
|
||||||
"-I/$JEHANNE/arch/$ARCH/include",
|
|
||||||
"-I/$JEHANNE/sys/include",
|
|
||||||
"-I.",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-fno-builtin",
|
"-fno-builtin",
|
||||||
"-fno-omit-frame-pointer",
|
"-fno-omit-frame-pointer",
|
||||||
"-fplan9-extensions",
|
"-fplan9-extensions",
|
||||||
@ -16,10 +10,10 @@
|
|||||||
"-gdwarf-2",
|
"-gdwarf-2",
|
||||||
"-ggdb",
|
"-ggdb",
|
||||||
"-mcmodel=small",
|
"-mcmodel=small",
|
||||||
"-mno-red-zone",
|
|
||||||
"-O0",
|
"-O0",
|
||||||
"-static",
|
"-static",
|
||||||
"-Wall",
|
"-Wall",
|
||||||
|
"-Wno-main",
|
||||||
"-Wno-missing-braces",
|
"-Wno-missing-braces",
|
||||||
"-Wno-parentheses",
|
"-Wno-parentheses",
|
||||||
"-Wno-unknown-pragmas"
|
"-Wno-unknown-pragmas"
|
||||||
|
@ -7,87 +7,68 @@
|
|||||||
* in the LICENSE file.
|
* in the LICENSE file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define nil ((void*)0)
|
#define nil ((void*)0)
|
||||||
typedef unsigned char uint8_t;
|
typedef unsigned char uint8_t;
|
||||||
typedef signed char int8_t;
|
typedef signed char int8_t;
|
||||||
typedef unsigned short uint16_t;
|
typedef unsigned short uint16_t;
|
||||||
typedef signed short int16_t;
|
typedef signed short int16_t;
|
||||||
typedef unsigned int uint32_t;
|
typedef unsigned int uint32_t;
|
||||||
typedef unsigned int uint;
|
typedef unsigned int uint;
|
||||||
typedef signed int int32_t;
|
typedef signed int int32_t;
|
||||||
typedef unsigned long long uint64_t;
|
typedef unsigned long long uint64_t;
|
||||||
typedef long long int64_t;
|
typedef long long int64_t;
|
||||||
typedef uint64_t uintptr;
|
typedef uint64_t uintptr;
|
||||||
typedef uint64_t uintptr_t;
|
typedef uint64_t uintptr_t;
|
||||||
typedef uint32_t usize;
|
typedef uint32_t usize;
|
||||||
typedef int64_t size_t;
|
typedef __SIZE_TYPE__ size_t;
|
||||||
typedef uint32_t Rune;
|
typedef int32_t pid_t;
|
||||||
typedef union FPdbleword FPdbleword;
|
typedef uint32_t Rune;
|
||||||
typedef uintptr jmp_buf[10]; // for registers.
|
typedef union FPdbleword FPdbleword;
|
||||||
|
typedef uintptr jmp_buf[10]; // for registers.
|
||||||
|
|
||||||
#define JMPBUFSP 6
|
#define JMPBUFSP 6
|
||||||
#define JMPBUFPC 7
|
#define JMPBUFPC 7
|
||||||
#define JMPBUFARG1 8
|
#define JMPBUFARG1 8
|
||||||
#define JMPBUFARG2 9
|
#define JMPBUFARG2 9
|
||||||
|
|
||||||
#define JMPBUFDPC 0
|
#define JMPBUFDPC 0
|
||||||
typedef unsigned int mpdigit; /* for /sys/include/mp.h */
|
typedef unsigned int mpdigit; /* for /sys/include/mp.h */
|
||||||
|
|
||||||
/* MXCSR */
|
/* MXCSR */
|
||||||
/* fcr */
|
/* fcr */
|
||||||
#define FPFTZ (1<<15) /* amd64 */
|
#define FPFTZ (1<<15) /* amd64 */
|
||||||
#define FPINEX (1<<12)
|
#define FPINEX (1<<12)
|
||||||
#define FPUNFL (1<<11)
|
#define FPUNFL (1<<11)
|
||||||
#define FPOVFL (1<<10)
|
#define FPOVFL (1<<10)
|
||||||
#define FPZDIV (1<<9)
|
#define FPZDIV (1<<9)
|
||||||
#define FPDNRM (1<<8) /* amd64 */
|
#define FPDNRM (1<<8) /* amd64 */
|
||||||
#define FPINVAL (1<<7)
|
#define FPINVAL (1<<7)
|
||||||
#define FPDAZ (1<<6) /* amd64 */
|
#define FPDAZ (1<<6) /* amd64 */
|
||||||
#define FPRNR (0<<13)
|
#define FPRNR (0<<13)
|
||||||
#define FPRZ (3<<13)
|
#define FPRZ (3<<13)
|
||||||
#define FPRPINF (2<<13)
|
#define FPRPINF (2<<13)
|
||||||
#define FPRNINF (1<<13)
|
#define FPRNINF (1<<13)
|
||||||
#define FPRMASK (3<<13)
|
#define FPRMASK (3<<13)
|
||||||
#define FPPEXT 0
|
#define FPPEXT 0
|
||||||
#define FPPSGL 0
|
#define FPPSGL 0
|
||||||
#define FPPDBL 0
|
#define FPPDBL 0
|
||||||
#define FPPMASK 0
|
#define FPPMASK 0
|
||||||
/* fsr */
|
/* fsr */
|
||||||
#define FPAINEX (1<<5)
|
#define FPAINEX (1<<5)
|
||||||
#define FPAUNFL (1<<4)
|
#define FPAUNFL (1<<4)
|
||||||
#define FPAOVFL (1<<3)
|
#define FPAOVFL (1<<3)
|
||||||
#define FPAZDIV (1<<2)
|
#define FPAZDIV (1<<2)
|
||||||
#define FPADNRM (1<<1) /* not in plan 9 */
|
#define FPADNRM (1<<1) /* not in plan 9 */
|
||||||
#define FPAINVAL (1<<0)
|
#define FPAINVAL (1<<0)
|
||||||
union FPdbleword
|
union FPdbleword
|
||||||
{
|
{
|
||||||
double x;
|
double x;
|
||||||
struct { /* little endian */
|
struct { /* little endian */
|
||||||
uint lo;
|
uint lo;
|
||||||
uint hi;
|
uint hi;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
#if 0
|
|
||||||
typedef char* va_list;
|
|
||||||
#define va_start(list, start) list =\
|
|
||||||
(sizeof(start) < 8?\
|
|
||||||
(char*)((int64_t*)&(start)+1):\
|
|
||||||
(char*)(&(start)+1))
|
|
||||||
#define va_end(list)\
|
|
||||||
USED(list)
|
|
||||||
#define va_arg(list, mode)\
|
|
||||||
((sizeof(mode) == 1)?\
|
|
||||||
((list += 8), (mode*)list)[-8]:\
|
|
||||||
(sizeof(mode) == 2)?\
|
|
||||||
((list += 8), (mode*)list)[-4]:\
|
|
||||||
(sizeof(mode) == 4)?\
|
|
||||||
((list += 8), (mode*)list)[-2]:\
|
|
||||||
((list += sizeof(mode)), (mode*)list)[-1])
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef __builtin_va_list va_list;
|
typedef __builtin_va_list va_list;
|
||||||
|
|
||||||
#define va_start(v,l) __builtin_va_start(v,l)
|
#define va_start(v,l) __builtin_va_start(v,l)
|
||||||
@ -95,3 +76,17 @@ typedef __builtin_va_list va_list;
|
|||||||
#define va_arg(v,l) __builtin_va_arg(v,l)
|
#define va_arg(v,l) __builtin_va_arg(v,l)
|
||||||
#define va_copy(v,l) __builtin_va_copy(v,l)
|
#define va_copy(v,l) __builtin_va_copy(v,l)
|
||||||
|
|
||||||
|
typedef union NativeTypes
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
unsigned char uc;
|
||||||
|
short s;
|
||||||
|
unsigned short us;
|
||||||
|
int i;
|
||||||
|
unsigned int ui;
|
||||||
|
long l;
|
||||||
|
unsigned long ul;
|
||||||
|
void* p;
|
||||||
|
} NativeTypes;
|
||||||
|
extern volatile NativeTypes* _sysargs;
|
||||||
|
# include "syscalls.h"
|
||||||
|
3
arch/rc/aux/acme/agrep
Executable file
3
arch/rc/aux/acme/agrep
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
|
||||||
|
exec grep -n $* /dev/null
|
3
arch/rc/aux/acme/ind
Executable file
3
arch/rc/aux/acme/ind
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
|
||||||
|
sed 's/^/ /' $*
|
10
arch/rc/aux/acme/new
Executable file
10
arch/rc/aux/acme/new
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
|
||||||
|
id=`{cat /mnt/acme/new/ctl}
|
||||||
|
id=$id(1)
|
||||||
|
cmd = $*
|
||||||
|
if(~ $#cmd 0) cmd = cat
|
||||||
|
|
||||||
|
echo 'name '^`{pwd}^/-^`{basename $cmd(1)} > /mnt/acme/$id/ctl
|
||||||
|
$cmd > /mnt/acme/$id/body
|
||||||
|
echo clean > /mnt/acme/$id/ctl
|
3
arch/rc/aux/acme/quote
Executable file
3
arch/rc/aux/acme/quote
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
|
||||||
|
sed 's/^/> /' $*
|
3
arch/rc/aux/acme/unind
Executable file
3
arch/rc/aux/acme/unind
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
|
||||||
|
sed 's/^ //' $*
|
5
arch/rc/aux/acme/wnew
Executable file
5
arch/rc/aux/acme/wnew
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/cmd/rc -e
|
||||||
|
|
||||||
|
id=`{mkwnew $*}
|
||||||
|
cat >/mnt/acme/$id/body
|
||||||
|
echo clean >/mnt/acme/$id/ctl
|
9
arch/rc/aux/inst/dircp
Executable file
9
arch/rc/aux/inst/dircp
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# dircp src dest - copy a tree with tar, not respecting permissions
|
||||||
|
switch($#*){
|
||||||
|
case 2
|
||||||
|
@ {builtin cd $1 && tar cif /fd/1 .} | @ {builtin cd $2 && tar xf /fd/0}
|
||||||
|
case *
|
||||||
|
echo usage: dircp from to >[1=2]
|
||||||
|
exit usage
|
||||||
|
}
|
6
arch/rc/aux/rio/label
Executable file
6
arch/rc/aux/rio/label
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# label word ... - write words into our label, if any
|
||||||
|
if (test -w /dev/label)
|
||||||
|
echo -n $* > /dev/label
|
||||||
|
if not if (test -w /mnt/term/dev/label)
|
||||||
|
echo -n $* > /mnt/term/dev/label
|
100
arch/rc/aux/rio/window
Executable file
100
arch/rc/aux/rio/window
Executable file
@ -0,0 +1,100 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# window [many options] cmd [arg...] - create new window and run cmd in it
|
||||||
|
rfork e
|
||||||
|
fn checkwsys{
|
||||||
|
if(~ $wsys ''){
|
||||||
|
echo 'window: $wsys not defined'
|
||||||
|
exit bad
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# original version used mount to do the work
|
||||||
|
fn oldway{
|
||||||
|
switch($#*){
|
||||||
|
case 0 1
|
||||||
|
echo usage: window '''minx miny maxx maxy''' cmd args ...
|
||||||
|
exit usage
|
||||||
|
}
|
||||||
|
|
||||||
|
checkwsys
|
||||||
|
|
||||||
|
dir = /mnt/wsys
|
||||||
|
srv = $wsys
|
||||||
|
|
||||||
|
rfork ne
|
||||||
|
{
|
||||||
|
if(x=`{cat /dev/ppid}; mount $srv $dir N`{{echo $x $1 }| sed 's/^ //g;s/ +/,/g'}){
|
||||||
|
shift
|
||||||
|
bind -b $dir /dev
|
||||||
|
echo -n `{basename $1} > /dev/label >[2] /dev/null
|
||||||
|
exec $* < /dev/cons > /dev/cons >[2] /dev/cons
|
||||||
|
}
|
||||||
|
}&
|
||||||
|
}
|
||||||
|
|
||||||
|
# if argument is of form '100 100 200 200' or '100,100,200,200' use old way
|
||||||
|
if(~ $1 *[0-9][' ,'][0-9]*){
|
||||||
|
oldway $*
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# geometry parameters are:
|
||||||
|
# -r 0 0 100 100
|
||||||
|
# -dx n
|
||||||
|
# -dy n
|
||||||
|
# -minx n
|
||||||
|
# -miny n
|
||||||
|
# -maxx n
|
||||||
|
# -maxy n
|
||||||
|
# where n can be a number, to set the value, or +number or -number to change it
|
||||||
|
|
||||||
|
# find wctl file
|
||||||
|
fn getwctl{
|
||||||
|
if(~ $wctl ''){
|
||||||
|
if(test -f /dev/wctl) echo /dev/wctl
|
||||||
|
if not if(test -f /mnt/term/dev/wctl) echo /mnt/term/dev/wctl
|
||||||
|
if not if(~ $service cpu) echo /mnt/term/srv/riowctl.*.*
|
||||||
|
if not {
|
||||||
|
echo window: '$wctl' not defined >[1=2]
|
||||||
|
exit usage
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if not echo $wctl
|
||||||
|
}
|
||||||
|
|
||||||
|
# use mount to make local window
|
||||||
|
if(~ $1 -m){
|
||||||
|
shift
|
||||||
|
|
||||||
|
checkwsys
|
||||||
|
|
||||||
|
dir = /mnt/wsys
|
||||||
|
srv = $wsys
|
||||||
|
rfork ne
|
||||||
|
{
|
||||||
|
unmount /mnt/acme /dev >[2]/dev/null
|
||||||
|
if(mount $srv $dir 'new -pid '^`{cat /dev/ppid}^' '$"*){
|
||||||
|
bind -b $dir /dev
|
||||||
|
# toss geometry parameters to find command
|
||||||
|
while(~ $1 -*)
|
||||||
|
switch($1){
|
||||||
|
case -dx -dy -minx -miny -maxx -maxy
|
||||||
|
shift 2
|
||||||
|
case -r
|
||||||
|
shift 5
|
||||||
|
case -scroll
|
||||||
|
shift
|
||||||
|
case -noscroll
|
||||||
|
shift
|
||||||
|
case -hide
|
||||||
|
shift
|
||||||
|
}
|
||||||
|
if(~ $#* 0) cmd = rc
|
||||||
|
if not cmd = $*
|
||||||
|
echo -n `{basename $cmd(1)} > /dev/label >[2] /dev/null
|
||||||
|
exec $cmd < /dev/cons > /dev/cons >[2] /dev/cons
|
||||||
|
}
|
||||||
|
}&
|
||||||
|
}
|
||||||
|
|
||||||
|
if not echo new -cd `{pwd} $* >> `{getwctl}
|
10
arch/rc/aux/rio/wloc
Executable file
10
arch/rc/aux/rio/wloc
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
|
||||||
|
rfork e
|
||||||
|
ifs='
|
||||||
|
'
|
||||||
|
|
||||||
|
for(i in `{ls /dev/wsys}) {
|
||||||
|
echo window -r `{syscall -o read 0 buf 59 < $i/window >[2] /dev/null |
|
||||||
|
sed 's/............//; s/^ *//; s/ */ /g'} `{cat $i/label}
|
||||||
|
}
|
45
arch/rc/aux/usb/usbrc
Executable file
45
arch/rc/aux/usb/usbrc
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
|
||||||
|
if(! test -e '#σ/usb/usbevent')
|
||||||
|
exit
|
||||||
|
if(! bind -a '#u' /dev)
|
||||||
|
exit
|
||||||
|
@{
|
||||||
|
rfork ne
|
||||||
|
fn attach {
|
||||||
|
id=$1
|
||||||
|
if(~ $#* 5 && ! test -e /env/nousbhname)
|
||||||
|
id=$1:$5
|
||||||
|
switch($4){
|
||||||
|
case *01
|
||||||
|
usb/audio $id
|
||||||
|
case *02
|
||||||
|
# serial and ethernet
|
||||||
|
usb/serial $id
|
||||||
|
# handled /sys/src/kern/boot/nusbrc
|
||||||
|
# usb/ether $id
|
||||||
|
case *03
|
||||||
|
# handled /sys/src/kern/boot/nusbrc
|
||||||
|
# usb/kb $id
|
||||||
|
case *08
|
||||||
|
# handled /sys/src/kern/boot/nusbrc
|
||||||
|
# usb/disk $id
|
||||||
|
case 010106
|
||||||
|
usb/ptp $id
|
||||||
|
case *
|
||||||
|
# HUAWEI E220 modem
|
||||||
|
if(~ $2$3 12d11003)
|
||||||
|
usb/serial $id
|
||||||
|
# FTDI
|
||||||
|
if(~ $2 0403)
|
||||||
|
usb/serial $id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn detach {
|
||||||
|
# handled /sys/src/kern/boot/nusbrc
|
||||||
|
}
|
||||||
|
rc < '#σ/usb/usbevent' &
|
||||||
|
}
|
||||||
|
|
||||||
|
bind -qa '#σ/usb' /dev
|
||||||
|
bind -qa '#σ/usbnet' /net
|
9
arch/rc/cmd/dircp
Executable file
9
arch/rc/cmd/dircp
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# dircp src dest - copy a tree with tar
|
||||||
|
switch($#*){
|
||||||
|
case 2
|
||||||
|
@ {builtin cd $1 && tar cif /fd/1 .} | @ {builtin cd $2 && tar xTf /fd/0}
|
||||||
|
case *
|
||||||
|
echo usage: dircp from to >[1=2]
|
||||||
|
exit usage
|
||||||
|
}
|
42
arch/rc/cmd/diskparts
Executable file
42
arch/rc/cmd/diskparts
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
rfork e
|
||||||
|
|
||||||
|
# note that really big disks (e.g., aoe devices) may have no mbr
|
||||||
|
# partition table because the mbr partition table can't cope with large
|
||||||
|
# block numbers, so we may have to examine the data file with prep if
|
||||||
|
# there's no plan9 file. beware that `disk/prep -p data' on a disk with
|
||||||
|
# no plan 9 partition table will delete all extant partitions.
|
||||||
|
fn setup {
|
||||||
|
if(test -f $1/data && test -f $1/ctl)
|
||||||
|
{@{disk/fdisk -p $1/data} |
|
||||||
|
grep -v '^delpart ' >$1/ctl } >[2]/dev/null
|
||||||
|
if(test -f $1/plan9)
|
||||||
|
parts=($1/plan9*)
|
||||||
|
if not
|
||||||
|
parts=($1/data)
|
||||||
|
for(part in $parts)
|
||||||
|
if(test -f $part)
|
||||||
|
{ disk/prep -p $part |
|
||||||
|
grep -v '^delpart ' >$1/ctl } >[2]/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
if(~ $#* 0){
|
||||||
|
# set up any disk partitions
|
||||||
|
if (! test -e /dev/sdctl)
|
||||||
|
bind -b '#S' /dev
|
||||||
|
for(disk in /dev/sd*) {
|
||||||
|
setup $disk
|
||||||
|
}
|
||||||
|
sysname=`{cat /dev/sysname}
|
||||||
|
# set up any fs(3) partitions
|
||||||
|
if (! test -e /dev/fs/ctl && test -e '#k/fs')
|
||||||
|
bind -b '#k' /dev
|
||||||
|
if (~ $#sysname 1 && ! ~ $sysname '' &&
|
||||||
|
test -r /cfg/$sysname/fsconfig && test -w /dev/fs/ctl)
|
||||||
|
awk '{print $0; fflush}' /cfg/$sysname/fsconfig >/dev/fs/ctl
|
||||||
|
}
|
||||||
|
if not {
|
||||||
|
for(disk) {
|
||||||
|
setup $disk
|
||||||
|
}
|
||||||
|
}
|
10
arch/rc/cmd/dontkill
Executable file
10
arch/rc/cmd/dontkill
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# dontkill regexp - mark invoker's processes with names matching regexp
|
||||||
|
# as not killable when the kernel runs out of memory
|
||||||
|
if (! ~ $#* 1) {
|
||||||
|
echo $0 regexp >[1=2]
|
||||||
|
exit usage
|
||||||
|
}
|
||||||
|
# see /sys/src/kern/port/proc.c:/^killbig
|
||||||
|
pids=`{psu | awk '$NF ~ /'$1'/ {print $2}'}
|
||||||
|
~ $#pids 0 || chmod -w $pids^/ctl >[2]/dev/null
|
79
arch/rc/cmd/fstype
Executable file
79
arch/rc/cmd/fstype
Executable file
@ -0,0 +1,79 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
rfork e
|
||||||
|
m=`{dd -if $1 -bs 2048 -skip 16 >[2]/dev/null | xd -c | sed 1q | \
|
||||||
|
sed 's/.........(....................).*/\1/; s/ //g'}
|
||||||
|
if(~ $"m 01CD00101){
|
||||||
|
echo 9660
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
fn fat {
|
||||||
|
m=`{dd -if $1 -bs 1 -count 3 -skip $2 >[2]/dev/null}
|
||||||
|
~ $"m FAT
|
||||||
|
}
|
||||||
|
if(fat $1 54 || fat $1 82){
|
||||||
|
echo dos
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
m=`{dd -if $1 -bs 4 -count 1 >[2]/dev/null | xd | sed 's,0000000 ,,;q'}
|
||||||
|
if(~ $"m 529ab12b){
|
||||||
|
echo paqfs
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
if(~ $"m 011ce50d){
|
||||||
|
echo hjfs
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
m=`{dd -if $1 -bs 16 -count 1 -skip 16 >[2]/dev/null}
|
||||||
|
if(~ $"m 'kfs wren device'){
|
||||||
|
echo kfs
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
dd -if $1 -count 1 >[2]/dev/null | \
|
||||||
|
awk '
|
||||||
|
/^(blocksize|daddrbits|daddrbits|indirblks|dirblks|namelen)/{p[$1]=$2}
|
||||||
|
END{
|
||||||
|
ca["fs", "blocksize"] = 4*1024
|
||||||
|
ca["fs", "namelen"] = 28
|
||||||
|
ca["fs", "dirblks"] = 6
|
||||||
|
ca["fs", "indirblks"] = 2
|
||||||
|
ca["fs", "daddrbits"] = 32
|
||||||
|
|
||||||
|
ca["fs64", "blocksize"] = 8*1024
|
||||||
|
ca["fs64", "namelen"] = 56
|
||||||
|
ca["fs64", "dirblks"] = 6
|
||||||
|
ca["fs64", "indirblks"] = 4
|
||||||
|
ca["fs64", "daddrbits"] = 64
|
||||||
|
|
||||||
|
ca["cwfs", "blocksize"] = 16*1024
|
||||||
|
ca["cwfs", "namelen"] = 28
|
||||||
|
ca["cwfs", "dirblks"] = 6
|
||||||
|
ca["cwfs", "indirblks"] = 2
|
||||||
|
ca["cwfs", "daddrbits"] = 32
|
||||||
|
|
||||||
|
ca["cwfs64", "blocksize"] = 16*1024
|
||||||
|
ca["cwfs64", "namelen"] = 56
|
||||||
|
ca["cwfs64", "dirblks"] = 6
|
||||||
|
ca["cwfs64", "indirblks"] = 4
|
||||||
|
ca["cwfs64", "daddrbits"] = 64
|
||||||
|
|
||||||
|
ca["cwfs64x", "blocksize"] = 16*1024
|
||||||
|
ca["cwfs64x", "namelen"] = 144
|
||||||
|
ca["cwfs64x", "dirblks"] = 6
|
||||||
|
ca["cwfs64x", "indirblks"] = 4
|
||||||
|
ca["cwfs64x", "daddrbits"] = 64
|
||||||
|
|
||||||
|
for(e in ca){
|
||||||
|
split(e, k, SUBSEP)
|
||||||
|
if(ca[k[1],k[2]] == p[k[2]])
|
||||||
|
fs[k[1]]++
|
||||||
|
}
|
||||||
|
for(i in fs)
|
||||||
|
if(fs[i] > fs[j])
|
||||||
|
j=i
|
||||||
|
if(fs[j]){
|
||||||
|
print j
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
'
|
2
arch/rc/cmd/lc
Executable file
2
arch/rc/cmd/lc
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
ls -pF $* | mc
|
20
arch/rc/cmd/psu
Executable file
20
arch/rc/cmd/psu
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# psu - ps for just one user
|
||||||
|
rfork e
|
||||||
|
flags=()
|
||||||
|
while (! ~ $#* 0 && ~ $1 -*) {
|
||||||
|
flags = ($flags $1)
|
||||||
|
shift
|
||||||
|
}
|
||||||
|
|
||||||
|
# sed -n p rather than grep so that we get buffered writes.
|
||||||
|
# this is a huge difference in drawterm.
|
||||||
|
switch($#*){
|
||||||
|
case 0
|
||||||
|
ps $flags | sed -n '/^'$user' /p'
|
||||||
|
case 1
|
||||||
|
ps $flags | sed -n '/^'$1' /p'
|
||||||
|
case *
|
||||||
|
echo Usage: psu '[ps-flags] [ user ]' >[1=2]
|
||||||
|
exit usage
|
||||||
|
}
|
34
arch/rc/lib/rcmain
Normal file
34
arch/rc/lib/rcmain
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# rcmain: Plan 9 version
|
||||||
|
if(~ $#home 0) home=/
|
||||||
|
if(~ $#ifs 0) ifs='
|
||||||
|
'
|
||||||
|
switch($#prompt){
|
||||||
|
case 0
|
||||||
|
prompt=('% ' ' ')
|
||||||
|
case 1
|
||||||
|
prompt=($prompt ' ')
|
||||||
|
}
|
||||||
|
if(~ $rcname ?.out) prompt=('broken! ' ' ')
|
||||||
|
if(flag p) path=/cmd
|
||||||
|
if not{
|
||||||
|
finit
|
||||||
|
if(~ $#path 0) path=(. /cmd)
|
||||||
|
}
|
||||||
|
fn sigexit
|
||||||
|
if(! ~ $#cflag 0){
|
||||||
|
if(flag l && /cmd/test -r $home/lib/profile) . $home/lib/profile
|
||||||
|
status=''
|
||||||
|
eval $cflag
|
||||||
|
}
|
||||||
|
if not if(flag i){
|
||||||
|
if(flag l && /cmd/test -r $home/lib/profile) . $home/lib/profile
|
||||||
|
status=''
|
||||||
|
if(! ~ $#* 0) . $*
|
||||||
|
. -i '#d/0'
|
||||||
|
}
|
||||||
|
if not if(~ $#* 0) . '#d/0'
|
||||||
|
if not{
|
||||||
|
status=''
|
||||||
|
. $*
|
||||||
|
}
|
||||||
|
exit $status
|
87
arch/rc/lib/startup/cpu
Executable file
87
arch/rc/lib/startup/cpu
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# cpu server start up
|
||||||
|
date > /env/boottime
|
||||||
|
|
||||||
|
# mount points
|
||||||
|
mntgen -s slashn && chmod 666 /srv/slashn
|
||||||
|
|
||||||
|
# name translation, cs sets /dev/sysname
|
||||||
|
ndb/cs
|
||||||
|
sysname=`{cat /dev/sysname}
|
||||||
|
|
||||||
|
# parallelism for mk
|
||||||
|
NPROC = `{wc -l </dev/sysstat}
|
||||||
|
|
||||||
|
# site-specific startup
|
||||||
|
if(test -e /arch/rc/cmd/cpurc.local)
|
||||||
|
. /arch/rc/cmd/cpurc.local
|
||||||
|
|
||||||
|
if (~ $#sysname 0 || ~ $sysname '') {
|
||||||
|
sysname = jehanne # default
|
||||||
|
echo -n $sysname >/dev/sysname
|
||||||
|
}
|
||||||
|
prompt=($sysname^'# ' ' ')
|
||||||
|
|
||||||
|
# cpu-specific startup
|
||||||
|
if(test -e /cfg/$sysname/cpurc)
|
||||||
|
. /cfg/$sysname/cpurc
|
||||||
|
|
||||||
|
# start up internet if we don't already have an address
|
||||||
|
if(! grep u /net/ipselftab | grep -sv 127.0.0.1)
|
||||||
|
ip/ipconfig
|
||||||
|
if(! grep -s 127.0.0.1 /net/ipselftab)
|
||||||
|
ip/ipconfig loopback /dev/null 127.1
|
||||||
|
|
||||||
|
# if we're not a server, start a dns resolver
|
||||||
|
if(! test -e /srv/dns)
|
||||||
|
ndb/dns -r
|
||||||
|
|
||||||
|
# If you are on an auth server, start these before listening:
|
||||||
|
#
|
||||||
|
# auth/keyfs -wp -m /mnt/keys /adm/keys >/dev/null >[2=1]
|
||||||
|
# auth/cron >>/sys/log/cron >[2=1] &
|
||||||
|
|
||||||
|
# keep other bootes processes from creating capabilities
|
||||||
|
rm -f '#¤/caphash'
|
||||||
|
|
||||||
|
# also rename some files on an auth server:
|
||||||
|
#
|
||||||
|
# if(! test -e /arch/rc/cmd/service.auth/tcp567){
|
||||||
|
# mv /arch/rc/cmd/service.auth/authsrv.il566 /arch/rc/cmd/service.auth/il566
|
||||||
|
# mv /arch/rc/cmd/service.auth/authsrv.tcp567 /arch/rc/cmd/service.auth/tcp567
|
||||||
|
# mv /arch/rc/cmd/service/il566 /arch/rc/cmd/service/_il566
|
||||||
|
# mv /arch/rc/cmd/service/tcp567 /arch/rc/cmd/service/_tcp567
|
||||||
|
# }
|
||||||
|
|
||||||
|
# netssh
|
||||||
|
|
||||||
|
# start listeners if it hasn't already been done (dicey check)
|
||||||
|
if(! netstat -n | grep -s 'tcp.*Listen.* (7|9|21|22|23|25|110|113|565|993|17007|17009|17010) .*')
|
||||||
|
ip/listen -q tcp
|
||||||
|
|
||||||
|
# TODO: Removed until awk works
|
||||||
|
#if(! ps|grep -s timesync) {
|
||||||
|
# aux/timesync -n pool.ntp.org
|
||||||
|
# if (test -e '#r/rtc') @ {
|
||||||
|
# sleep 10 # let timesync correct the time
|
||||||
|
# awk '{print $1}' /dev/time >'#r/rtc' # fix hw clock
|
||||||
|
# } &
|
||||||
|
#}
|
||||||
|
|
||||||
|
# cpu-specific late startup
|
||||||
|
if(test -e /cfg/$sysname/cpustart)
|
||||||
|
. /cfg/$sysname/cpustart
|
||||||
|
|
||||||
|
# mode of /proc/*/ctl is inherited across rfork, and sets modes on
|
||||||
|
# other /proc files, such as note, so let listen be killed.
|
||||||
|
#dontkill '^(ipconfig|factotum|mntgen|venti|fossil|cs|dns|reboot)$'
|
||||||
|
|
||||||
|
ip/listen1 -t -v tcp!*!1522 /cmd/hmi/pipeconsole /cmd/rc -m /arch/rc/lib/rcmain -i &
|
||||||
|
if(test ! -e '#s/comconsole')
|
||||||
|
hmi/comconsole '#t/eia0' /cmd/rc -m/arch/rc/lib/rcmain -i &
|
||||||
|
|
||||||
|
echo 'key proto=p9sk1 dom=jehanne user=glenda !password=demodemo' >/mnt/factotum/ctl
|
||||||
|
ip/listen1 -t tcp!*!17010 /cmd/cpu -R &
|
||||||
|
|
||||||
|
# echo `{date} $sysname >>/sys/log/boot
|
||||||
|
exit ''
|
110
arch/rc/lib/startup/terminal
Executable file
110
arch/rc/lib/startup/terminal
Executable file
@ -0,0 +1,110 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# terminal startup
|
||||||
|
TIMESYNCARGS=(-rLa1000000)
|
||||||
|
NDBFILE=/lib/ndb/local
|
||||||
|
|
||||||
|
mntgen -s slashn && chmod 666 /srv/slashn
|
||||||
|
|
||||||
|
# bind all likely devices (#S was bound in boot)
|
||||||
|
for(i in f t m v L P u U '$' Σ κ)
|
||||||
|
/cmd/bind -a '#'^$i /dev >/dev/null >[2=1]
|
||||||
|
rm -f /env/i
|
||||||
|
|
||||||
|
# set up any partitions
|
||||||
|
diskparts
|
||||||
|
|
||||||
|
# start up local swapping
|
||||||
|
disk=`{ls /dev/sd*/swap >[2]/dev/null}
|
||||||
|
if (! ~ $#disk 0)
|
||||||
|
swap $disk(1) >/dev/null >[2=1]
|
||||||
|
rm /env/disk
|
||||||
|
|
||||||
|
# we do this before we have a name. we may need to do network
|
||||||
|
# setup so that we can get a name.
|
||||||
|
if(test -e /arch/rc/cmd/termrc.local)
|
||||||
|
. /arch/rc/cmd/termrc.local
|
||||||
|
|
||||||
|
# cs sets sysname (termrc.local may already have started it so check)
|
||||||
|
if(! test -e /srv/cs && ! test -e /net/cs)
|
||||||
|
ndb/cs -f $NDBFILE
|
||||||
|
sysname=`{cat /dev/sysname}
|
||||||
|
if (~ $#sysname 0 || ~ $sysname '') {
|
||||||
|
sysname = jehanne # default
|
||||||
|
echo -n $sysname >/dev/sysname
|
||||||
|
}
|
||||||
|
|
||||||
|
# machine specific startup (e.g., for devices not probed)
|
||||||
|
if(test -e /cfg/$sysname/termrc)
|
||||||
|
. /cfg/$sysname/termrc
|
||||||
|
|
||||||
|
# start IP on the LAN, if not already configured. diskless terminals
|
||||||
|
# are already configured by now. It's commented out to avoid a long timeout
|
||||||
|
# on startup waiting for DHCP.
|
||||||
|
#
|
||||||
|
# If your site provides DHCP service,
|
||||||
|
#
|
||||||
|
#if(! test -e /net/ipifc/0/ctl)
|
||||||
|
# ip/ipconfig
|
||||||
|
#
|
||||||
|
# Otherwise, see /cfg/$sysname/termrc (/cfg/example/termrc is an example).
|
||||||
|
|
||||||
|
# start dns if we have an internet
|
||||||
|
if(test -e /net/ipifc/0/ctl && ! test -e /srv/dns)
|
||||||
|
ndb/dns -r
|
||||||
|
|
||||||
|
if(! ~ $terminal *vx32*){
|
||||||
|
# start timesync if it isn't running and we weren't told not to
|
||||||
|
if(! ps|grep -s timesync)
|
||||||
|
if(! ~ $TIMESYNCARGS '')
|
||||||
|
ip/timesync $TIMESYNCARGS
|
||||||
|
|
||||||
|
# add the loop-back medium
|
||||||
|
if(! grep -s 127.0.0.1 /net/ipselftab)
|
||||||
|
ip/ipconfig loopback /dev/null 127.1
|
||||||
|
|
||||||
|
# set things up for vmware
|
||||||
|
if(! ~ `{cat /dev/user} none)
|
||||||
|
if(test -e /cmd/aux/vmware)
|
||||||
|
aux/vmware
|
||||||
|
}
|
||||||
|
|
||||||
|
# query user if terminal isn't adequately configured yet
|
||||||
|
if(~ $mouseport ask){
|
||||||
|
echo -n 'mouseport is (ps2, ps2intellimouse, 0, 1, 2)[ps2]: '
|
||||||
|
mouseport=`{read}
|
||||||
|
if(~ $#mouseport 0)
|
||||||
|
mouseport=ps2
|
||||||
|
}
|
||||||
|
if(~ $vgasize ask){
|
||||||
|
echo -n 'vgasize [640x480x8]: '
|
||||||
|
vgasize=`{read}
|
||||||
|
if(~ $#vgasize 0)
|
||||||
|
vgasize=640x480x8
|
||||||
|
}
|
||||||
|
if(~ $monitor ask){
|
||||||
|
echo -n 'monitor is [xga]: '
|
||||||
|
monitor=`{read}
|
||||||
|
if(~ $#monitor 0)
|
||||||
|
monitor=xga
|
||||||
|
}
|
||||||
|
if(test -f /dev/mousectl){
|
||||||
|
switch($mouseport){
|
||||||
|
case ps2 ps2intellimouse 0 1 2
|
||||||
|
hmi/mouse $mouseport
|
||||||
|
ms &
|
||||||
|
# parse vgasize into fields
|
||||||
|
vgasize=`{echo $vgasize}
|
||||||
|
if(! ~ $"monitor '' && ! ~ `{cat /dev/user} none)
|
||||||
|
`{ hmi/realemu && hmi/vga -m $monitor -l $vgasize }
|
||||||
|
if(~ $accupoint 1)
|
||||||
|
pipefile -dr /cmd/aux/accupoint /dev/mouse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# usb listener
|
||||||
|
/arch/rc/aux/usb/usbrc
|
||||||
|
|
||||||
|
if (test -f /dev/apm)
|
||||||
|
aux/apm
|
||||||
|
|
||||||
|
dontkill '^(ipconfig|factotum|mntgen|fossil|cs|dns|listen|reboot)$'
|
@ -1,8 +1,12 @@
|
|||||||
{
|
{
|
||||||
"all": {
|
"all": {
|
||||||
"Projects": [
|
"Projects": [
|
||||||
"/sys/src/klibs.json",
|
"/sys/src/lib/klibs.json",
|
||||||
"/sys/src/libs.json"
|
"/sys/src/lib/libs.json",
|
||||||
|
"/sys/src/cmd/cmds.json",
|
||||||
|
"/sys/src/kern/amd64/workhorse.json",
|
||||||
|
"/sys/src/kern/amd64/",
|
||||||
|
"qa/"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
7
cfg/ndb/local
Normal file
7
cfg/ndb/local
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#
|
||||||
|
# files comprising the database, use as many as you like, see ndb(6)
|
||||||
|
#
|
||||||
|
database=
|
||||||
|
file=/net/ndb
|
||||||
|
file=/lib/ndb/local
|
||||||
|
file=/lib/ndb/common
|
87
cfg/startup
Executable file
87
cfg/startup
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
#!/cmd/rc
|
||||||
|
# cpu server start up
|
||||||
|
date > /env/boottime
|
||||||
|
|
||||||
|
# mount points
|
||||||
|
mntgen -s slashn && chmod 666 /srv/slashn
|
||||||
|
|
||||||
|
# name translation, cs sets /dev/sysname
|
||||||
|
ndb/cs
|
||||||
|
sysname=`{cat /dev/sysname}
|
||||||
|
|
||||||
|
# parallelism for mk
|
||||||
|
NPROC = `{wc -l </dev/sysstat}
|
||||||
|
|
||||||
|
# site-specific startup
|
||||||
|
if(test -e /arch/rc/cmd/cpurc.local)
|
||||||
|
. /arch/rc/cmd/cpurc.local
|
||||||
|
|
||||||
|
if (~ $#sysname 0 || ~ $sysname '') {
|
||||||
|
sysname = jehanne # default
|
||||||
|
echo -n $sysname >/dev/sysname
|
||||||
|
}
|
||||||
|
prompt=($sysname^'# ' ' ')
|
||||||
|
|
||||||
|
# cpu-specific startup
|
||||||
|
if(test -e /cfg/$sysname/cpurc)
|
||||||
|
. /cfg/$sysname/cpurc
|
||||||
|
|
||||||
|
# start up internet if we don't already have an address
|
||||||
|
if(! grep u /net/ipselftab | grep -sv 127.0.0.1)
|
||||||
|
ip/ipconfig
|
||||||
|
if(! grep -s 127.0.0.1 /net/ipselftab)
|
||||||
|
ip/ipconfig loopback /dev/null 127.1
|
||||||
|
|
||||||
|
# if we're not a server, start a dns resolver
|
||||||
|
if(! test -e /srv/dns)
|
||||||
|
ndb/dns -r
|
||||||
|
|
||||||
|
# If you are on an auth server, start these before listening:
|
||||||
|
#
|
||||||
|
# auth/keyfs -wp -m /mnt/keys /adm/keys >/dev/null >[2=1]
|
||||||
|
# auth/cron >>/sys/log/cron >[2=1] &
|
||||||
|
|
||||||
|
# keep other bootes processes from creating capabilities
|
||||||
|
rm -f '#¤/caphash'
|
||||||
|
|
||||||
|
# also rename some files on an auth server:
|
||||||
|
#
|
||||||
|
# if(! test -e /arch/rc/cmd/service.auth/tcp567){
|
||||||
|
# mv /arch/rc/cmd/service.auth/authsrv.il566 /arch/rc/cmd/service.auth/il566
|
||||||
|
# mv /arch/rc/cmd/service.auth/authsrv.tcp567 /arch/rc/cmd/service.auth/tcp567
|
||||||
|
# mv /arch/rc/cmd/service/il566 /arch/rc/cmd/service/_il566
|
||||||
|
# mv /arch/rc/cmd/service/tcp567 /arch/rc/cmd/service/_tcp567
|
||||||
|
# }
|
||||||
|
|
||||||
|
# netssh
|
||||||
|
|
||||||
|
# start listeners if it hasn't already been done (dicey check)
|
||||||
|
if(! netstat -n | grep -s 'tcp.*Listen.* (7|9|21|22|23|25|110|113|565|993|17007|17009|17010) .*')
|
||||||
|
ip/listen -q tcp
|
||||||
|
|
||||||
|
# TODO: Removed until awk works
|
||||||
|
#if(! ps|grep -s timesync) {
|
||||||
|
# aux/timesync -n pool.ntp.org
|
||||||
|
# if (test -e '#r/rtc') @ {
|
||||||
|
# sleep 10 # let timesync correct the time
|
||||||
|
# awk '{print $1}' /dev/time >'#r/rtc' # fix hw clock
|
||||||
|
# } &
|
||||||
|
#}
|
||||||
|
|
||||||
|
# cpu-specific late startup
|
||||||
|
if(test -e /cfg/$sysname/cpustart)
|
||||||
|
. /cfg/$sysname/cpustart
|
||||||
|
|
||||||
|
# mode of /proc/*/ctl is inherited across rfork, and sets modes on
|
||||||
|
# other /proc files, such as note, so let listen be killed.
|
||||||
|
#dontkill '^(ipconfig|factotum|mntgen|venti|fossil|cs|dns|reboot)$'
|
||||||
|
|
||||||
|
ip/listen1 -t -v tcp!*!1522 /cmd/hmi/pipeconsole /cmd/rc -m /arch/rc/lib/rcmain -i &
|
||||||
|
if(test ! -e '#s/comconsole')
|
||||||
|
hmi/comconsole '#t/eia0' /cmd/rc -m/arch/rc/lib/rcmain -i &
|
||||||
|
|
||||||
|
echo 'key proto=p9sk1 dom=jehanne user=glenda !password=demodemo' >/mnt/factotum/ctl
|
||||||
|
ip/listen1 -t tcp!*!17010 /cmd/cpu -R &
|
||||||
|
|
||||||
|
# echo `{date} $sysname >>/sys/log/boot
|
||||||
|
exit ''
|
19
cfg/timezone
Normal file
19
cfg/timezone
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
CET 3600 CES 7200
|
||||||
|
512532000 528256800 543981600 559706400 575431200 591156000
|
||||||
|
606880800 622605600 638330400 654660000 670384800 686109600
|
||||||
|
701834400 717559200 733284000 749008800 764733600 780458400
|
||||||
|
796183200 811908000 828237600 846381600 859687200 877831200
|
||||||
|
891136800 909280800 922586400 941335200 954036000 972784800
|
||||||
|
985485600 1004234400 1017540000 1035684000 1048989600 1067133600
|
||||||
|
1080439200 1099188000 1111888800 1130637600 1143338400 1162087200
|
||||||
|
1174788000 1193536800 1206842400 1224986400 1238292000 1256436000
|
||||||
|
1269741600 1288490400 1301191200 1319940000 1332640800 1351389600
|
||||||
|
1364695200 1382839200 1396144800 1414288800 1427594400 1445738400
|
||||||
|
1459044000 1477792800 1490493600 1509242400 1521943200 1540692000
|
||||||
|
1553997600 1572141600 1585447200 1603591200 1616896800 1635645600
|
||||||
|
1648346400 1667095200 1679796000 1698544800 1711850400 1729994400
|
||||||
|
1743300000 1761444000 1774749600 1792893600 1806199200 1824948000
|
||||||
|
1837648800 1856397600 1869098400 1887847200 1901152800 1919296800
|
||||||
|
1932602400 1950746400 1964052000 1982800800 1995501600 2014250400
|
||||||
|
2026951200 2045700000 2058400800 2077149600 2090455200 2108599200
|
||||||
|
2121904800 2140048800
|
2
hacking
2
hacking
Submodule hacking updated: 6cc262b43b...79eb26540e
3
lib/acme/guide
Normal file
3
lib/acme/guide
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
win
|
||||||
|
aspell file
|
||||||
|
adict -d oed
|
BIN
lib/font/bit/fixed/10x20.0000
Normal file
BIN
lib/font/bit/fixed/10x20.0000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.0100
Normal file
BIN
lib/font/bit/fixed/10x20.0100
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.0200
Normal file
BIN
lib/font/bit/fixed/10x20.0200
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.0300
Normal file
BIN
lib/font/bit/fixed/10x20.0300
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.0400
Normal file
BIN
lib/font/bit/fixed/10x20.0400
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.0500
Normal file
BIN
lib/font/bit/fixed/10x20.0500
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.0600
Normal file
BIN
lib/font/bit/fixed/10x20.0600
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.0E00
Normal file
BIN
lib/font/bit/fixed/10x20.0E00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.1000
Normal file
BIN
lib/font/bit/fixed/10x20.1000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.1200
Normal file
BIN
lib/font/bit/fixed/10x20.1200
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.1300
Normal file
BIN
lib/font/bit/fixed/10x20.1300
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.1600
Normal file
BIN
lib/font/bit/fixed/10x20.1600
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.1D00
Normal file
BIN
lib/font/bit/fixed/10x20.1D00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.1E00
Normal file
BIN
lib/font/bit/fixed/10x20.1E00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.1F00
Normal file
BIN
lib/font/bit/fixed/10x20.1F00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2000
Normal file
BIN
lib/font/bit/fixed/10x20.2000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2100
Normal file
BIN
lib/font/bit/fixed/10x20.2100
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2200
Normal file
BIN
lib/font/bit/fixed/10x20.2200
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2300
Normal file
BIN
lib/font/bit/fixed/10x20.2300
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2400
Normal file
BIN
lib/font/bit/fixed/10x20.2400
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2500
Normal file
BIN
lib/font/bit/fixed/10x20.2500
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2600
Normal file
BIN
lib/font/bit/fixed/10x20.2600
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2700
Normal file
BIN
lib/font/bit/fixed/10x20.2700
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2800
Normal file
BIN
lib/font/bit/fixed/10x20.2800
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2A00
Normal file
BIN
lib/font/bit/fixed/10x20.2A00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.2B00
Normal file
BIN
lib/font/bit/fixed/10x20.2B00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.3000
Normal file
BIN
lib/font/bit/fixed/10x20.3000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.4D00
Normal file
BIN
lib/font/bit/fixed/10x20.4D00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.FB00
Normal file
BIN
lib/font/bit/fixed/10x20.FB00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.FC00
Normal file
BIN
lib/font/bit/fixed/10x20.FC00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.FD00
Normal file
BIN
lib/font/bit/fixed/10x20.FD00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.FE00
Normal file
BIN
lib/font/bit/fixed/10x20.FE00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/10x20.FF00
Normal file
BIN
lib/font/bit/fixed/10x20.FF00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.0000
Normal file
BIN
lib/font/bit/fixed/4x6.0000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.0100
Normal file
BIN
lib/font/bit/fixed/4x6.0100
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.0200
Normal file
BIN
lib/font/bit/fixed/4x6.0200
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.0300
Normal file
BIN
lib/font/bit/fixed/4x6.0300
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.0400
Normal file
BIN
lib/font/bit/fixed/4x6.0400
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.0500
Normal file
BIN
lib/font/bit/fixed/4x6.0500
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.1E00
Normal file
BIN
lib/font/bit/fixed/4x6.1E00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.2000
Normal file
BIN
lib/font/bit/fixed/4x6.2000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.2100
Normal file
BIN
lib/font/bit/fixed/4x6.2100
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.2200
Normal file
BIN
lib/font/bit/fixed/4x6.2200
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.2300
Normal file
BIN
lib/font/bit/fixed/4x6.2300
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.2400
Normal file
BIN
lib/font/bit/fixed/4x6.2400
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.2500
Normal file
BIN
lib/font/bit/fixed/4x6.2500
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.2600
Normal file
BIN
lib/font/bit/fixed/4x6.2600
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/4x6.FF00
Normal file
BIN
lib/font/bit/fixed/4x6.FF00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.0000
Normal file
BIN
lib/font/bit/fixed/5x7.0000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.0100
Normal file
BIN
lib/font/bit/fixed/5x7.0100
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.0200
Normal file
BIN
lib/font/bit/fixed/5x7.0200
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.0300
Normal file
BIN
lib/font/bit/fixed/5x7.0300
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.0400
Normal file
BIN
lib/font/bit/fixed/5x7.0400
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.0500
Normal file
BIN
lib/font/bit/fixed/5x7.0500
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.1600
Normal file
BIN
lib/font/bit/fixed/5x7.1600
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.1E00
Normal file
BIN
lib/font/bit/fixed/5x7.1E00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.1F00
Normal file
BIN
lib/font/bit/fixed/5x7.1F00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2000
Normal file
BIN
lib/font/bit/fixed/5x7.2000
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2100
Normal file
BIN
lib/font/bit/fixed/5x7.2100
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2200
Normal file
BIN
lib/font/bit/fixed/5x7.2200
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2300
Normal file
BIN
lib/font/bit/fixed/5x7.2300
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2400
Normal file
BIN
lib/font/bit/fixed/5x7.2400
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2500
Normal file
BIN
lib/font/bit/fixed/5x7.2500
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2600
Normal file
BIN
lib/font/bit/fixed/5x7.2600
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.2800
Normal file
BIN
lib/font/bit/fixed/5x7.2800
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.FB00
Normal file
BIN
lib/font/bit/fixed/5x7.FB00
Normal file
Binary file not shown.
BIN
lib/font/bit/fixed/5x7.FF00
Normal file
BIN
lib/font/bit/fixed/5x7.FF00
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user