Closed Ublimjo closed 6 years ago
Your Arch Linux should be installed even though the configuration part failed for some reason. Use ~/arch/startarch
to start Arch Linux in Termux PRoot. Edit /etc/pacman.d/mirrorlist
, the pacman mirrors file. Run pacman -Syu
to update your Arch Linux. Use locale-gen
to generate locales and tzselect
to set your time zone. Good luck.
$ ~/arch/startarch
proot error: '/bin/env' not found (root = /data/data/com.termux/files/home/arch, cwd = /data/data/com.termux/files/home, $PATH=(null))
fatal error: see proot --help
.
ls -Al arch
?
@Ublimjo https://github.com/sdrausty/TermuxArch/commit/d95d6ee8ecb66bf368171803e442de76a1444040
proot error: '/bin/env' not found
Try reinstalling. Use .setupTermuxArch --purge
to uninstall Arch Linux Termux PRoot from device first. Then run bash setupTermuxArch.sh
again.
ls -Al arch
total 8 drwx------ 3 u0_a849 u0_a849 4096 Jan 22 14:13 root -rwx------ 1 u0_a849 u0_a849 387 Jan 23 15:28 startarch
setupTermuxArch.sh --purge
Run purge to uninstall Arch Linux? [y|n] y
Uninstalling Arch Linux... Uninstalling Arch Linux, nothing to do for /data/data/com.termux/files/usr/bin/startarch. Uninstalling Arch Linux done.
Thank you for using setupTermuxArch.sh
🏁
setupTermuxArch.sh
< 🕛 Your Arch Linux in Termux is installed! Please answer the following questions to complete the Arch Linux configuration.
archsystemconfigs.sh: line 136: etc/motd: No such file or directory archsystemconfigs.sh: line 153: etc/resolv.conf: No such file or directory necessaryfunctions.sh: line 153: etc/locale.gen: No such file or directory
Do you want to use nano
or vi
to edit your Arch Linux configuration files [n|v]? v
Would you like to run locale-gen
to generate the en_US.UTF-8 locale or do you want to edit /etc/locale.gen specifying your preferred language before running locale-gen
? Answer run or edit [r|e]. e
proot error: '/bin/env' not found (root = /data/data/com.termux/files/home/arch, cwd = /data/data/com.termux/files/home, $PATH=(null))
fatal error: see proot --help
.
🕥 < 🕛 Use ./arch/startarch from your $HOME directory to launch Arch Linux in Termux for future sessions. Alternatively copy startarch to your $PATH which is, "/data/data/com.termux/files/home/.autojump/bin:/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets:/data/data/com.termux/files/usr/bin/user/:/data/data/com.termux/files/usr/bin/user/system/".
🕚 < 🕛 Copy startarch
to your $PATH
? [y|n] y
🕦 < 🕛 Copied startarch to /data/data/com.termux/files/usr/bin.
🕛 = 🕛 Termux-wake-lock released. Your Arch Linux in Termux is installed and updated. Use tzselect
to assit in setting your time zone. See https://github.com/sdrausty/TermuxArch/issues/25 "Starting Arch Linux from Termux?" for more information.
proot error: '/bin/env' not found (root = /data/data/com.termux/files/home/arch, cwd = /data/data/com.termux/files/home, $PATH=(null))
fatal error: see proot --help
.
Thank you for using setupTermuxArch.sh
🏁
@Ublimjo Sorry to hear you are still having trouble. Two questions:
1) ls -al ~/arch
? You should have an entire Linux system in this directory, not just
drwx------ 3 u0_a849 u0_a849 4096 Jan 22 14:13 root -rwx------ 1 u0_a849 u0_a849 387 Jan 23 15:28 startarch
Post output from ls -al ~/arch
once more, and du -hs ~/arch
too.
2) Do you have enough free space on device? See install. How much free space do you have?
My data allotment has been consumed by this project and TermuxPovray this month. So checking the image you are using archlinux-bootstrap-2017.03.01-i686.tar.gz is going to take a little while since my data connection speed is very slow at the moment. The i686 image was working fine before. Do you have any idea why the system image might not be unpacking completely on your device? Are you sure that you have enough free space on device?
@Ublimjo you want free space on device to be able to run programs and create. Without free space there is not much you can do. TermuxArch wants as much space as possible since it is a full blown Linux. See results for similarity when space is null:
🕥 < 🕛 Use ./arch/startarch from your $HOME directory to launch Arch Linux in Termux for future sessions. Alternatively copy startarch to your $PATH which is, "/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets".
🕚 < 🕛 Copy startarch
to your $PATH
? [y|n] y
🕦 < 🕛 Copied startarch to /data/data/com.termux/files/usr/bin.
🕛 = 🕛 Termux-wake-lock released. Your Arch Linux in Termux is installed and updated. Use tzselect
to assit in setting your time zone. See https://github.com/sdrausty/TermuxArch/issues/25 "Starting Arch Linux from Termux?" for more information.
proot error: '/bin/env' not found (root = /data/data/com.termux/files/home/arch, cwd = /data/data/com.termux/files/home, $PATH=(null))
fatal error: see proot --help
.
Thank you for using setupTermuxArch.sh
🏁
https://sdrausty.github.io/dfa/ created regarding disk space on device. This is now a submodule https://github.com/sdrausty/TermuxArch/tree/master/scripts/frags in TermuxArch.
setupTermuxArch.sh
now issues a low space warning when a user attempts to install Arch Linux on a device with less than 1G of free space with https://github.com/sdrausty/TermuxArch/commit/8cffa3b9f6adf23403eb9b4bf3deee0ff35df527 this commit.
I'm getting the "/bin/env" issue too. The phone (FP2 running LineageOS) has 24G space free but setupTermuxArch doesn't seem to realize this:
🕛 < 🕛 This setup script will attempt to set Arch Linux up in your Termux environment. When successfully completed, the Linux command prompt will be at your bidding in Arch Linux in Termux PRoot on your smartphone and tablet. If you do not see 🕐 one o'clock below, check your Internet connection and run this script again. Termux package requirements for Arch Linux: OK
🕧 < 🕛 Termux package requirements for Arch Linux: OK
setupTermuxArch.tar.gz 100%[=====================================================================================================================>] 7.46K --.-KB/s in 0.002s
setupTermuxArch.md5 100%[=====================================================================================================================>] 57 --.-KB/s in 0s
setupTermuxArch.tar.gz: OK
🕐 < 🕛 Installation script download: OK
archsystemconfigs.sh: OK
knownconfigurations.sh: OK
necessaryfunctions.sh: OK
printoutstatements.sh: OK
setupTermuxArch.sh: OK
🕜 < 🕛 Installation script integrity: OK
🕑 < 🕛 Detected armv7lAndroid Operating System. Warning! Start thinking about cleaning out some stuff. The user space on this device is just 23415376. This is below the recommended amount of free space to install Arch Linux in Termux PRoot.
🕝 < 🕛 Activating termux-wake-lock. Now downloading ArchLinuxARM-armv7-latest.tar.gz and the corresponding checksum. This may take a long time depending on your Internet connection.
ArchLinuxARM-armv7-latest.tar.gz 100%[=====================================================================================================================>] 328.93M 4.09MB/s in 95s
ArchLinuxARM-armv7-latest.tar.gz.md5 100%[=====================================================================================================================>] 67 --.-KB/s in 0s
🕠 < 🕛 Checking download integrity with md5sum. This may take a little while.
ArchLinuxARM-armv7-latest.tar.gz: OK
🕕 < 🕛 Downloaded files integrity: OK
🕡 < 🕛 Now uncompressing ArchLinuxARM-armv7-latest.tar.gz. This will take much longer! Be patient.
🕙 < 🕛 Your Arch Linux in Termux is installed! Please answer the following questions to complete the Arch Linux configuration.
bash: etc/motd: No such file or directory
bash: etc/resolv.conf: No such file or directory
bash: etc/locale.gen: No such file or directory
Do you want to use `nano` or `vi` to edit your Arch Linux configuration files [n|v]? v
Would you like to run `locale-gen` to generate the en_US.UTF-8 locale or do you want to edit /etc/locale.gen specifying your preferred language before running `locale-gen`? Answer run or edit [r|e]. r
proot error: '/bin/env' not found (root = /data/data/com.termux/files/home/arch, cwd = /data/data/com.termux/files/home, $PATH=(null))
fatal error: see `proot --help`.
🕥 < 🕛 Use ./arch/startarch from your $HOME directory to launch Arch Linux in Termux for future sessions. Alternatively copy startarch to your $PATH which is, "/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets".
🕚 < 🕛 Copy `startarch` to your `$PATH`? [y|n] n
🕛 = 🕛 Termux-wake-lock released. Your Arch Linux in Termux is installed and updated. Use `tzselect` to assit in setting your time zone. See https://github.com/sdrausty/TermuxArch/issues/25 "Starting Arch Linux from Termux?" for more information.
proot error: '/bin/env' not found (root = /data/data/com.termux/files/home/arch, cwd = /data/data/com.termux/files/home, $PATH=(null))
fatal error: see `proot --help`.
Thank you for using `setupTermuxArch.sh` 🏁
Note: "The user space on this device is just 23415376."
Output of "df -H":
Filesystem Size Used Avail Use% Mounted on
tmpfs 967M 643k 966M 1% /dev
tmpfs 967M 0 967M 0% /mnt
/dev/block/mmcblk0p13 2.1G 714M 1.3G 34% /system
/dev/block/mmcblk0p20 27G 3.3G 24G 13% /data
/dev/block/mmcblk0p15 660M 14M 646M 3% /cache
/dev/block/mmcblk0p14 5.1M 5.0M 78k 99% /persist
/dev/block/mmcblk0p1 67M 59M 8.1M 88% /firmware
tmpfs 967M 0 967M 0% /storage
/data/media 27G 3.3G 24G 13% /storage/emulated
tmpfs 967M 0 967M 0% /storage/self
Note "24G".
The problem is with the silly 2>/dev/null
we have no idea what went wrong in the bsdtar -xpf
...
@PluMGMK What is the output of du -hs ~/arch
, ls -al ~/arch
, ls -R ~/arch/root
and dfa
?
@tomty89 Without 2>/device/null
the script is funny to watch in action. A "bloom" option can be implemented. It would let the entire script stay on device for users to modify as desired. Local modifications like setting download mirror would be easier to accomplish. This isn't too difficult to accomplish https://github.com/sdrausty/TermuxArch/issues/32#issuecomment-356813159 manually at present. Try removing the funny 2>dev/null
and watch silly output in the Termux console. How to easily redirect this output via https://github.com/sdrausty/TermuxArch/blob/master/scripts/files/stable/necessaryfunctions.sh#L220 sysinfo to setupTermuxArchdebug$ntime.log
?
du -hs ~/arch
:
44.0K /data/data/com.termux/files/home/arch
ls -al ~/arch
:
total 16
drwx------ 3 u0_a66 u0_a66 4096 Jan 28 23:17 .
drwx------ 17 u0_a66 u0_a66 4096 Jan 28 23:16 ..
drwx------ 3 u0_a66 u0_a66 4096 Jan 28 23:17 root
-rwx------ 1 u0_a66 u0_a66 387 Jan 28 23:17 startarch
ls -R ~/arch/root
:
/data/data/com.termux/files/home/arch/root/:
bin
/data/data/com.termux/files/home/arch/root/bin:
ga gcl gcm gp gpl
dfa
:
23409616
Start thinking about cleaning out some stuff. There's a partition that has just 23409616.
Date Message
Disk report 23409616 on Sun Jan 28 23:45:43 GMT 2018
@sdrausty there shouldn't be any output from bsdtar
(as long as nothing goes wrong) if you also use -0
for the proot
You may also consider redirect to a file instead of /dev/null
@PluMGMK
44.0K /data/data/com.termux/files/home/arch
There should be an entire OS with 100s of megabytes of data here.
bash setupTermuxArch.sh --sysinfo
and ls -aR ~/arch/root
output requested. What kind of device do you have? Try again using the --curl option bash setupTermuxArch.sh --curl
. This will invoke curl
as the download tool. It can be abbreviated to bash setupTermuxArch.sh c
. Also can you post df
output. This should help improve dfa
.
@tomty89
You may also consider redirect to a file instead of /dev/null
Thank you for your reply.
there shouldn't be any output from
bsdtar
(as long as nothing goes wrong) if you also use -0 for theproot
proot --link2symlink bsdtar -xpf $file 2>/dev/null||:
in https://github.com/sdrausty/TermuxArch/blob/master/scripts/files/stable/necessaryfunctions.sh#L164 should read similar to proot -0 --link2symlink bsdtar -xpf $file ||:
? Is this correct?
@sdrausty Yup, and don't forget the x86 line.
@sdrausty btw I think you simply have forgotten -h
/-H
for df
in your dfa
?
Also I am not sure if it matters for any modern Android build but the right way is probably to run df
on the directory bsdtar
works on anyway:
$ pwd
/data/data/com.termux/files/home/arch
$ df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/block/dm-1 49G 29G 19G 61% /data
$
@tomty89 I am grateful for your diagnostics in this issue. Thank you. Something like du ~/arch/*z
is wanted before attempting to unpack. This thread is caused by failed downloads, empty downloads. This is why the files are missing. Can you post the output from dfa
?
don't forget the x86 line
I see references to x86 in the man page. How should x86 be used?
Sorry I don't follow what you mentioned. What I meant was df /storage/emulated/0
in this line should be df -h .
or df -H .
:
https://github.com/sdrausty/TermuxArch/blob/fe186831dccdc2eef54e62d97705f8824d3b3c2a/scripts/files/stable/necessaryfunctions.sh#L212
And in addition to this line:
https://github.com/sdrausty/TermuxArch/blob/fe186831dccdc2eef54e62d97705f8824d3b3c2a/scripts/files/stable/necessaryfunctions.sh#L164
This line should have -0
added for proot
and 2>/dev/null
removed as well:
https://github.com/sdrausty/TermuxArch/blob/fe186831dccdc2eef54e62d97705f8824d3b3c2a/scripts/files/stable/necessaryfunctions.sh#L162
@tomty89 How do you get the -h and -H options to work?
$ df -h .
Filesystem Size Used Free Blksize
-h: No such file or directory
. 24.5G 19.5G 5.0G 4096
$ man df | grep "\-h"
$ man df | grep "\-H"
Well Termux uses the system df
so there will be no man page for it. Maybe in different Android builds the params it takes could vary, I don't know:
$ which df
/data/data/com.termux/files/usr/bin/df
$ cat $(which df)
#!/data/data/com.termux/files/usr/bin/sh
unset LD_LIBRARY_PATH LD_PRELOAD
PATH=$PATH:/system/bin exec /system/bin/df "$@"
$ ls -l /system/bin/df
lrwxr-xr-x 1 root shell 6 Nov 17 13:21 /system/bin/df -> toybox
$ df --help
usage: df [-HPkh] [-t type] [FILESYSTEM ...]
The "disk free" command shows total/used/available disk space for
each filesystem listed on the command line, or all currently mounted
filesystems.
-P The SUSv3 "Pedantic" option
-k Sets units back to 1024 bytes (the default without -P)
-h Human readable output (K=1024)
-H Human readable output (k=1000)
-t type Display only filesystems of this type.
Pedantic provides a slightly less useful output format dictated by Posix,
and sets the units to 512 bytes instead of the default 1024 bytes.
$
Thanks for your insight.
$ which df
/data/data/com.termux/files/usr/bin/df
$ cat $(which df)
#!/data/data/com.termux/files/usr/bin/sh
unset LD_LIBRARY_PATH LD_PRELOAD
PATH=$PATH:/system/bin exec /system/bin/df "$@"
$ ls -l /system/bin/df
lrwxr-xr-x 1 root shell 7 Dec 31 2008 /system/bin/df -> toolbox
$ df --help
Filesystem Size Used Free Blksize
--help: No such file or directory
Evidently our df
s differ.
My device is a Fairphone 2. As I say, I'm running LineageOS (version 14.1 to be precise). As such, my df
is supplied by toybox
as well - ls -l /system/bin/df
:
lrwxr-xr-x 1 root shell 6 Dec 31 2008 /system/bin/df -> toybox
And /system/bin/toybox --version
:
0.7.1-3db42e9e9a17-android
I'll try the --curl
option later.
These two commits: https://github.com/sdrausty/TermuxArch/commit/6cbfc749acb4180941c10f0dc7ecd58f2c0efcaf and https://github.com/sdrausty/TermuxArch/commit/032b7702fc0efa7129c156665838943b10a97315 should close this issue. If not, please comment with setupTermuxArch.sh --sysinfo
and ls -al ~/arch
output.
Now it's just crashing with 404 errors when trying to download the OS image…
🕛 < 🕛 This setup script will attempt to set Arch Linux up in your Termux environment. When successfully completed, Arch Linux shall be available via Termux PRoot on smartphone and tablet. If you do not see 🕐 one o'clock below, check your Internet connection and run this script again.
🕧 < 🕛 Termux package requirements for Arch Linux: OK
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7685 100 7685 0 0 18882 0 --:--:-- --:--:-- --:--:-- 18835
setupTermuxArch.tar.gz: OK
🕐 < 🕛 Installation script download: OK
archsystemconfigs.sh: OK
knownconfigurations.sh: OK
necessaryfunctions.sh: OK
printoutstatements.sh: OK
setupTermuxArch.sh: OK
🕜 < 🕛 Installation script integrity: OK
🕑 < 🕛 Detected armv7lAndroid Operating System. Warning! Start thinking about cleaning out some stuff. The user space on this device is just 23359512. This is below the recommended amount of free space to install Arch Linux in Termux PRoot.
🕝 < 🕛 Activating termux-wake-lock. Now downloading ArchLinuxARM-armv7-latest.tar.gz and the corresponding checksum. This may take a long time depending on your Internet connection.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (22) The requested URL returned error: 404 Not Found
@PluMGMK Thanks for posting you output. Run the script again if it gets a 404. I have gotten a couple of 404s too. Rerunning setupTermuxArch.sh
resolves this. It probably has to do with the round robin mirror.archlinuxarm.org handing the download link over to your geographically nearby server. The third line from the bottom is the round robin server. While the line bellow that is your geographically nearby server that generates the 404. There can be more than one geographically nearby server too. Your connection speed indicates you should take it into account. Ensure that nothing else is gobling bandwidth. Run the script again if it gets a 404.
If the 404 doesn't go away for some reason by itself like it should, edit knownconfiguration.sh
with the mirror of your choosing. See 32#issuecomment for instructions how to specify a mirror. https://archlinuxarm.org/about/mirrors for mirrors and knownconfigurations.sh#L5.
@sdrausty You forgot to remove 2>/dev/null
in https://github.com/sdrausty/TermuxArch/commit/6cbfc749acb4180941c10f0dc7ecd58f2c0efcaf
@sdrausty btw you may want to do a readlink /system/bin/df
check for https://github.com/sdrausty/TermuxArch/blob/fe186831dccdc2eef54e62d97705f8824d3b3c2a/scripts/files/stable/necessaryfunctions.sh#L212
if it returns toolbox
, do df .
; otherwise, do df -h .
🕛 < 🕛 This BASH script will attempt to install Arch Linux in a Termux PRoot environment. When successfully completed, Arch Linux will be available via Termux. If you do not see 🕐 one o'clock below, check your Internet connection.
🕧 < 🕛 Termux package requirements for Arch Linux: OK
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 57 100 57 0 0 18 0 0:00:03 0:00:03 --:--:-- 18
100 7686 100 7686 0 0 2290 0 0:00:03 0:00:03 --:--:-- 3523
setupTermuxArch.tar.gz: OK
🕐 < 🕛 Installation BASH script download: OK
archsystemconfigs.sh: OK
knownconfigurations.sh: OK
necessaryfunctions.sh: OK
printoutstatements.sh: OK
setupTermuxArch.sh: OK
🕜 < 🕛 Installation BASH script integrity: OK
🕑 < 🕛 Detected aarch64 Android Operating System.
🕝 < 🕛 Activating termux-wake-lock. Now downloading ArchLinuxARM-aarch64-latest.tar.gz and the corresponding checksum. This may take a long time depending on your Internet connection.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:16 --:--:--
Okay, I've forced it to use de4.mirror.archlinuxarm.org (as opposed to nl.mirror.archlinuxarm.org which is missing the /os subdir for some reason). But now I'm getting:
archsystemconfigs.sh: line 142: etc/motd: No such file or directory
How can this be?
Seriously, just download it with chrome or whatsoever and run:
mkdir arch
cd arch
proot --link2symlink -0 bsdtar -xpf /sdcard/Download/ArchLinuxARM-armv7-latest.tar.gz
and see what exactly went wrong, because @sdrausty still haven't remove 2>/dev/null
. There's no point keep repeat downloading and guessing.
Okay, I got rid of the 2>/dev/null myself, and it told me bsdtar was being killed with signal 9. When I tried running bsdtar outside of a proot, it wasn't able to get the right permissions, but then when I ran setupTermuxArch.sh again it was happy because all the files were there anyway. Seems to work at last! That signal 9 worries me, and should probably be a separate issue. Anyone else got this on LineageOS 14.1?
@PluMGMK you''ll probably get into trouble at some point with the installation if it wasn't extracted with proot --link2symlink
, as hard link does not work in Android/Termux. Also if proot
doesn't work in your phone, you cannot "start" Arch anyway.
Nah, it starts fine. Seems bsdtar was the problem, not proot itself.
@PluMGMK still you'll catch problems with it because of the missing links. You may want to try GNU tar instead.
Actually busybox tar might even work better coz it doesn't spit tons of header keyword ignored message like GNU tar does
https://github.com/sdrausty/TermuxArch/releases/tag/0.6
TermuxArch v0.6 Arch Linux in Termux PRoot See https://sdrausty.github.io/TermuxArch/docs/install for installation instructions.
Thanks for the heads up, assistance in diagnostics and suggestions.
bash ~/setupTermuxArch.sh --help
has new information regarding topics discussed in this thread with this https://github.com/sdrausty/TermuxArch/commit/abc7e5531682a293fdb67248b387f2731ed2bd1d update.
@PluMGMK bash setupTermuxArch.sh --bloom
deposits the entire script in ~/TermuxArchBloom
for custom modifications. Use bash setupTermuxArch.sh --run
to run the script from ~/TermuxArchBloom
.
@tomty89
busybox tar might even work
Thanks for the suggestion. Arm architectures now use the busybox version oftar
by default https://github.com/sdrausty/TermuxArch/releases/tag/0.8.3 with this release.
🕧 < 🕛 Termux package requirements for Arch Linux: OK
setupTermuxArch.tar.g 100%[======================>] 6.87K --.-KB/s in 0.001s setupTermuxArch.md5 100%[======================>] 77 --.-KB/s in 0s
setupTermuxArch.tar.gz: OK
🕐 < 🕛 Installation script download: OK
archsystemconfigs.sh: OK knownconfigurations.sh: OK necessaryfunctions.sh: OK printoutstatements.sh: OK setupTermuxArch.sh: OK
🕜 < 🕛 Installation script integrity: OK
🕑 < 🕛 Detected i686 Android Operating System.
🕝 < 🕛 Activating termux-wake-lock. Now downloading archlinux-bootstrap-2017.03.01-i686.tar.gz and the corresponding checksum. This may take a long time depending on your Internet connection.
archlinux-bootstrap-2 100%[======================>] 126.70M 849KB/s in 2m 46s md5sums.txt 100%[======================>] 220 --.-KB/s in 0s
🕠 < 🕛 Checking download integrity with md5sum. This may take a little while.
archlinux-bootstrap-2017.03.01-i686.tar.gz: OK
🕕 < 🕛 Downloaded files integrity: OK
🕡 < 🕛 Now uncompressing archlinux-bootstrap-2017.03.01-i686.tar.gz. This will take much longer! Be patient.
🕙 < 🕛 Your Arch Linux in Termux is installed! Please answer the following questions to complete the Arch Linux configuration.
archsystemconfigs.sh: line 136: etc/motd: No such file or directory