Consider this simple debian package: wolframscript.deb. After unpacking, it has the following file structure:
├── opt
│ └── Wolfram
│ └── WolframScript
│ └── bin
│ └── wolframscript
└── usr
├── local
│ └── share
│ └── man
│ └── man1
│ └── wolframscript.1
└── share
├── icons
│ └── hicolor
│ ├── 128x128
│ │ └── mimetypes
│ │ └── application-vnd.wolfram.wls.png
│ ├── 32x32
│ │ └── mimetypes
│ │ └── application-vnd.wolfram.wls.png
│ └── 64x64
│ └── mimetypes
│ └── application-vnd.wolfram.wls.png
└── mime
└── packages
└── application-vnd.wolfram.wls.xml
The only relevant file is the opt/Wolfram/WolframScript/bin/wolframscript binary (I think). I tried executing this plainly but I get a bash: ./wolframscript: No such file or directory error. How do I make this binary/package usable in NixOS?
EDIT: Answering Bastian's question:
$ file "$F"
opt/Wolfram/WolframScript/bin/wolframscript: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=7df4a6e1ea2c78bdac9b63bdb6a8486dcfa19876, stripped
NixBox:/home/george/Downloads/wolframscriptdeb
$ strace "$F"
execve("opt/Wolfram/WolframScript/bin/wolframscript", ["opt/Wolfram/WolframScript/bin/wo"...], 0x7ffcf5578410 /* 82 vars */) = -1 ENOENT (No such file or directory)
fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
getpid() = 32004
exit_group(1) = ?
+++ exited with 1 +++
$ opt/Wolfram/WolframScript/bin/wolframscript -cloud -code 2+2
bash: opt/Wolfram/WolframScript/bin/wolframscript: No such file or directory
It seems there are libraries missing.
What is the output of
F='opt/Wolfram/WolframScript/bin/wolframscript'
file "$F"
strace "$F"
Related
I have a ROS2 package which is failing to build. I'm following the ROS2 "Setting Up a Robot Simulation (Webots)" tutorial, and when I got to section 6 "Modify the setup.py file", I changed my file like so:
from setuptools import setup
from glob import glob
package_name = 'ad_boxtra'
setup(
name=package_name,
version='0.0.0',
packages=[package_name],
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
('share/' + package_name, glob('launch/*.py')), # include all launch files
('share/' + package_name, glob('resource/*.urdf')), # include all webots-related resource files
('share/' + package_name + '/webots_simulation/worlds', # include desired webots worlds
['worlds/adboxtra_2022_simplified.wbt']),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='redacted',
maintainer_email='redacted',
description="redacted",
license='MIT License',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'my_robot_driver = ad_boxtra.my_robot_driver:main',
],
},
)
I then ran colcon build with debug info from the root of my workspace and got:
user#host:~/my_ws $ colcon build --packages-select ad_boxtra --event-handlers console_direct+
Starting >>> ad_boxtra
running egg_info
writing ../../build/ad_boxtra/ad_boxtra.egg-info/PKG-INFO
writing dependency_links to ../../build/ad_boxtra/ad_boxtra.egg-info/dependency_links.txt
writing entry points to ../../build/ad_boxtra/ad_boxtra.egg-info/entry_points.txt
writing requirements to ../../build/ad_boxtra/ad_boxtra.egg-info/requires.txt
writing top-level names to ../../build/ad_boxtra/ad_boxtra.egg-info/top_level.txt
reading manifest file '../../build/ad_boxtra/ad_boxtra.egg-info/SOURCES.txt'
writing manifest file '../../build/ad_boxtra/ad_boxtra.egg-info/SOURCES.txt'
running build
running build_py
running install
running install_lib
running install_data
error: can't copy 'adboxtra_2022_simplified.wbt': doesn't exist or not a regular file
--- stderr: ad_boxtra
error: can't copy 'adboxtra_2022_simplified.wbt': doesn't exist or not a regular file
---
Failed <<< ad_boxtra [0.63s, exited with code 1]
Summary: 0 packages finished [0.70s]
1 package failed: ad_boxtra
1 package had stderr output: ad_boxtra
---
Failed <<< ad_boxtra [0.62s, exited with code 1]
Summary: 0 packages finished [0.71s]
1 package failed: ad_boxtra
1 package had stderr output: ad_boxtra
Why is this colcon build failing? If it helps, here's my directory tree:
AdBoxtra
├── ad_boxtra
│ ├── __init__.py
│ └── my_robot_driver.py
├── launch
│ └── my_robot_webots.launch.py
├── LICENSE
├── package.xml
├── README.md
├── resource
│ ├── ad_boxtra
│ └── my_robot.urdf
├── setup.cfg
├── setup.py
├── test
│ ├── test_copyright.py
│ ├── test_flake8.py
│ └── test_pep257.py
├── urdf
└── webots_simulation
├── controllers
│ └── arm_sweep
│ └── arm_sweep.py
├── libraries
├── plugins
│ ├── physics
│ ├── remote_controls
│ └── robot_windows
├── protos
└── worlds
└── adboxtra_2022_simplified.wbt
27 directories, 63 files
I did observe that in the install/ directory of my workspace, it seems that share/ad_boxtra/webots_simulation/worlds/ exists, but there's no .wbt files inside it. I don't know why this is though:
$ tree ~/rover_ws/install/ad_boxtra/
/home/redacted/rover_ws/install/ad_boxtra/
├── lib
│ ├── ad_boxtra
│ │ ├── conversationalist
│ │ ├── drive_control_serial
│ │ └── turtle_ad_boxtra
│ └── python3.8
│ └── site-packages
│ ├── ad_boxtra
│ │ ├── conversationalist.py
│ │ ├── drive_control_serial.py
│ │ ├── __init__.py
│ │ ├── my_robot_driver.py
│ │ ├── __pycache__
│ │ │ ├── conversationalist.cpython-38.pyc
│ │ │ ├── drive_control_serial.cpython-38.pyc
│ │ │ ├── __init__.cpython-38.pyc
│ │ │ ├── my_robot_driver.cpython-38.pyc
│ │ │ └── turtle_ad_boxtra.cpython-38.pyc
│ │ └── turtle_ad_boxtra.py
│ └── ad_boxtra-0.0.0-py3.8.egg-info
│ ├── dependency_links.txt
│ ├── entry_points.txt
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ ├── top_level.txt
│ └── zip-safe
└── share
├── ad_boxtra
│ ├── drive_control.launch.py
│ ├── hook
│ │ ├── ament_prefix_path.dsv
│ │ ├── ament_prefix_path.ps1
│ │ ├── ament_prefix_path.sh
│ │ ├── pythonpath.dsv
│ │ ├── pythonpath.ps1
│ │ └── pythonpath.sh
│ ├── my_robot.urdf
│ ├── my_robot_webots.launch.py
│ ├── package.bash
│ ├── package.dsv
│ ├── package.ps1
│ ├── package.sh
│ ├── package.xml
│ ├── package.zsh
│ ├── __pycache__
│ │ └── drive_control.launch.cpython-38.pyc
│ └── webots_simulation
│ └── worlds
├── ament_index
│ └── resource_index
│ └── packages
│ └── ad_boxtra
└── colcon-core
└── packages
└── ad_boxtra
18 directories, 38 files
From the Python documentation:
data_files specifies a sequence of (directory, files) pairs in the following way...
You wrote
('share/' + package_name + '/webots_simulation/worlds',['worlds/adboxtra_2022_simplified.wbt']), but it should be ('share/' + package_name + '/webots_simulation/worlds',['adboxtra_2022_simplified.wbt']).
You could check the build folder too. Just delete build and install and try again. It could be that.
OK so I know how to remove class files from all the jars under a dir. But, now I have different layer from a docker image, each layer is a tar file, and in the tar file there are the jar files.
Can I remove the class files from the jar files, packaged in tar files?
$ tree -L 3
.
├── 29e0fb8afe376cb02219c977cba1c9a80cca895f7f17b72c356f3e25a63337b9
│ ├── json
│ ├── layer.tar
│ └── VERSION
├── 3b75d6634da4d4f4932d2affeabb7454dc51ba160c3833b386c34e328da8f0ba
│ ├── amq # <<<<< this layer is extracted already, and you can see all the jars here. Other layers are not
│ │ ├── activemq-all-5.11.0.redhat-630495.jar
│ │ ├── bin
│ │ ├── conf
│ │ ├── data
│ │ ├── docs
│ │ ├── examples
│ │ ├── lib
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.txt
│ │ ├── webapps
│ │ └── webapps-demo
│ ├── json
│ ├── layer.tar
│ ├── temp
│ └── VERSION
├── c1fa0e994b2d29f60fd2a6caecbe1ac3f987d001903523d60e532b6e08b094f0
│ ├── json
│ ├── layer.tar
│ └── VERSION
├── c8c84a6c1be5bdfc8caafd23082fd725e84f1c9cddb98fd56cad3a62544b2a3c.json
├── ef5088f89fbac64d2d5982ba14492227f60db1221f6bfd6290c6364a2a95a7e3
│ ├── json
│ ├── layer.tar
│ └── VERSION
├── manifest.json
├── repositories
└── script.sh # <<<<< the script is here
So you ask me why?
Well, did you hear people talking about log4j recently? :) I am doing this right now: log4j vulnerability check: how to quickly detect if log4j is used, in mavevn/in an image? "mvn dependency:tree" does not give a full picture
If someone can tell me how to remove these classes from jib maven plugin, that's better. They are from a base image and I doubt we could do that, though.
If my project structure is like this:
├── compose
│ ├── local
│ │ └── django
│ │ ├── Dockerfile
│ │ ├── celery
│ │ │ ├── beat
│ │ │ │ └── start.sh
│ │ │ └── worker
│ │ │ └── start.sh
│ │ └── start.sh
│ └── production
│ ├── caddy
│ │ ├── Caddyfile
│ │ └── Dockerfile.caddy
│ ├── django
│ │ ├── Dockerfile.django
I am calling from root, $ heroku container:push --recursive
However, build will fail citing COPY fail:
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM abiosoft/caddy:0.10.6
---> d8ff070e1cee
Step 2/2 : COPY ./compose/production/caddy/Caddyfile /etc/Caddyfile
COPY failed: stat /var/lib/docker/tmp/docker-builder022230374/compose/production/caddy/Caddyfile: no such file or directory
▸ Error: docker build exited with 1
The actual Dockerfile:
FROM abiosoft/caddy:0.10.6
COPY ./compose/production/caddy/Caddyfile /etc/Caddyfile
I have read this similar stackoverflow post: Dockerfile COPY instruction failing?
Per the top answer, I did believe I'm referencing the file explicitly at build.
I guess not. What am I missing?
I have the following folder structure:
> tree -L 3
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ ├── groovy
│ └── resources
I tried to build docker image containing those folders together with files using the following Dockerfile:
FROM jamesdbloom/docker-java8-maven
USER root
RUN mkdir src
ADD ./src/* ./src/
ADD pom.xm
However, the structure in docker image is different. Particularly, I can no longer find main and test folders.
$ tree -L 3
.
├── pom.xml
├── src
│ ├── groovy
│ │ └── com
│ ├── java
│ │ └── com
│ └── resources
│ ├── ext_sample_input.json
│ ├── hist_sample_input.json
│ └── sample_input.json
Why is it so?
From official documentation:
Note: The directory itself is not copied, just its contents.
Change your ADD statement to:
ADD ./src ./src/
When I try to start erlang release prepared by relx it crashes with reason:
{"init terminating in do_boot",{badarg,[{erl_prim_loader,check_file_result,3,[]},{init,get_boot,1,[]},{init,get_boot,2,[]},{init,do_boot,3,[]}]}}
Directory listing:
├── bin
├── lib
│ ├── asn1-2.0.2
│ │ ├── ebin
│ │ ├── priv
│ │ └── src
│ ├── bear-0.8.1
│ │ ├── ebin
│ │ └── src
│ ├── cache-1.0.0
│ │ ├── ebin
│ │ ├── priv
│ │ └── src
│ ├── cberl-1
│ │ ├── c_src
│ │ ├── ebin
│ │ ├── include
│ │ ├── priv
│ │ └── src
│ ├── compiler-4.9.2
│ │ ├── ebin
│ │ └── src
│ ├── cowboy-0.8.6
│ │ ├── ebin
│ │ └── src
....................
│ ├── crypto-3.0
│ │ ├── ebin
│ │ ├── priv
│ │ │ └── lib
│ │ └── src
└── releases
└── 0.5.2
All libraries on it's own places.
I tried to start application with the command erl -env ERL_LIBS ../libs -erlconto and it successfully started.
It seems, that problem in boot file, but i don't know how to approach this problem.
Any tips or way to solve, please.
Tnx!
I added
{extended_start_script, true}.
to relx.conf an application now work!
Tnx.
This usually happens when OTP application's .app file is missing a required dependency. relx uses the contents of .app to resolve dependencies to go into the release.
Make sure all of your release applications include, at least, kernel and stdlib in the applications tuple in .app.
Here is an example .app file listing kernel, stdlib, and elk as dependencies:
{application, prop, [
{description, "Prop Template Generator"},
{vsn, "0.0.1"},
{registered, []},
{applications, [kernel, stdlib, elk]},
{modules, [prop, prop_otp, prop_generator]},
{env, []}
]}.