Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ghost-CLI 1.5.2 fails in a loop #675

Closed
gh0-0st opened this issue Mar 19, 2018 · 29 comments · Fixed by #680, #738 or #825
Closed

Ghost-CLI 1.5.2 fails in a loop #675

gh0-0st opened this issue Mar 19, 2018 · 29 comments · Fixed by #680, #738 or #825

Comments

@gh0-0st
Copy link

gh0-0st commented Mar 19, 2018

A case exists on the problem see #9511.
Since it's closed, I was told to open another one, which I am doing here.

Issue Summary

When proceeding with the standard "ghostuser" account and use "sudo", on a Debian Stretch Linux (9.4), with NodeJS v8.10.0 installed, I try to install Ghost-CLI v1.5.2, it starts and runs in a loop.

Here are the details below:

Steps to Reproduce

  1. Create a New User
adduser ghostuser
cat /etc/passwd
ghostuser:x:1002:1002:Ghost User,,,:/home/ghostuser:/bin/bash
  1. Super User Privileges
usermod -aG sudo ghostuser
  1. Installation NodeJS v8.10.0 and NPM
ghostuser@host:~$ sudo apt install apt-transport-https
ghostuser@host:~$ curl -sL https://deb.nodesource.com/setup_8.x | bash -
ghostuser@host:~$ sudo apt install -y nodejs
ghostuser@host:~$ sudo apt install -y build-essential
  1. Check NodeJS and NPM versions
ghostuser@host:~$ node -v && npm -v
v8.10.0
5.6.0
  1. Installation Ghost-CLI v1.5.2 (for now the lasted)
ghostuser@host:~$ sudo npm i -g ghost-cli@latest
npm WARN deprecated yarn@1.3.2: It is recommended to install Yarn using the native installation method for your environment. See https://yarnpkg.com/en/docs/install
npm WARN deprecated fs-promise@0.5.0: Use mz or fs-extra^3.0 with Promise Support 
gyp WARN EACCES user "root" does not have permission to access the dev dir "/usr/lib/node_modules/ghost-cli/node_modules/dtrace-provider/.node-gyp/8.10.0"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/lib/node_modules/ghost-cli/node_modules/dtrace-provider/.node-gyp"
...

Sorry but same issue with 'sudo' and need a break 'Ctrl+C' to exit this loop.

BUT, really curious, if repeat install Ghost-CLI, this upgrade and done :

ghostuser@host:~$ sudo npm i -g ghost-cli@latest                                                             
[sudo] Mot de passe de ghostuser : 
npm WARN deprecated yarn@1.3.2: It is recommended to install Yarn using the native installation method for your environment. See https://yarnpkg.com/en/docs/install
npm WARN deprecated fs-promise@0.5.0: Use mz or fs-extra^3.0 with Promise Support                            
/usr/bin/ghost -> /usr/lib/node_modules/ghost-cli/bin/ghost                                                  
+ ghost-cli@1.5.2
updated 1 package in 7.703s

Check :

ghostuser@host:~$ ghost version                                                                              
Ghost-CLI version: 1.5.2

I repeated the same test twice and it reproduces the same problem well:
first install failed in loop, break this with Ctrl+C and try second install, this indicate rollback then upgrade and done.

@aileen
Copy link
Member

aileen commented Mar 19, 2018

@acburdine

I can actually reproduce this 100% with the recommended stack as well. Following our install instructions step by step and word by word, but using node 8 instead of 6 results in the loop just as described when running sudo npm i -g ghost-cli. The second execution then works fine.

@acburdine
Copy link
Member

acburdine commented Mar 19, 2018

Gonna close this because this isn't a CLI issue, and is rather an issue with npm/node-gyp. According to this issue, the fix is to install with sudo npm install -g --unsafe-perm ghost-cli.

There's not much that I can do to remove the gyp dependency short of removing our dependency on ghost-ignition (which we use for a couple of things).

@kirrg001 kirrg001 added docs and removed bug labels Mar 20, 2018
@kirrg001
Copy link
Contributor

kirrg001 commented Mar 20, 2018

@acburdine

This definitely needs documentation on https://docs.ghost.org.
It's 100% reproducible. I can't install the CLI and i can't install a blog (with Node v8). I agree --unsafe-perm was designed to enable root permissions for npm scripts.

@kirrg001 kirrg001 reopened this Mar 20, 2018
@aileen
Copy link
Member

aileen commented Mar 20, 2018

@acburdine

Setting up a new droplet and installing Node 8 and CLI with sudo npm install -g --unsafe-perm ghost-cli is also not possible for me. At the moment I can't get the CLI working with Node 8.

The first run with sudo npm install -g --unsafe-perm ghost-cli results in this error:

gyp ERR! build error
gyp ERR! stack Error: not found: make
gyp ERR! stack     at getNotFoundError (/usr/lib/node_modules/npm/node_modules/which/which.js:13:12)
gyp ERR! stack     at F (/usr/lib/node_modules/npm/node_modules/which/which.js:68:19)
gyp ERR! stack     at E (/usr/lib/node_modules/npm/node_modules/which/which.js:80:29)
gyp ERR! stack     at /usr/lib/node_modules/npm/node_modules/which/which.js:89:16
gyp ERR! stack     at /usr/lib/node_modules/npm/node_modules/which/node_modules/isexe/index.js:42:5
gyp ERR! stack     at /usr/lib/node_modules/npm/node_modules/which/node_modules/isexe/mode.js:8:5
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:152:21)
gyp ERR! System Linux 4.4.0-116-generic
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/ghost-cli/node_modules/dtrace-provider
gyp ERR! node -v v8.10.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
+ ghost-cli@1.5.2
added 470 packages in 22.868s

A second try seems to work at first but asking for the installed ghost version (ghost -v) results in this (it worked fine after the third time):

/usr/lib/node_modules/ghost-cli/node_modules/execa/index.js:347
		throw err;
		^

Error: Command failed: /bin/sh -c npm root -g
Error: EACCES: permission denied, scandir '/root'
Unhandled rejection TypeError: Cannot read property 'get' of undefined
    at errorHandler (/usr/lib/node_modules/npm/lib/utils/error-handler.js:205:18)
    at /usr/lib/node_modules/npm/bin/npm-cli.js:83:20
    at cb (/usr/lib/node_modules/npm/lib/npm.js:224:22)
    at /usr/lib/node_modules/npm/lib/npm.js:262:24
    at /usr/lib/node_modules/npm/lib/config/core.js:81:7
    at Array.forEach (<anonymous>)
    at /usr/lib/node_modules/npm/lib/config/core.js:80:13
    at f (/usr/lib/node_modules/npm/node_modules/once/once.js:25:25)
    at /usr/lib/node_modules/npm/lib/config/core.js:110:20
    at tryCatcher (/usr/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/usr/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/usr/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:689:18)
    at Async._drainQueue (/usr/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/usr/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:143:10)

┌──────────────────────────────────────────────────────────┐
│                 npm update check failed                  │
│           Try running with sudo or get access            │
│           to the local update config store via           │
│ sudo chown -R $USER:$(id -gn $USER) /home/aileen/.config │
└──────────────────────────────────────────────────────────┘
TypeError: Cannot read property 'loaded' of undefined
    at process.<anonymous> (/usr/lib/node_modules/npm/lib/utils/error-handler.js:40:18)
    at emitOne (events.js:121:20)
    at process.emit (events.js:211:7)
/usr/lib/node_modules/npm/lib/utils/error-handler.js:205
  if (npm.config.get('json')) {
                 ^

TypeError: Cannot read property 'get' of undefined
    at process.errorHandler (/usr/lib/node_modules/npm/lib/utils/error-handler.js:205:18)
    at emitOne (events.js:116:13)
    at process.emit (events.js:211:7)
    at process._fatalException (bootstrap_node.js:375:26)


    at makeError (/usr/lib/node_modules/ghost-cli/node_modules/execa/index.js:169:9)
    at module.exports.sync (/usr/lib/node_modules/ghost-cli/node_modules/execa/index.js:338:15)
    at handleShell (/usr/lib/node_modules/ghost-cli/node_modules/execa/index.js:116:9)
    at Function.module.exports.shellSync (/usr/lib/node_modules/ghost-cli/node_modules/execa/index.js:361:43)
    at findExtensions (/usr/lib/node_modules/ghost-cli/lib/utils/find-extensions.js:22:27)
    at Object.run (/usr/lib/node_modules/ghost-cli/lib/bootstrap.js:96:28)
    at Object.<anonymous> (/usr/lib/node_modules/ghost-cli/bin/ghost:16:11)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:188:16)
    at bootstrap_node.js:609:3

And trying to install ghost then gives me this:

✖ Checking for latest Ghost version
A ProcessError occurred.

Message: Command failed: yarn info ghost versions --json
{"type":"error","data":"An unexpected error occurred: \"EACCES: permission denied, scandir '/home/aileen/.config/yarn/link'\"."}

{"type":"info","data":"If you think this is a bug, please open a bug report with the information provided in \"/var/www/ghost/yarn-error.log\"."}
{"type":"info","data":"Visit https://yarnpkg.com/en/docs/cli/info for documentation about this command."}

Exit code: 1


Debug Information:
    OS: Ubuntu, v16.04
    Node Version: v8.10.0
    Ghost-CLI Version: 1.5.2
    Environment: production
    Command: 'ghost install'

Additional log info available in: /home/aileen/.ghost/logs/ghost-cli-debug-2018-03-20T09_25_02_803Z.log

Try running ghost doctor to check your system for known issues.

@kirrg001 I don't think updating the docs is enough here. Please try it yourself as well, maybe there's a workaround that we can add to the docs, but for now, I couldn't get it working.

@acburdine
Copy link
Member

So after some deliberation on slack, instead of adding docs to try and work around whatever the issue is in npm/node-gyp, we're gonna remove the dependency on ghost-ignition in favor of extracting the prettylogger class (which is the only file from ghost-ignition that is used). That way, the dtrace-provider dependency (pulled in by ghost-ignition) won't be installed.

acburdine added a commit to acburdine/Ghost-CLI that referenced this issue Mar 20, 2018
…m class

closes TryGhost#675 [ci skip]
- drop ghost-ignition dependency
- add pretty-stream class from ghost-ignition
acburdine added a commit to acburdine/Ghost-CLI that referenced this issue Mar 20, 2018
closes TryGhost#675 [ci skip]
- drop ghost-ignition dependency
- add pretty-stream class from ghost-ignition
acburdine added a commit to acburdine/Ghost-CLI that referenced this issue Mar 23, 2018
closes TryGhost#675 [ci skip]
- drop ghost-ignition dependency
- add pretty-stream class from ghost-ignition
acburdine added a commit to acburdine/Ghost-CLI that referenced this issue Mar 25, 2018
closes TryGhost#675
- drop ghost-ignition dependency
- add pretty-stream class from ghost-ignition
acburdine added a commit that referenced this issue Mar 25, 2018
closes #675
- drop ghost-ignition dependency
- add pretty-stream class from ghost-ignition
@kirrg001
Copy link
Contributor

kirrg001 commented Mar 28, 2018

The installation of the CLI 1.6.0 was successfully with Node v8.

But I am still running into on ghost install

{"type":"error","data":"An unexpected error occurred: "EACCES: permission denied, scandir '/home/kirrg001/.config/yarn/link'"."}

Fails on this step

X Checking for latest Ghost version

Fresh container, fresh installation.
I've followed our production installation guide.

ll /home/kirrg001
drwx------ 3 root root 4096 Mar 28 18:03 .config/

@acburdine I think we need to reopen this?

@gh0-0st
Copy link
Author

gh0-0st commented Mar 29, 2018

@kirrg001

I retry fresh installation of ghost via the CLI.

Linux version (it's not an Ubuntu) :

lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 9.4 (stretch)
Release:        9.4
Codename:       stretch

Node and NPM version :

node -v && npm -v                                                        
v8.10.0
5.8.0

I confirmed the installation of the CLI 1.6.0 with Node v8 is successfully now,
the loop has disappeared.

Fresh empty ghost folder :

ghost-admin@zero:/var/www/ghost$ ls -al
total 8
drwxrwxr-x 2 ghost-admin ghost-admin 4096 mars  29 11:53 .
drwxr-xr-x 5 root        root        4096 mars  28 12:59 ..

Ghost installation with the CLI :
I have followed your production installation guide and use ghost super user named 'ghost-admin':
(just need before create 'ghost' system user because without installation failed #676)

ghost-admin@zero:/var/www/ghost$ ghost install
✔ Checking system Node.js version
✔ Checking logged in user
✔ Checking current folder permissions
System checks failed with message: 'Linux version is not Ubuntu 16'
Some features of Ghost-CLI may not work without additional configuration.
For local installs we recommend using `ghost install local` instead.
? Continue anyway? Yes                                                                                       
ℹ Checking operating system compatibility [skipped]                                                          
✔ Checking for a MySQL installation
✔ Checking memory availability
✔ Checking for latest Ghost version                                                                          
✔ Setting up install directory
✔ Downloading and installing Ghost v1.22.0                                                                   
✔ Finishing install process
? Enter your blog URL: http://localhost:2368                                                                 
? Enter your MySQL hostname: localhost                                                                       
? Enter your MySQL username: ghostuser                                                                        
? Enter your MySQL password: [hidden]                                                                        
? Enter your Ghost database name: ghost_prod                                                                 
✔ Configuring Ghost                                                                                          
✔ Setting up instance
Running sudo command: chown -R ghost:ghost /var/www/ghost/content
✔ Setting up "ghost" system user                                                                             
? Do you wish to set up "ghost" mysql user? No                                                               
ℹ Setting up "ghost" mysql user [skipped]                                                                    
? Do you wish to set up Nginx? No                                                                            
ℹ Setting up Nginx [skipped]                                                                                 
Task ssl depends on the 'nginx' stage, which was skipped.
ℹ Setting up SSL [skipped]                                                                                   
? Do you wish to set up Systemd? Yes                                                                         
✔ Creating systemd service file at /var/www/ghost/system/files/ghost_localhost.service                       
Running sudo command: ln -sf /var/www/ghost/system/files/ghost_localhost.service /lib/systemd/system/ghost_localhost.service
Running sudo command: systemctl daemon-reload                                                                
✔ Setting up Systemd                                                                                         
Running sudo command: /var/www/ghost/current/node_modules/.bin/knex-migrator-migrate --init --mgpath /var/www/ghost/current
✔ Running database migrations                                                                                
? Do you want to start Ghost? Yes                                                                            
Running sudo command: systemctl is-active ghost_localhost
✔ Checking if user is logged in with ghost user
✔ Checking if logged in user is directory owner
✔ Checking current folder permissions
Running sudo command: systemctl is-active ghost_localhost
✔ Validating config                                                                                          
✔ Checking folder permissions                                                                                
✔ Checking file permissions                                                                                  
✔ Checking content folder ownership
✔ Checking memory availability
Running sudo command: systemctl start ghost_localhost                                                        
✔ Starting Ghost                                                                                             
Running sudo command: systemctl is-enabled ghost_localhost
Running sudo command: systemctl enable ghost_localhost --quiet                                               
✔ Starting Ghost                                                                                             
You can access your blog at http://localhost:2368/

ghost-admin@zero:/var/www/ghost$ ls -al
total 28
drwxrwxr-x 5 ghost-admin ghost-admin 4096 mars  29 11:54 .
drwxr-xr-x 5 root        root        4096 mars  28 12:59 ..
-rw-r--r-- 1 ghost-admin ghost-admin  492 mars  29 11:54 config.production.json
drwxr-xr-x 7 ghost       ghost       4096 mars  29 11:53 content
lrwxrwxrwx 1 ghost-admin ghost-admin   30 mars  29 11:53 current -> /var/www/ghost/versions/1.22.0
-rw-r--r-- 1 ghost-admin ghost-admin  109 mars  29 11:54 .ghost-cli
drwxr-xr-x 3 ghost-admin ghost-admin 4096 mars  29 11:54 system
drwxr-xr-x 3 ghost-admin ghost-admin 4096 mars  29 11:53 versions
ghost-admin@zero:/home/ghost-admin$ systemctl status ghost_localhost.service 
● ghost_localhost.service - Ghost systemd service for blog: localhost
   Loaded: loaded (/var/www/ghost/system/files/ghost_localhost.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-03-29 11:54:49 JST; 15min ago
     Docs: https://docs.ghost.org
 Main PID: 1359 (ghost run)
    Tasks: 16 (limit: 4915)
   CGroup: /system.slice/ghost_localhost.service
           ├─1359 ghost run
           └─1369 /usr/bin/node current/index.js

ghost-admin@zero:/var/www/ghost$ ghost version
Ghost-CLI version: 1.6.0
Ghost Version (at /var/www/ghost): 1.22.0

For me i think all is fine, I've done it twice but I can't reproduce your issue.

@kirrg001
Copy link
Contributor

@gh0-0st Thank you so much for letting us know 👍
@AileenCGN Can you please also test this on ubuntu? Thx

@aileen
Copy link
Member

aileen commented Apr 10, 2018

@kirrg001
After setting up a fresh droplet with node 8, I ran into the same error you described earlier here.

Listing the /home/aileen/ directory shows that ./config is owned by root:

-rw-r--r-- 1 aileen aileen 3771 Apr 10 05:23 .bashrc
-rw-r--r-- 1 aileen aileen    0 Apr 10 05:23 .cloud-locale-test.skip
drwx------ 3 root   root   4096 Apr 10 05:26 .config/
drwxrwxr-x 3 aileen aileen 4096 Apr 10 05:27 .ghost/
drwxr-xr-x 4 aileen aileen 4096 Apr 10 05:26 .npm/
-rw-r--r-- 1 aileen aileen  655 Apr 10 05:23 .profile
-rw-r--r-- 1 aileen aileen    0 Apr 10 05:24 .sudo_as_admin_successful```

After changing the owner and group to my user `aileen`, the installation process was fine. So yes, the loop is gone, but I'm facing a different issue now.

This is always reproducible for me.

@kirrg001 kirrg001 reopened this Apr 10, 2018
@kirrg001
Copy link
Contributor

@acburdine When do you have time to talk about this issue?

@kirrg001
Copy link
Contributor

90% sure this is caused by: https://www.npmjs.com/package/configstore
This dependency writes a file into ~/.config.
Used by update-notifier dependency. Used here: /lib/utils/update-check.js

The .config folder get's created during the CLI installation.
It will contain a file called update-notifier-npm.json:

{
	"optOut": false,
	"lastUpdateCheck": 1525099880433
}

There must be a postinstall hook somewhere.

acburdine added a commit to acburdine/Ghost-CLI that referenced this issue May 28, 2018
closes TryGhost#675
- remove update-notifier because we weren't using most of its dependencies
- use latest-version and a simple semver check instead
acburdine added a commit that referenced this issue May 28, 2018
closes #675
- remove update-notifier because we weren't using most of its dependencies
- use latest-version and a simple semver check instead
@ghost
Copy link

ghost commented Aug 15, 2018

I tested this on Ubuntu and error appeared. This solution worked for me:

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

https://stackoverflow.com/questions/49529696/yarn-error-eaccess-permission-denied-scandir-home-ubuntu-config-yarn-link

@kirrg001
Copy link
Contributor

I've also got this today. Are we still using the configstore? @acburdine

@acburdine
Copy link
Member

@kirrg001 we shouldn't be, no

@kirrg001
Copy link
Contributor

I was seeing the configstore folder today, that's why i have asked. I installed 1.9 on a fresh container

@vikaspotluri123
Copy link
Member

I think npm also uses the folder for update notifications

@acburdine
Copy link
Member

@vikaspotluri123 you'd be right - npm uses update-notifier, which uses configstore

@kirrg001
Copy link
Contributor

And because we execute the installation of the CLI with sudo, the folder is created with root and creates this permission problem. Hmm.

@kirrg001 kirrg001 reopened this Aug 17, 2018
@kirrg001 kirrg001 added needs info and removed docs labels Aug 17, 2018
@kirrg001
Copy link
Contributor

A quick fix would be to switch yarn info ghost versions --json by npm info ghost versions --json.

This is a bigger underlying permission problem, because yarn tries to write into ~/.config folder, which is owned by root, because we install the CLI with root.

@kirrg001
Copy link
Contributor

A quick fix would be to switch yarn info ghost versions --json by npm info ghost versions --json.

That would work, but also yarn install on the target Ghost version will fail.

@kirrg001
Copy link
Contributor

The only other quick fix i can think of is to use

sudo npm i -g ghost-cli --no-update-notifier in our docs.

@vikaspotluri123
Copy link
Member

If I understand correctly, yarn is trying to read the .config dir to find a .yarnrc config file. I don't have access to an instance at the moment to check, but could we use the --no-default-rc flag? We would have to add a CLI flag to manually enable it for users that are i.e. using a network proxy if that fixes the problem.

@kirrg001
Copy link
Contributor

Had a chat with @ErisDS and we think it would be cool to add a piece of code into the CLI.

So if you call ghost install or any other command, we check if the ~/.config folder is owned by root and if so, we change the permissions. Any concerns?

We really don't wanne tell users to use a different command to install the CLI e.g. add --no-update-notifier or --no-default-rc.

@cmlanche
Copy link

cmlanche commented Sep 4, 2018

here is solution: https://forum.ghost.org/t/an-unexpected-error-occurred-eacces-permission-denied/2834

sudo chown <username>:<username> ~/.config

@acburdine
Copy link
Member

@cmlanche yup - gonna add that into the CLI here soon.

@boovius
Copy link

boovius commented Sep 11, 2018

The yarn error for me was fixed by updating permissions for Yarn - detailed in the following post:

https://stackoverflow.com/questions/49529696/yarn-error-eaccess-permission-denied-scandir-home-ubuntu-config-yarn-link

acburdine added a commit to acburdine/Ghost-CLI that referenced this issue Sep 17, 2018
closes TryGhost#675
- convert update check to a listr task set
- add ~/.config directory check to list of prechecks
acburdine added a commit to acburdine/Ghost-CLI that referenced this issue Sep 17, 2018
closes TryGhost#675
- convert update check to a listr task set
- add ~/.config directory check to list of prechecks
acburdine added a commit that referenced this issue Sep 17, 2018
closes #675
- convert update check to a listr task set
- add ~/.config directory check to list of prechecks
@juan-g
Copy link

juan-g commented Sep 26, 2018

Still getting this with ghost install because of root ownership:

Message: Command failed: yarn info ghost versions --json
{"type":"error","data":"An unexpected error occurred: \"EACCES: permission denied, scandir '/home/[username]/.config/yarn/link'\"."}

(...)

Debug Information:
    OS: Ubuntu, v18.04
    Node Version: v8.12.0
    Ghost-CLI Version: 1.9.4
    Environment: production
    Command: 'ghost install'

So it seems the Ghost-CLI fix is not yet published on npm.

Solved with:

sudo chown -R [username]:[username] ~/.npm
sudo chown -R [username]:[username] ~/.config

@kirrg001
Copy link
Contributor

It was not released cc @acburdine

@enriquegasch2
Copy link

ghostuser:x:1002:1002:Ghost User,,,:/home/ghostuser:/bin/bash

I dont really understand this part, before i added another user that will be easier for me to remember

adduser newuser

Then, when i saw the ghostuser par i decided to also change it, but it throws this:

newuser:x:1002:1002:Ghost: command not found

Can i get some more help with this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment