在运行 Debian 的 AWS t4g.micro 实例上的 M1 Mac 上运行argon2 compile 会抛出以下错误。
根据https://stackoverflow.com/a/47274698/4579271,arm64
并aarch64
参考相同的架构。
$ ./argon2 -h
-bash: ./argon2: cannot execute binary file: Exec format error
在运行 Debian 的 AWS t4g.micro 实例上的 M1 Mac 上运行argon2 compile 会抛出以下错误。
根据https://stackoverflow.com/a/47274698/4579271,arm64
并aarch64
参考相同的架构。
$ ./argon2 -h
-bash: ./argon2: cannot execute binary file: Exec format error
我有一个在 docker 中运行的 squid,它没有强制执行配置中定义的时间 ACL。我正在使用在 arm 上运行的https://hub.docker.com/r/ubuntu/squid
这是我在squid.conf中的配置:
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl client1 src 192.168.1.89/32
# times below are in UTC
acl weekday_access time MTWH 6:00-20:30
acl friday_access time F 6:00-21:00
acl saturday_access time A 6:00-21:00
acl sunday_access time S 6:00-20:30
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
http_access allow client1 weekday_access
http_access allow client1 friday_access
http_access allow client1 saturday_access
http_access allow client1 sunday_access
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager !client1
http_access deny manager client1
include /etc/squid/conf.d/*.conf
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern . 0 20% 4320
这是/etc/squid/conf.d/debian.conf中的配置
#
# Squid configuration settings for Debian
#
# Logs are managed by logrotate on Debian
logfile_rotate 0
# For extra security Debian packages only allow
# localhost to use the proxy on new installs
#
http_access allow localnet
碰巧client1的访问永远不会被切断
有人可以帮忙指出配置有什么问题吗?
好的,所以我知道在线浏览 Linux 发行版列表时,如果我有一个来自 Intel/AMD 的通用32 位CPU,在“架构:”下我应该寻找“ i686 ”,而对于64 位,我应该寻找“ x86_64 ”。
但是,如果我的 Chromebook 是 32 位版本的 ChromeOS,而我的 CPU 是“ Rockchip ARMv7 Processor rev 1 (v7l) ”,该怎么办?我怎么知道我可以安装什么 Linux 发行版?手臂?阿梅尔?手臂高频?ARMHFP ?? aarch64 ??? 危险!?我迷路了。
如果我尝试在不支持它的计算机上安装发行版会发生什么?它会阻止我首先安装它,还是会安装但无法启动?
(提前感谢,我正在尝试在我的 Chromebook 上安装 Linux,因为它已达到自动更新到期,并且将不再接收更新。)
我不知道这个问题是否在正确的位置......
过去几年我一直在使用 RaspberryPies,我想知道关于ARM CPU的一般问题,所以我想了解更多关于你们 ARM 的经验......所以问题是:
我最近看到一些云提供商在他们的服务中使用基于 ARM 的 CPU(我确实注意到aws和oracle正在使用它)所以有没有任何商业 CPU 可以在服务器中使用它(当然是 ARM 架构)我可以购买并在 HP Proliant DL380 Gen10 或 DELL 服务器中使用它?我一直在看到AmpereComputing,他们卖了一个非常好的微型计算机,但它显然与一些硬件供应商(Foxxcon、技嘉、超微......)
ARM CPU 可以使用 64 位指令吗?我正在尝试将它们与实际的 64 位进行比较
显然,我可以在这些 ARM CPU 中使用KVM进行虚拟化吗?我也可以使用LXD和 Docker 或Containerd吗?
有没有可以与 Intel(R) Xeon(R) Silver 4110 CPU 相比的 ARM CPU?
我在 AWS 上安装了 Ubuntu18.04 的 ARM 虚拟机。
dpkg & uname 命令显示了这一点,
$ dpkg --print-architecture
arm64
$ uname -m
aarch64
我有一个为 32 位构建的第三方预编译静态库 (.a)。
我知道我无法将 32 位库链接到 64 位应用程序,因此我创建了一个新应用程序,它将链接库并编译为 32 位。此应用程序将使用某种 IPC 机制与其余应用程序(64 位)通信。为了编译这个应用程序,我在我的 cmake 文件中添加了以下标志,
set (CMAKE_CXX_FLAGS "-m32")
但是编译器会抛出这个错误,
c++: error: unrecognized command line option ‘-m32’
我机器上的 c++ 版本是,
$ c++ -v
Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/7/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)
它表明它是用配置选项--enable-multiarch准备的,我想它应该允许我为不同的架构(32 位 ARM)进行编译。
在 stackoverflow 上的另一个线程上说某些 ARM64 机器的硬件可能不支持 32 位应用程序的编译。
我的问题是如何检查我的 ARM64 机器是否能够构建 32 位应用程序?如果它能够构建,那么-m32标志的替代方案是什么?
我目前的设置非常奇特,我可以澄清一下。
我在Pinebook Pro上运行,由 Quad Cortex-A53、64 位 CPU 驱动。操作系统是 64 位版本的 Debian:
$ uname -a
Linux pinebook 4.4.196 #1 SMP Tue Oct 15 16:54:21 EDT 2019 aarch64 GNU/Linux
但是默认情况下只启用了 armhf 架构:
$ dpkg --print-architecture
armhf
因为我想运行 aarch64 二进制文件,所以我添加了相应的架构:
$ dpkg --add-architecture arm64
$ apt update && apt upgrade
$ apt install gcc-6-base:arm64 libc6:arm64 libgcc1:arm64
这没有问题。然而,在这之后,我发现自己无法再运行另一个 32 位二进制文件,因为它突然/lib/ld-linux.so.3
消失了。检查它给了我以下输出。
$ file openocd
openocd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=363651b03c33118c80584e99b6f876c7a8663325, stripped
确实,ld-linux.so.3
失踪了。取而代之的是,我找到了特定于架构的符号链接:
$ ls /lib
aarch64-linux-gnu firmware ld-linux-armhf.so.3 systemd
arm-linux-gnueabihf ifupdown lsb terminfo
cpp init modprobe.d udev
dhcpcd ld-linux-aarch64.so.1 modules
因为我需要ld-linux.so.3
armhf 架构,所以我在下面寻找它/lib/arm-linux-gnueabihf/
,果然在那里。为了解决我的问题,我将它链接到 中/lib
,并且二进制文件再次工作。
$ ln -s /lib/arm-linux-gnueabihf/ld-linux.so.3 /lib/ld-linux.so.3
现在,问题是:要解决这个问题,我不得不直接搞砸/lib
,这并不理想。什么是首选解决方案?
我有一个 ARM 开发板(STM32MP157A-DK1),我正在四处寻找 Linux 映像是如何构建的。
我boot.scr.uimg
在引导分区中有文件。据我所知boot.scr.uimg
是压缩版boot.scr
。
有什么方法可以解压缩/提取原始boot.scr
文件boot.scr.uimg
吗?
这是结果file boot.scr.uimg
:
boot.scr.uimg: u-boot legacy uImage, , Linux/ARM, Script File (Not compressed), 1489 bytes, Thu Jan 1 00:00:00 1970, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xC80D8B27, Data CRC: 0x62B32EA2
printenv
U-Boot CLI 中的结果:
STM32MP> printenv
altbootcmd=run bootcmd
arch=arm
autoload=no
baudrate=115200
board=stm32mp1
board_name=stm32mp157c-dk2
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_device=mmc
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}extlinux/extlinux.conf
boot_instance=0
boot_net_usb_start=true
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_targets=mmc0
bootcmd=run distro_bootcmd
bootcmd_mmc0=setenv devnum 0; run mmc_boot
bootcmd_mmc1=setenv devnum 1; run mmc_boot
bootcmd_mmc2=setenv devnum 2; run mmc_boot
bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
bootcmd_ubifs0=setenv devnum 0; run ubifs_boot
bootcount=2
bootdelay=1
bootlimit=0
cpu=armv7
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
ethaddr=00:80:e1:42:5d:63
fdt_addr_r=0xc4000000
fdt_high=0xffffffff
fdtcontroladdr=ddc3c4f8
initrd_high=0xffffffff
kernel_addr_r=0xc2000000
mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
mtdparts_nand0=2m(fsbl),2m(ssbl1),2m(ssbl2),-(UBI)
mtdparts_nor0=256k(fsbl1),256k(fsbl2),2m(ssbl),256k(logo),-(nor_user)
preboot=echo "Boot over ${boot_device}${boot_instance}!"; if test ${boot_device} = serial; then stm32prog serial ${boot_instance}; else if test ${boot_device} = usb; then stm32prog usb ${boot_instance}; else if test ${boot_device} = mmc; then env set boot;
pxefile_addr_r=0xc4200000
ramdisk_addr_r=0xc4400000
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo Found ${prefix}extlinux/extlinux.conf; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
scriptaddr=0xc4100000
serial#=0038001A3338510A39303435
serverip=192.168.1.1
soc=stm32mp
splashimage=0xc4300000
stderr=serial
stdin=serial
stdout=serial
ubifs_boot=env exists bootubipart || env set bootubipart UBI; env exists bootubivol || env set bootubivol boot; if ubi part ${bootubipart} && ubifsmount ubi${devnum}:${bootubivol}; then setenv devtype ubi; run scan_dev_for_boot; fi
usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi
usb_pgood_delay=2000
vendor=st
Environment size: 3053/4092 bytes
STM32MP>
我对 U-Boot 还没有太多经验,所以我不确定它是否与boot.scr
. 我仍然想知道如何在不访问 U-Boot CLI的情况下boot.scr
从中提取。boot.scr.uimg
我正在一个嵌入式平台上工作,我正在尝试通过 unixODBC 访问 MariaDB。尝试测试与 isql 的连接我得到了响应:
isql -v mydsn myuser mypw
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/libmaodbc.so' : file not found
文件 /usr/lib/libmaodbc.so 存在:
ls -la /usr/lib/libmaodbc.so
-r-xr-xr-x 1 root root 403952 Sep 1 00:00 /usr/lib/libmaodbc.so
所以我认为必须缺少依赖项。
readelf -d /usr/lib/libmaodbc.so
Dynamic section at offset 0x4fb54 contains 30 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libodbcinst.so.2]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [ld-linux-armhf.so.3]
0x0000000e (SONAME) Library soname: [libmaodbc.so]
[...]
我重复了检查 - 所有四个依赖项都存在。
接下来我编写了一个测试程序,它尝试加载共享对象:
#include <iostream>
#include <dlfcn.h>
void tryLoadSo(const std::string& path) {
void* so = dlopen(path.c_str(), RTLD_NOW);
if(so) {
std::cout << "Loaded " << path << "!" << std::endl;
dlclose(so);
} else {
std::cout << "Failed to load " << path << "!" << std::endl;
}
}
int main() {
tryLoadSo("/usr/lib/libmaodbc.so");
tryLoadSo("/usr/lib/libodbcinst.so.2");
tryLoadSo("/usr/lib/libm.so.6");
tryLoadSo("/usr/lib/libc.so.6");
tryLoadSo("/usr/lib/ld-linux-armhf.so.3");
}
输出:
Failed to load /usr/lib/libmaodbc.so!
Loaded /usr/lib/libodbcinst.so.2!
Loaded /usr/lib/libm.so.6!
Loaded /usr/lib/libc.so.6!
Loaded /usr/lib/ld-linux-armhf.so.3!
因此可以加载所有依赖项,但 libmaodbc 不能。
共享对象是否未针对正确的平台进行配置?是的。我将它与 libodbcinst.so.2 进行了比较,以确保:
readelf -h /usr/lib/libmaodbc.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: ARM
Version: 0x1
Entry point address: 0x9a58
Start of program headers: 52 (bytes into file)
Start of section headers: 402952 (bytes into file)
Flags: 0x5000400, Version5 EABI, hard-float ABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 7
Size of section headers: 40 (bytes)
Number of section headers: 25
Section header string table index: 24
readelf -h /usr/lib/libodbcinst.so.2
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: ARM
Version: 0x1
Entry point address: 0x1e60
Start of program headers: 52 (bytes into file)
Start of section headers: 53528 (bytes into file)
Flags: 0x5000400, Version5 EABI, hard-float ABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 6
Size of section headers: 40 (bytes)
Number of section headers: 24
Section header string table index: 23
可能出了什么问题?为什么 libmaodbc.so 不会加载?
我已经在我的 Gemini pda 上安装了 Kali linux。它可以正常启动并且可以正常工作。
我尝试运行apt-get update
then apt-get upgrade
,但第二个命令一直失败。
我得到了the following packages have unmet dependencies
forvim
和。我尝试运行,但这不起作用,因为如果我想修复,我会收到提示,并且我再次收到相同的未满足的包错误,vim-gtk
vim-tiny
apt --fix-broken install
vim
作为最后的手段尝试删除vim,但这也不起作用,我仍然收到有关依赖项的错误。试图在没有任何运气的情况下删除所有 vim 包。
也尝试运行apt-get clean && apt-get purge
,但即使这样也不能解决问题。
不知道为什么此时无法更新。这是我跑步时得到的apt-get upgrade
The following packages have unmet dependencies:
vim: Depends: vim-runtime(= 2:8.1.0875-2) but 2:8.1.0875-1 is installed
vim-gtk : Depends: vim-runtime (= 2:8.1.0875-2) but 2:8.1.0875-1 is installed
vim-tiny: Depends: vim-common (= 2:8.1.0875-1) but 2:8.1.0875-2 is installed
E: Unmet dependencies. Try `apt --fix-broken install` with no packages (or specify a solution).
编辑:似乎无论我尝试安装或删除什么,该消息都会继续弹出。我确实考虑过强制删除 VIM,但它似乎是 Kali 完整打包集的一部分,因此删除它可能会导致依赖该包的其他应用程序出现问题。试图强制安装,强制卸载,没有任何效果。
我可能最终要么回到 Debian,要么在 Gemini 上重新安装发行版,并避免安装 VIM 开始(按照 Gemini kali 发行版安装页面上的说明),不安装所有其他软件包(发行版附带我认为排名前 10 的软件包;不确定,因为这是我第一次使用 Kali,过去我通常的发行版是 Debian)。