NPM在Termux上安装的权利不足以Android -- 6.0-marshmallow 领域 和 permissions 领域 和 termux 领域 android 相关 的问题

Insufficent rights for npm install in Termux on Android


简体版||繁體版
3
vote

问题

中文

我正在尝试在文件夹中安装 abcdefghijklmnabcdefghijklmnNode.js 模块,例如 /data/data/com.termux/files/home/storage/shared/documents/projects/code/js/test-npm ,从rooted android 6运行 npm install 。安装开始,但从未成功,抛出错误和警告,如 npm ERR! cb() never called! WARN tar EPERM: operation not permitted, futime

我应该授予 npm 以及如何?

更新1:尝试运行 npm install /storage/emulated/0/Documents/projects/code/js/test-npm 中,得到了相同的错误。 Termux在Android安装了Apps Manager中有存储访问权限。

english

I'm trying to install a Node.js module in a folder, for example, /data/data/com.termux/files/home/storage/shared/documents/projects/code/js/test-npm, from Termux on rooted Android 6 running npm install. Installation starts, but never succeeds, throwing errors and warnings like npm ERR! cb() never called! and WARN tar EPERM: operation not permitted, futime.

Which permissions should I grant to npm and how?

Update 1: tried running npm install in /storage/emulated/0/Documents/projects/code/js/test-npm, got the same errors. Termux has Storage access permission in Android installed apps manager.

        
 
 

回答列表

4
 
vote
vote
最佳答案
 

WARN tar EPERM: operation not permitted, futime 表示 futime syscall(用于更改文件上次访问和修改时间)失败: EPERM 。来自 utime manpage 1

eperm ...来电者的有效uid与文件的所有者不匹配...

似乎是失败的原因。您使用的是路径: /data/data/com.termux/files/home/storage/shared/ 其实际 /sdcard/ 2 (符号链接到 /storage/emulated/0/ )。它不是实际文件系统,而是一个模拟的 3 底层文件系统的视图( ext4 f2fs )。它具有固定的权限,不支持Linux文件系统的许多功能,包括符号链接和 ioctls ,如 futime0 4

由于固定权限 futime1 中的所有目录和文件始终由User futime2 (Uid futime3 )拥有。因此,在尝试更改文件的时间戳时,返回 futime4 futime5 命令使用 futime6 5 < / sup>具有不同的权限要求。

要避免此问题,不应使用模拟文件系统。 Termux ABCDefghijklmnabcdefghijklmn17 目录在 futime8 futime9 ,因此它是保存文件的好地方。使用e.g. EPERM0 目录。

来自评论:

但是,可以以某种方式创建 EPERM1 中的链接到另一个位置,这将授予Termux为 EPERM2 用于这个遥远的所有子文件夹的所有权限位置?

否在非生根手机上不可能。应用程序可以仅在内部存储中的私有目录(其<代码> ABCDEFGHIJKLMNABCDEFGHIJKLMN23 for TERMUX)和共享存储( EPERM4 )。具有 EPERM5 授予的应用程序可以读取和写入整个 EPERM6 。设备上没有其他地方,其中应用程序可以保存文件 6 。使用selinux EPERM7 EPERM8 ,它可以写入创建的子目录(使用 utime0 中的 abcdefghijklmn29 ) ,但它不打算使用此目录。


链接:

1 <代码> ABCDEFGHIJKLMNABCDEFGHIJKLMN31 MANPAGE
2 如何访问 utime2 在termux之外(使用文件资源管理器)?
3 什么是 utime3
4 如何在 utime4 中制作一个符号链接?
6 其中的Android应用程序存储数据?

 

WARN tar EPERM: operation not permitted, futime indicates that futime syscall (used to change file last access and modification times) fails with error: EPERM. From utime manpage 1:

EPERM ... the caller's effective UID does not match the owner of the file ...

That seems to be the reason of failure. You are using path: /data/data/com.termux/files/home/storage/shared/ which is actually /sdcard/ 2 (symlink to /storage/emulated/0/). It's not an actual filesystem but an emulated 3 view of underlying filesystem (ext4 or f2fs). It has fixed permissions and doesn't support many features of Linux filesystems including symlinks and ioctls like FS_IOC_FIEMAP 4.

Due to fixed permissions all directories and files in /sdcard/ are always owned by user root (UID 0). So while trying to change file's timestamp, Operation not permitted is returned. touch command however uses utimensat 5 which has different permissions requirements.

So to avoid this problem, you should not use emulated filesystem. Termux $HOME directory is on ext4 or f2fs, so it's a good place to save files. Use e.g. /data/data/com.termux/files/home/npm-test directory.

From comments:

But is it possible to somehow create a link inside $HOME to another location, which will grant all the rights that Termux has for $HOME for all the subfolders of this distant location?

No it's not possible on non-rooted phone. Apps can write only to their private directories in internal storage (which is /data/data/com.termux for Termux) and in shared storage (/sdcard/Android/data/com.termux). Apps with Storage permission granted can read and write to whole /sdcard/. There is no other place on device where apps can save files 6. With SELinux disabled or permissive, it's possible to write to a sub-directory created (with adb shell) in /data/local/tmp, but it's not intended use of this directory.


LINKS:

1 utime manpage
2 How do I access $HOME/storage outside of Termux (with a file explorer)?
3 What is /storage/emulated/0/?
4 How can I make a symlink inside /storage/emulated/0?
5 How to change the modified date of a file without root?
6 Where Android apps store data?

 
 

相关问题

1  是否可以在Android上安装“IPRUTE2”?  ( Is it possible to install iproute2 on android ) 
我试图在googleSource的页面中使用 git clone ,但它没有多大。我想从包中使用 ss 命令,但我不知道如何安装它。我的手机是手臂32位。 ...

10  在Termux中使用GCC编译器?  ( Use gcc compiler in termux ) 
我不喜欢默认的c编译 abcdefghijklmnclang 由termux提供。有没有办法在我的任期环境中获得GNU GCC? ...

0  Termux尝试使用ARIA2的YouTube-DL  ( Termux trying youtube dl with aria2 ) 
我是新手和实验,就像标题说我想用aria2 使用youtube-dl 所以这是我的youtube-dl config --cache-dir /sdcard/Download --all-subs --external-downloader "aria2c" --external-downloader-...

1  termux打印到txt  ( Termux print to txt ) 
所以我使用termux和newbie,我想将-help命令从包中保存为txt在内部存储中,具有特定文件名 EX:Youtube-DL - Help,ARIA2C -H,等等 怎么做? ...

1  防止应用被暂停  ( Prevent apps from being suspended ) 
i运行 sshd 在 Termux 窗口中作为我的Galaxy S7上访问文件的主要方式。这效果很好,除了我似乎必须重新运行 sshd 相当频繁。我怀疑这是因为 Termux 被操作系统暂停。我相当肯定,我告诉它不这样做,但无论如何似乎正在发生。使用这些说明,似乎是牛轧糖的日期,作为一个粗略的指导,我已经导航到设置...

20  TERMUX - 如何创建一个可访问的文件的文件目录?  ( Termux how do i create a directory of files accessible outside of termux ) 
我发现,在非生根手机上的其他应用程序中创建的文件和目录是不可访问的。 termux默认的文件夹在哪里? 如何将其设置为使用我可以像es文件资源管理器这样访问的文件夹/文件空间? 或者或许略有不同,我将如何在Termus进行变更,让我们说,默认"下载" 文件夹? 欢呼声。 ...

1  如何在Termux上键入“Control”?  ( How to type control on termux ) 
有一个很好的应用程序"termux" ,可以提供强大的shell环境,而无需获得root权限。但是,触摸屏键盘不包括"控制" 和"ALT" 按钮。但是一些互动程序(例如,Nano,Emacs)需要这些按钮。 是否有任何方法可以添加此按钮,或使用其他方法来替换此按钮? ...

0  这么多WiFi接口在PixElexperience上  ( So many wifi interfaces on pixelexperience ) 
当我尝试连接wifi系统崩溃并不连接。然后我输入 ip link 在Termux上显示迭代件,并显示了许多接口。返回什么: 模式默认组默认qlen 1 链接/环回00:00:00:00:00:00:00:00:00:00:00:00:00:00:+键0:&lt;广播,多播,Master&gt; ...

3  NPM在Termux上安装的权利不足以Android  ( Insufficent rights for npm install in termux on android ) 
我正在尝试在文件夹中安装 abcdefghijklmnabcdefghijklmnNode.js 模块,例如 /data/data/com.termux/files/home/storage/shared/documents/projects/code/js/test-npm ,从rooted android 6运行...

2  无法使用SDCard0作为目录在Android Termux中安装Express(of node.js)  ( Unable to install express of node js in android termux using sdcard0 as direc ) 
我无法在Android Termux中安装Express。我安装了最新的nodejs。 当我使用私人存储时完美地工作,但我正在使用CD / Storage / Sdcard0 / nodejs / test /并获得权限被拒绝错误。在终端的错误消息中,我在终端的错误消息中反复看到 symlink npm insta...




© 2022 it.wenda123.org All Rights Reserved. 问答之家 版权所有