AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-863301

FalcoGer's questions

Martin Hope
FalcoGer
Asked: 2023-08-26 01:20:57 +0800 CST

默认情况下使用安装选项安装特定的可移动媒体

  • 6

我运行 Ubuntu Mate 22.04,并且有一个使用 btrfs 格式化的 USB 大容量存储设备(又名 USB-Stick)。我知道它的分区 UUID 和标签,并且我希望使用特定的安装选项来安装它。特别是,我希望每次将其插入计算机时都启用文件系统压缩,而不必卸载它,然后使用终端手动重新安装它。

当我插入它时,我通常必须这样做

sudo umount /dev/sdb/
sudo mkdir /media/username/label
sudo mount -t btrfs -o rw,ssd,nosuid,nodev,noatime,space_cache=v2,subvolid=5,subvol=/,uhelper=udisks2,compress=zstd:15,discard=async /dev/disk/by-uuid/<uuid> /media/username/label
sudo chown username:usergroup /media/username/label

我想以某种方式实现自动化。

我怎么做?

编辑

我尝试按照评论中的建议将此行添加到我的 /etc/fstab 中。

UUID=<uuid> /mnt/<label> btrfs rw,ssd,nosuid,nodev,noatime,space_cache=v2,subvolid=5,subvol=/,uhelper=udisks2,compress=zstd:15,discard=async,nofail        0       2

然而,这会导致设备在插入时不再自动安装。当我安装它时,我必须是 root。然后它不再显示在我的文件管理器(caja)的设备中。默认情况下用户也是不可写的。

我想要与正常插入相同的行为,只需使用选项

  • ssd,因为所讨论的设备有些特殊,并且在不旋转时会宣布自己是旋转的),
  • compress=zstd:15,因为无论如何该设备都非常慢并且也有点小并且
  • noatime以延长闪存驱动器的使用寿命

我希望它能够使用这些设置自动安装,但用户也可以写入并显示在文件管理器中。

mount
  • 1 个回答
  • 34 Views
Martin Hope
FalcoGer
Asked: 2023-04-17 23:41:19 +0800 CST

移动 /boot 安装点后修复 GRUB2 UEFI 引导装载程序 MBR

  • 4

我在我的驱动器上安装了基于 debian 的发行版。当我安装它时,/ 挂载点是逻辑分区 (/dev/sda7) 上的 btrfs,而 /boot/efi 的挂载点在 fat32 逻辑分区 (/dev/sda6) 上。

我想使用 grub 的 savedefault 功能,它在 btrfs 上不起作用。所以我用 gparted 和收缩的 /boot/efi (/dev/sda6) 启动了一个实时图像,添加了一个 ext4 分区 /dev/sda8。

之后我调整/etc/fstab使用新的挂载点,然后按照步骤修复grub。

  1. 挂载根文件系统mkdir /tmp/rootfs && mount /dev/sda7 /tmp/rootfs
  2. 将引导驱动器挂载到已挂载的文件系统上mount /dev/sda8 /tmp/rootfs/@/boot
  3. 挂载efi分区mount /dev/sda6 /tmp/rootfs/@/boot/efi
  4. 挂载系统mount --bind /sys /tmp/rootfs/@/sys
  5. 挂载开发mount --bind /dev /tmp/rootfs/@/dev
  6. 挂载过程mount --bind /proc /tmp/rootfs/@/proc
  7. 为了好的措施安装回家mount --bind /tmp/rootfs/@home /tmp/rootfs/@/home
  8. chroot 进入 rootfschroot /tmp/rootfs
  9. 修复 grub,显然

为了修复 grub,我使用了这个命令:

grub-install /dev/sda

它说它是成功的。但是,当我随后尝试启动系统时,出现此错误:

GRUB loading...
Welcome to GRUB!

error: file `/@/boot/grub/i386-pc/normal.mod´ not found.
grub rescue>

当然它在那里找不到它,因为它不在 /@/boot/ 中了。我认为这是 MBR 中第一阶段引导加载程序的错误。我该如何解决?我使用的是 msdos 分区表。

我还设法使用此命令从从 USB 驱动器加载的 grub 引导系统

set root=(hd1,msdos8)
linux /vmlinuz root=LABEL=LinuxRoot rootflags=subvol=@ quiet splash rw
initrd /initrd
boot

我也尝试从那里重新安装 grub,但没有成功。我也试过这个命令,它也没有用(说成功,但重启时出现同样的错误)。

grub-install --bootloader-id=grub --target=x86_64-efi --efi-directory=/boot/efi --no-nvram /dev/sda
boot
  • 2 个回答
  • 37 Views
Martin Hope
FalcoGer
Asked: 2021-09-02 18:42:54 +0800 CST

在 ramdisk (tmpfs) 上运行 cachefilesd 缓存以进行 PXE NFS 引导

  • 0

我正在5.4.0-81-generic从 PXE 运行 ubuntu 20.04 LTS(内核),我希望添加一个本地缓存。因为我不想在所有设备上都有一个分区用于缓存,所以我希望为此目的使用 ramdisk。

在此答案fsc的帮助下,我设法在启动期间启用了该选项。

但是,当我运行该cachefilesd服务时,它失败了,-95: Operation not supported.这可能是因为tmpfs不支持user_xattr,这是必需的。

我在这里读到您可以编译/修补内核以启用user_xattr,尽管这是一个安全风险。除了成为维护的噩梦之外,我不希望走得太远,并且在每次内核更新时都自动化它。

我已经读过这里(德语)和这个以及它的响应。

它表明您可以制作一个 tmpfs,然后制作一个环回设备,将其格式化为 ext4,然后在那里运行您的 fs-cache。

但是,由于我使用的是 PXE 并且 NFS 挂载点是/,我该如何在引导期间执行此操作,最好cachedfilesd.service是在启动之前?

我的引导程序 ( vesamenu.c32)

# [...]
label                   ubuntunfs
        menu label      ^Ubuntu NFS
        text help
Run ubuntu from Network File System.
        endtext
        kernel          ubuntu/boot/vmlinuz
        initrd          ubuntu/boot/initrd.img
        append          root=/dev/nfs nfsroot=192.168.1.5:/srv/tftp/ubuntu,rw,fsc,relatime ip=dhcp rw
# [...]

我的 fstab

/proc    /proc    proc    defaults   0 0
/sys     /sys     sysfs   defaults   0 0
/dev/nfs /        nfs     defaults,relatime,fsc   1 1

# ramdisk for fs-cache for nfs
tmpfs    /media/ramdisk    tmpfs    defaults,size=5%      0       0

none            /tmp            tmpfs   defaults        0       0
none            /var/run        tmpfs   defaults        0       0
none            /var/lock       tmpfs   defaults        0       0
none            /var/tmp        tmpfs   defaults        0       0

我的 /etc/cachefilesd.conf

dir /media/ramdisk
tag mycache
brun 90%
bcull 70%
bstop 30%
frun 90%
fcull 70%
fstop 30%

culltable 14
boot
  • 1 个回答
  • 351 Views
Martin Hope
FalcoGer
Asked: 2021-09-01 08:56:13 +0800 CST

bash 在循环中连接字符串导致空字符串

  • 0

我有以下文件

Hello
World
my
name
is
FalcoGer

我希望连接每一行的字符串。

我编写了以下脚本来做到这一点。

#! /usr/bin/bash
myFile=/home/FalcoGer/testfile.txt

result=""
cat $myFile | while read line
do
  result+="$line "
done

echo Result: $result

但是我只得到Result: 一个空字符串。当我从循环中打印它时,它似乎工作得很好。这个脚本有什么问题,我该如何解决?

bash
  • 1 个回答
  • 713 Views
Martin Hope
FalcoGer
Asked: 2021-08-21 05:19:33 +0800 CST

在 armhf chroot 中的 BOX86 上运行 steamcmd

  • 1

我想使用 steamcmd 在我的树莓派 4 (4GB) 上运行游戏服务器。我已经设置了一个 chroot 和 box86 来运行一个 teampeak 3 服务器。

我正在按照这些说明进行操作,但我被困在第 8 步,即运行 steamcmd.sh。

我已经更改了文件以运行 box86,但是每当我运行 shell 脚本时,它似乎会在执行之前自行更新,从而恢复我的编辑。

#!/usr/bin/env bash

STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
STEAMCMD=`basename "$0" .sh`

UNAME=`uname`
if [ "$UNAME" == "Linux" ]; then
  STEAMEXE="${STEAMROOT}/linux32/${STEAMCMD}"
  PLATFORM="linux32"
  export LD_LIBRARY_PATH="$STEAMROOT/$PLATFORM:$LD_LIBRARY_PATH"
else # if [ "$UNAME" == "Darwin" ]; then
  STEAMEXE="${STEAMROOT}/${STEAMCMD}"
  if [ ! -x ${STEAMEXE} ]; then
    STEAMEXE="${STEAMROOT}/Steam.AppBundle/Steam/Contents/MacOS/${STEAMCMD}"
  fi
  export DYLD_LIBRARY_PATH="$STEAMROOT:$DYLD_LIBRARY_PATH"
  export DYLD_FRAMEWORK_PATH="$STEAMROOT:$DYLD_FRAMEWORK_PATH"
fi

ulimit -n 2048

MAGIC_RESTART_EXITCODE=42

if [ "$DEBUGGER" == "gdb" ] || [ "$DEBUGGER" == "cgdb" ]; then
  ARGSFILE=$(mktemp $USER.steam.gdb.XXXX)

  # Set the LD_PRELOAD varname in the debugger, and unset the global version.
  if [ "$LD_PRELOAD" ]; then
    echo set env LD_PRELOAD=$LD_PRELOAD >> "$ARGSFILE"
    echo show env LD_PRELOAD >> "$ARGSFILE"
    unset LD_PRELOAD
  fi

  $DEBUGGER -x "$ARGSFILE" --args /usr/local/bin/box86 "$STEAMEXE" "$@"
  rm "$ARGSFILE"
else
  $DEBUGGER /usr/local/bin/box86 "$STEAMEXE" "$@"
fi

STATUS=$?

if [ $STATUS -eq $MAGIC_RESTART_EXITCODE ]; then
    exec "$0" "$@"
fi
exit $STATUS

当我运行这个修改后的文件时,我得到了这个:

Box86 with Dynarec v0.2.1 7c0b11e built on May  6 2021 17:03:01
WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'. International characters may not work.
Redirecting stderr to '/root/Steam/logs/stderr.txt'
Looks like steam didn't shutdown cleanly, scheduling immediate update check
[  0%] Checking for available updates...
[----] Verifying installation...
[  0%] Downloading update...
[  0%] Checking for available updates...
[----] Download complete.
[----] Extracting package...
[----] Extracting package...
[----] Extracting package...
[----] Extracting package...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Cleaning up...
[----] Update complete, launching Steamcmd...
/opt/steamcmd/steamcmd.sh: line 37: /opt/steamcmd/linux32/steamcmd: cannot execute binary file: Exec format error

如果我使用不同的文件名,例如steamcmd_custom.sh我得到这个:

Box86 with Dynarec v0.2.1 7c0b11e built on May  6 2021 17:03:01
Error: file is not found (check BOX86_PATH)
./steamcmd_custom.sh: line 38: 71730 Segmentation fault      (core dumped) $DEBUGGER /usr/local/bin/box86 "$STEAMEXE" "$@"

并运行

box86 steamcmd

从/opt/steamcmd/linux32产生我

Box86 with Dynarec v0.2.1 7c0b11e built on May  6 2021 17:03:01
WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'. International characters may not work.
Redirecting stderr to '/root/Steam/logs/stderr.txt'
[  0%] Checking for available updates...
[----] Verifying installation...
[----] !!! Fatal Error: Failed to load steamconsole.so
steam
  • 1 个回答
  • 1578 Views
Martin Hope
FalcoGer
Asked: 2021-05-07 10:10:43 +0800 CST

用于在 chroot 中运行守护进程的 SystemD 服务

  • 1

我已经设置了运行 ubuntu 20.04 服务器的树莓派,因此它可以使用 box86 运行 teampeak。

为此,我ls /srv/chroot/focal-armhf/使用 debootstrap 设置了一个 chroot。在那个目录中,我编译了 box86。然后我下载并安装了 ts3server for x86 on linux。我已经为 schroot 设置了自定义配置。

/etc/schroot/chroot.d/focal-armhf.conf:

[focal-armhf]
description=Ubuntu focal armhf chroot
type=directory
directory=/srv/chroot/focal-armhf
profile=ts3server
personality=linux
# preserve-environment=true
root-users=ubuntu
users=ubuntu

当我在主机上的 bash 中运行以下命令时,一切正常。

# beginn session, name it ts3server
sudo /usr/bin/schroot -n ts3server -b -c chroot:focal-armhf

# run start script. it's the same as the default start script, however I added /usr/local/bin/box86 in front of the starting of the actual server binary.
sudo /usr/bin/schroot --run-session --chroot ts3server -d /opt/ts3server/teamspeak3-server_linux_x86/ './ts3custom.sh' start

# at this point the server is running and i can connect to it.
# ...

# when I want to shut down:
# stopping server
/usr/bin/schroot --run-session --chroot ts3server -d /opt/ts3server/teamspeak3-server_linux_x86/ './ts3custom.sh' stop

# ending schroot session
/usr/bin/schroot -e --chroot ts3server

我现在想用 systemd 自动执行此操作。所以我创建了这个单元配置

[Unit]
Description=Teamspeak3 Server in chroot
After=network.target
After=syslog.target

[Service]
ExecStartPre=/usr/bin/schroot -n ts3server -b -c chroot:focal-armhf
ExecStart=/usr/bin/schroot --run-session --chroot ts3server -d /opt/ts3server/teamspeak3-server_linux_x86/ './ts3custom.sh' start
ExecStop=/usr/bin/schroot --run-session --chroot ts3server -d /opt/ts3server/teamspeak3-server_linux_x86/ './ts3custom.sh' stop
ExecStopPost=/usr/bin/schroot -e --chroot ts3server
Restart=no
Type=simple

[Install]
WantedBy=multi-user.target

当我运行它时,它会立即关闭。teampeak 服务器日志运行是

2021-05-06 17:58:49.429511|INFO    |ServerLibPriv |   |TeamSpeak 3 Server 3.13.3 (2020-12-16 14:17:05)
2021-05-06 17:58:49.456286|INFO    |ServerLibPriv |   |SystemInformation: Linux 5.4.0-1034-raspi #37-Ubuntu SMP PREEMPT Mon Apr 12 23:14:49 UTC 2021 i686 Binary: 32bit
2021-05-06 17:58:49.456975|WARNING |ServerLibPriv |   |The system locale is set to "C" this can cause unexpected behavior. We advice you to repair your locale!
2021-05-06 17:58:49.508403|INFO    |DatabaseQuery |   |dbPlugin name:    SQLite3 plugin, Version 3, (c)TeamSpeak Systems GmbH
2021-05-06 17:58:49.509804|INFO    |DatabaseQuery |   |dbPlugin version: 3.11.1
2021-05-06 17:58:49.553828|INFO    |DatabaseQuery |   |checking database integrity (may take a while)

如果我总是设置重启,它会一遍又一遍地生成相同的日志。
似乎服务器已启动,然后分叉到后台,然后由 systemd 调用 ExecStop。

我试过设置Type=forkingandType=exec和Type=simple,结果都一样。

基本上一切正常,直到我尝试使用 systemd 来管理它。

我怎样才能让它工作?

我特别想要:

  • 随系统自动启动
  • 管理它service ts3server start|stop|restart

为了完整起见,我的自定义脚本来管理 teampeak 服务器:

#!/bin/sh
# Copyright (c) 2019 TeamSpeak Systems GmbH
# All rights reserved

BINARYNAME="./ts3server"
COMMANDLINE_PARAMETERS="" #add any command line parameters you want to pass here
PID_FILE=ts3server.pid

do_start() {
        if [ -e $PID_FILE ]; then
                PID=$(cat "$PID_FILE")
                if (ps -p "$PID" >/dev/null 2>&1); then
                        echo "The server is already running, try restart or stop"
                        return 1
                else
                        echo "$PID_FILE found, but no server running. Possibly your previously started server crashed"
                        echo "Please view the logfile for details."
                        rm $PID_FILE
                fi
        fi
       if [ $(id -u) -eq 0 ]; then
               echo "WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT"
               c=1
               while [ "$c" -le 10 ]; do
                       echo -n "!"
                       sleep 1
                       c=$(($c + 1))
               done
               echo "!"
       fi
        echo "Starting the TeamSpeak 3 server"
        if [ ! -e "$BINARYNAME" ]; then
                echo "Could not find binary, aborting"
                return 5
        fi
        if [ ! -x "$BINARYNAME" ]; then
                echo "${BINARYNAME} is not executable, trying to set it"
                chmod u+x "${BINARYNAME}"
        fi
        if [ ! -x "$BINARYNAME" ]; then
                echo "${BINARNAME} is not exectuable, cannot start TeamSpeak 3 server"
                return 3
        fi
        /usr/local/bin/box86 "./${BINARYNAME}" "${@}" "daemon=1" "pid_file=$PID_FILE"
        if [ $? -eq 0 ]; then
                echo "TeamSpeak 3 server started, for details please view the log file"
        else
                echo "TeamSpeak 3 server could not start"
                return 4
        fi
}

do_stop() {
        if [ ! -e $PID_FILE ]; then
                echo "No server running ($PID_FILE is missing)"
                return 0
        fi
        PID=$(cat "$PID_FILE")
        if (! ps -p "$PID" >/dev/null 2>&1); then
                echo "No server running"
                return 0
        fi

        echo -n "Stopping the TeamSpeak 3 server "
        kill -TERM "$PID" || exit $?
        rm -f $PID_FILE
        c=300
        while [ "$c" -gt 0 ]; do
                if (kill -0 "$PID" 2>/dev/null); then
                        echo -n "."
                        sleep 1
                else
                        break
                fi
                c=$(($c - 1))
        done
        echo
        if [ $c -eq 0 ]; then
                echo "Server is not shutting down cleanly - killing"
                kill -KILL "$PID"
                return $?
        else
                echo "done"
        fi
        return 0
}

do_status() {
        if [ ! -e $PID_FILE ]; then
                echo "No server running ($PID_FILE is missing)"
                return 1
        fi
        PID=$(cat "$PID_FILE")
        if (! ps -p "$PID" >/dev/null 2>&1); then
                echo "Server seems to have died"
                return 1
        fi
        echo "Server is running"
        return 0
}

# change directory to the scripts location
cd $(dirname $([ -x "$(command -v realpath)" ] && realpath "$0" || readlink -f "$0"))

case "$1" in
start)
        shift
        do_start "$@" "$COMMANDLINE_PARAMETERS"
        exit $?
        ;;
stop)
        do_stop
        exit $?
        ;;
restart)
        shift
        do_stop && (do_start "$@" "$COMMANDLINE_PARAMETERS")
        exit $?
        ;;
status)
        do_status
        exit $?
        ;;
*)
        echo "Usage: ${0} {start|stop|restart|status}"
        exit 2
        ;;
esac
server
  • 1 个回答
  • 1343 Views
Martin Hope
FalcoGer
Asked: 2021-05-06 14:00:06 +0800 CST

中止创建后无法删除 chroot

  • 0

我正在尝试设置一个 chroot,然后我跑了

sudo qemu-debootstrap --arch=amd64 stretch /srv/chroot/focal-amd64

在第二阶段,我意识到我想要focal,而不是stretch。复制和粘贴错误。
所以我按 ctrl + c 并想再试一次。

sudo rm -rf /srv/chroot/focal-amd64/*

但是我收到垃圾邮件

rm: cannot remove '/srv/chroot/focal-amd64/proc/[...]': Operation not permitted

我尝试设置对目录的写权限

find -type d | xargs chmod +rwx

有同样的错误。无论我尝试做什么,似乎我都无法再删除该文件夹以重试。

之前,当我让 chroot 创建完成后,我可以删除目录而没有任何问题,只有在我中断这个之后才会发生这种情况。

command-line
  • 1 个回答
  • 332 Views
Martin Hope
FalcoGer
Asked: 2020-04-28 08:38:21 +0800 CST

Ubuntu Mate - 启用 Compose 键(并默认禁用 compose 键行为)

  • 2

我昨天升级到了 ubuntu mate 20.04,现在我的打字就像我永久按下了撰写键一样。如果我想输入,说一个反引号(`)或这个尖锐的(^)我必须按两次键,这很烦人。
我不需要这些字符来输入像 é 这样的东西,而是脚本、正则表达式、markdown 或 vim 等使用它们。所以我经常需要输入这些字符,但我很少需要输入重音字母。

在我能够按下键之前它会立即弹出。如何恢复该功能?

我尝试启用 compose 键(希望它会禁用那个烦人的系统),但它没有帮助。我也尝试过切换105 key generic (intl.)到104 key generic(不是国际),但这也无济于事。
我什至不知道如何用这个词来搜索。

我的键盘布局设置为“德语”,我将撰写键设置为大写锁定,它似乎确实可以做一些事情。就像 compose + c + c = č
但我想要的不管有没有 compose 键集都不起作用。还有什么是“第三级”的东西?

键盘布局设置 撰写键设置

keyboard keyboard-layout ubuntu-mate 20.04
  • 1 个回答
  • 555 Views
Martin Hope
FalcoGer
Asked: 2018-08-24 22:33:40 +0800 CST

无法使用 UBoot + Grub 从 USB 驱动器启动树莓派 3b

  • 1

我已成功将 Ubuntu 18.04 安装到 SD 卡上。为此,我创建了一个 msdos 分区表(pi 不支持 guid),然后将 U-Boot 放到分区 1 上的 SD 卡上(fat32,pi 不支持其他任何东西)。然后我将pi-bootloader粘贴到分区 1 /。然后我也将网络安装程序(mini-iso)中的文件复制到该分区上。整个过程都在这里展开。

SD 卡一切正常。UBoot 启动,然后加载网络安装程序 mini iso 附带的 grub2。反过来,我已经更改了配置,因此它从分区 3 加载了 linux 内核(在我的情况下,p2 是交换)。

所以我拉了一张图片,把它放在一个 USB 驱动器(usb 到 m2 sata 适配器)上,它应该就像任何其他闪存驱动器一样。所以,我打开它。U 启动启动,我没有看到任何与正常不同的地方。然后它加载 grub。但是,它没有显示带有启动 ubuntu 或安装它的选项的漂亮菜单(因为网络安装程序的东西仍然在那里),而是直接将我转储到 grub 控制台。

输入 ls I get (memdisk),仅此而已。它似乎没有找到它实际从自身加载的 USB 驱动器。在那个 memdisk 上是一个位于 (memdisk)/boot/grub/grub.cfg 的文件,但我无法知道其中的实际内容。编辑:(memdisk)也在sd卡上,内容相同,它也只列出了sd卡上的分区,而不是在闪存驱动器上。

没有 grub 模块,什么都没有。我认为它曾短暂地向我闪现错误,但随后 grub 控制台打开,我没有时间阅读这些消息。

我不知道该怎么做。也许如果我使用此处描述的 USB 模块制作自己的 grub 映像(使用 grub-mkimage 在内存磁盘中创建带有模块的 grub 映像)?虽然我不知道我需要哪些模块,或者这是否是正确的方法。

任何帮助将不胜感激。

编辑:我发现了这个:

基本上,您需要 grub 模块(我没有)才能让 grub 识别 USB 驱动器。

简短的回答是:

insmod usbms insmod ehci insmod uhci insmod ohci

只需要 *hci 行之一(通常是 ehci),但较旧的机器可能需要 uhci 或 ohci 插入所有 3 个工作正常。

这些行应该添加到非 USB 驱动器上 /boot/grub/ 文件夹中的 grub.cfg 或 custom.cfg(我推荐后者)。

我从这里得到了我的模块,但是 usbms 不在其中,[e,u,o]hci 也不在其中。我发现这是关于编写 grub 模块的,但这让我感到困惑。而且我找不到源代码。使用像 armhf 64 位处理器这样奇怪的东西并不容易找到兼容的软件。

Edit2:我已经从http://git.savannah.gnu.org/git/grub.git/下载了 grub 源代码,并在我的树莓派上编译了它。但是 usbms.c 和 ehci.c 源代码文件在那里,它没有将它们编译成 grub 模块。

我在这里找到了有关如何构建 grub 模块的信息,但它对我不起作用。我尝试更改 Makefile.core.am 并删除 usbms.module 周围的 if 语句,然后运行 ​​autogen 和 configure。没有骰子。我尝试使用 make usbms.module 在 grub-core 中手动构建,但它显示 gcc: fatal error: no input files。

我不需要蛴螬。我只想启动我的 Ubuntu arm64。如果我能以某种方式从你直接跳到那里,那很好。

我目前的想法:

  • 编译 usbms.mod、ehci.mod、uhci.mod 和 ohci.mod,使用链接的这些模块制作一个新的 grub 映像,它应该只适用于当前的 grub 配置。
  • 使用作为 memdisk 内置的模块、配置和 linux 内核和 initramfs 制作一个新的 grub 映像。使用指示 rootfs 在分区 3 上的命令行从那里引导内核
  • 不知何故,告诉 uboot 使用分区 3 是 root 的命令行从 partition3 引导我的 linux 内核。
  • 使用树莓派固件附带的黑魔法引导加载程序。我一点也不知道这些东西是如何工作的,但是如果有人可以让它启动我的 ubuntu x64,那么我很乐意忽略我不知道它是如何工作的事实。

我不知道该怎么做。

grub2 boot usb-drive bootloader
  • 1 个回答
  • 2011 Views
Martin Hope
FalcoGer
Asked: 2018-08-24 01:26:20 +0800 CST

Ubuntu 18.04 .local 域 dns 查找不起作用

  • 34

我正在使用带有 Ubuntu 18.04 的 Raspberry Pi 3。在我的公司,我们有一个 DNS 服务器和几个带有“.local”的域。我知道从技术上讲这是不正确的,它应该是“.lan”,因为 .local 是为多播 dns 保留的。但这就是它的方式,它不能轻易改变。因此,在我的 Windows 机器上,我可以毫无问题地 ping 和浏览这些域名。但在我的 Ubuntu 上,我不能。

我不能使用 IP,因为某些域在同一台机器上,并且 IIS 网络服务器将事情整理出来。

我已经搜索过,它经常出现:

  • https://smallbusiness.chron.com/resolving-local-ubuntu-38861.html
  • 为什么我的本地服务器都没有解析?
  • ubuntu 服务器无法解析 LAN 主机名

但是,更改 /etc/nsswitch.conf 对我没有用。我试过了

  • hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname # 默认
  • 主机:文件 dns
  • 主机:文件 mdns4_minimal [NOTFOUND=continue] dns myhostname
  • 主机:文件 mdns4 [NOTFOUND=return] dns myhostname
  • 主机:文件 mdns4 [NOTFOUND=continue] dns myhostname
  • 主机:文件 dns mdsn4_minimal myhostname
  • 主机:dns
  • 其他几个

这些都没有奏效。我也尝试在更改后重新启动。我试图告诉 avahi /etc/avahi/avahi-daemon.conf 中的 domain-name=alocal,服务重启后不起作用,重启后不起作用。在这不起作用之后,我尝试完全禁用 avahi-daemon 服务。

sudo systemctl disable avahi-daemon

重新启动后,我再次尝试了 /etc/nsswitch.conf 中的几个排列,但没有任何效果。

使用主机中的当前设置(文件 dns),我得到以下响应:

dig login.name.local # not the actual name

; <<>> Dig 9.11.3-1ubuntu1.1-Ubuntu <<>> login.name.local
;; global options: +cmd
;; Got answer:
;; WARNING .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33538
;; flags: qr rd ra; QUERY: 1, ANSWER:0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;login.name.local. 0     IN     A

;; Query time: 2msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Aug 23 10:51:50 CEST 2018
;; MSG SIZE  rcvd: 56

但是,当我指示 dig 直接查询服务器时,我得到了正确的答案:

dig @dnsIP login.name.local
; <<>> Dig 9.11.3-1ubuntu1.1-Ubuntu <<>> login.name.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57866
;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;login.name.local. 0     IN     A

;; ANSWER SECTION:
login.name.local. 3600 IN    A        serverIP

;; Query time: 2msec
;; SERVER: dnsIP#53(dnsIP)
;; WHEN: Thu Aug 23 10:51:50 CEST 2018
;; MSG SIZE  rcvd: 56

这个版本的 Ubuntu 使用带有网络管理器的 netplan。正确的 DNS IP 肯定在列表中。(实际上它是主 DNS。)dnsIp 也与 serverIP 相同,但这应该不是问题。

Ping 或通过浏览器连接等当然不起作用。没有人使用 dns 查询。

我不知道该怎么办。当然我们不能切换到不同的域名。我将服务器名放入 /etc/hosts 但这只是一个临时解决方案。

networking dns 18.04 domain-server
  • 8 个回答
  • 84351 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve