无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
12
返回列表 发新帖
楼主: liuzhaoyzz
打印 上一主题 下一主题

tinycore12.0x64文件管理器乱码,可有高手知道怎么解决啊?

    [复制链接]
31#
发表于 2022-1-8 21:34:11 来自手机 | 只看该作者
我看vi也头疼,有个叫nano的命令行编辑器,不错的,推荐。

点评

我手机上看了下,nano好像在在tinycore的库里面http://tinycorelinux.net/12.x/x86/tcz/,晚点试试看。我之前也有看过到这个nano。  详情 回复 发表于 2022-1-8 22:14
回复

使用道具 举报

32#
 楼主| 发表于 2022-1-8 22:14:44 来自手机 | 只看该作者
my9823 发表于 2022-1-8 21:34
我看vi也头疼,有个叫nano的命令行编辑器,不错的,推荐。

我手机上看了下,nano好像在在tinycore的库里面http://tinycorelinux.net/12.x/x86/tcz/,晚点试试看。我之前也有看过到这个nano。
回复

使用道具 举报

33#
 楼主| 发表于 2022-1-8 22:37:19 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-1-8 22:41 编辑
my9823 发表于 2022-1-8 18:54
有个发行版是LFS,有英文文档如何从头到尾建立自己的linux,或许对你有帮助。


说到LFS,我玩过veket/puppy,他们似乎就是基于LFS弄的。
你说的是这个吗?

LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译Linux的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化的Linux,不单单是个性的桌面。

我不想玩那么深入,我只是想基于tinycore基础上学习下定制linux玩玩罢了,tinycore有良好的组件、库基础、框架,在这个基础上、站在巨人的肩膀上,只是简单定制,折腾着玩玩。
回复

使用道具 举报

34#
 楼主| 发表于 2022-1-9 09:07:04 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-1-9 12:41 编辑
my9823 发表于 2022-1-8 18:41
普通用户只能读写/home/用户名目录和自己在/tmp目录产生的目录文件,root用户可以读写任意目录。sudo su

sudo passwd root
password:*******
su
password:*******

vi /etc/fstab
vi是打开文件后的命令模式状态。 可以使用i或a命令进入可编辑状态。
按【ESC】键跳到命令模式,然后再按【:】冒号键,最后再按【wq】,即可保存退出vi的编辑状态;如果是不想保持直接按下【:】冒号键加【q!】键,就能直接退出。
其实vi也没有想象中的那么难,只是我用的少,不熟悉罢了,相当于黑色背景下的一个记事本软件。
# /etc/fstab
proc            /proc        proc    defaults          0       0
sysfs           /sys         sysfs   defaults          0       0
devpts          /dev/pts     devpts  defaults          0       0
tmpfs           /dev/shm     tmpfs   defaults          0       0
/dev/zram0  swap         swap    defaults,noauto   0       0
/dev/sda2       /mnt/sda2       ntfs     noauto,users,exec,ro,umask=000 0 0 # Added by TC
/dev/sdc3       /mnt/sdc3       vfat     noauto,users,exec,umask=000 0 0 # Added by TC
/dev/sdd2       /mnt/sdd2       vfat     noauto,users,exec,umask=000 0 0 # Added by TC
/dev/sr0        /mnt/sr0        auto     noauto,users,exec    0 0 # Added by TC


改成这样子:
# /etc/fstab
proc            /proc        proc    defaults          0       0
sysfs           /sys         sysfs   defaults          0       0
devpts          /dev/pts     devpts  defaults          0       0
tmpfs           /dev/shm     tmpfs   defaults          0       0
/dev/zram0  swap         swap    defaults,noauto   0       0
/dev/sda2       /mnt/sda2       ntfs     auto,users,exec,ro,umask=000,locale=zh_CN.UTF-8 0 0 # Added by TC
/dev/sdc3       /mnt/sdc3       vfat     auto,users,exec,umask=000,locale=zh_CN.UTF-8 0 0 # Added by TC
/dev/sdd2       /mnt/sdd2       vfat    auto,users,exec,umask=000,locale=zh_CN.UTF-8 0 0 # Added by TC
/dev/sr0        /mnt/sr0        auto     noauto,users,exec    0 0 # Added by TC


我修改之后,保存了/etc/fstab,用xfw看了下,确实修改过了。
然后重启,再看看,还是没有自动挂载,用xfw看了下/etc/fstab,又还原了。


那么就从/usr/sbin/rebuildfstab着手吧。
vi /usr/sbin/rebuildfstab

改成下面的:
#!/bin/busybox ash
. /etc/init.d/tc-functions
useBusybox


PATH="/bin:/sbin:/usr/bin:/usr/sbin"
export PATH
umask 022


# Exit if script is already running
[ -e /proc/partitions ] || exit
if [ -e /var/run/rebuildfstab.pid ]; then
if [ -e "/proc/$(cat /var/run/rebuildfstab.pid)" ]; then
  touch /var/run/rebuildfstab.rescan 2>/dev/null
  exit
fi
rm -f /var/run/rebuildfstab.pid
fi
echo "$$" >/var/run/rebuildfstab.pid


TMP="/tmp/fstab.$$.tmp"
ADDEDBY="# Added by TC"
DEVROOT="/dev"


# Create a list of fdisk -l
FDISKL=`fdisk -l | awk '$1 ~ /dev/{printf " %s ",$1}'`


# Read a list of CDROM/DVD Drives
CDROMS=""
CDROMSF=/etc/sysconfig/cdroms
[ -s "$CDROMSF" ] &&  CDROMS=`cat "$CDROMSF"`


grep -v "$ADDEDBY" /etc/fstab > "$TMP"


# Loop through block devices
for i in `find /sys/block/*/ -name dev`; do
  case "$i" in
    *loop*|*ram*)
      continue
      ;;
  esac


  DEVNAME=`echo "$i"| tr [!] [/] | awk 'BEGIN{FS="/"}{print $(NF-1)}'`
  DEVMAJOR="$(cat $i|cut -f1 -d:)"
  
  FSTYPE=""
  case "$CDROMS" in *"$DEVROOT/$DEVNAME"*) FSTYPE="auto" ;; esac


# First try blkid approach for FSTYPE for non floppy drives.
  [ "$DEVMAJOR" != 2 -a -z "$FSTYPE" ] && FSTYPE="$(fstype "/dev/$DEVNAME")"
  [ "$FSTYPE" == "linux_raid_member" ] && continue
  [ "$FSTYPE" == "LVM2_member" ] && continue
  if [ -z "$FSTYPE" ]; then


    case "$DEVMAJOR" in
      2|98)
        FSTYPE="auto"
        ;;
      3|8|11|22|33|34)
        case "$FDISKL" in *"$DEVROOT/$DEVNAME "*) FSTYPE="$(fstype $DEVROOT/$DEVNAME)" ;; esac
        case "$CDROMS" in *"$DEVROOT/$DEVNAME"*) FSTYPE="auto" ;; esac
        ;;
      179|9|259) # MMC or MD (software raid)
        FSTYPE="$(fstype $DEVROOT/$DEVNAME)"
        ;;
    esac
  fi


checkntfs() {
  if [ -f /usr/local/bin/ntfs-3g ]; then
      FSTYPE="ntfs-3g"
      OPTIONS="$OPTIONS"
  else
      FSTYPE="ntfs"
      OPTIONS="$OPTIONS,ro,umask=000"
  fi        
}
  [ -z "$FSTYPE" ] && continue
  MOUNTPOINT="/mnt/$DEVNAME"
  OPTIONS="auto,users,exec"
  case "$FSTYPE" in
    ntfs) checkntfs ;;
    vfat|msdos) OPTIONS="${OPTIONS},umask=000,iocharset=utf8" ;;
    ext2|ext3) OPTIONS="${OPTIONS},relatime" ;;
    swap) OPTIONS="defaults"; MOUNTPOINT="none" ;;
  esac
  if [ "$MOUNTPOINT" != "none" ]; then
    mkdir -p "/mnt/$DEVNAME" 2>/dev/null >/dev/null
  fi        
  grep -q "^$DEVROOT/$DEVNAME " $TMP ||
    printf "%-15s %-15s %-8s %-20s %-s\n" "$DEVROOT/$DEVNAME" "$MOUNTPOINT" "$FSTYPE" "$OPTIONS" "0 0 $ADDEDBY" >>"$TMP"
done




# Clean up
mv "$TMP" /etc/fstab
rm -f /var/run/rebuildfstab.pid
sync


# If another copy tried to run while we were running, rescan.
if [ -e /var/run/rebuildfstab.rescan ]; then
  rm -f /var/run/rebuildfstab.rescan
  exec $0 "$@"
fi

重启之后,看了下/usr/sbin/rebuildfstab和/etc/fstab,都回去了,看样子在线修改这两个文件不行,还是要折腾corepure64.gz,解包,修改,打包,太麻烦了。

option修改为auto之后,在/usr/sbin/rebuildfstab后面添加mount -a应该可以实现自动挂载。





回复

使用道具 举报

35#
 楼主| 发表于 2022-1-9 09:09:34 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-1-9 10:03 编辑

尝试写个脚本让分区自动挂载:
mountpartition2.sh
#!/bin/busybox ash
. /etc/init.d/tc-functions
useBusybox
sudo mount  -t vfat -o iocharset=utf8 /dev/sdd2 /mnt/sdd2
sudo mount  -t ntfs-3g /dev/sda2 /mnt/sda2

sudo ./mountpartition2.sh
分区挂载正常了,没有乱码。
问题是这样子写,不通用啊。应该可以基于/usr/sbin/rebuildfstab改改。在/usr/sbin/rebuildfstab后面添加mount -a应该也可以。

sudo mount  -t $FSTYPE -o ${OPTIONS} /dev/$DEVNAME /mnt/$DEVNAME ;;

不知道哪里语法问题,出错了。。。


回复

使用道具 举报

36#
发表于 2022-1-9 11:59:58 | 只看该作者
tinycore 的tcz看了下是mksquashfs压缩的吧?反正在windows下用7z能打开,有个tcz叫usbautomount,包里有个udev的规则文件和脚本,你可以修改下mount的-o参数拿来用就行了。

点评

我不太想从corepure64.gz着手,因为每次tinycore一更新,这个会跟着变,所以我的想法是,添加一个挂载命令行到/opt/bootlocal.sh,以便在引导时挂载文件系统。这个/opt/bootlocal.sh是在tinycore.iso外面,可以自动  详情 回复 发表于 2022-1-9 12:46
回复

使用道具 举报

37#
发表于 2022-1-9 12:09:34 | 只看该作者
create_mountpoint()
{
        mkdir -p "${mount_dir}/${label}"

        # note: setting mountpoint ownership/permissions is not strictly necessary with busybox mount
        chown "$nonroot_user":staff "${mount_dir}/${label}"
        chmod 777 "${mount_dir}/${label}"
}

英文不太好,估计上边是创建挂载目录,更改属主,更改读写执行属性。
下边是挂载。
mount_it()
{
        # uid for vfat filesystem, first fallback is most general (e.g., for ext), second fallback is for ntfs
        # the "busybox.suid" prefix is to ensure the busybox version of mount is used:
        busybox.suid mount -o uid=1000 "$partition" "${mount_dir}/${label}" 2>/dev/null ||
        busybox.suid mount "$partition" "${mount_dir}/${label}" 2>/dev/null ||
        busybox.suid mount -t ntfs-3g "$partition" "${mount_dir}/${label}"
}
回复

使用道具 举报

38#
发表于 2022-1-9 12:10:38 | 只看该作者
建议你了解下udev这个东西有帮助。

点评

udev我之前看过的。wintoflash介绍过。 tinycore默认的不是用udev,用的就是前面/etc/fstab里面那样子的,/dev/sda2这样子的。 用uuid啥的,应该也行(我没有尝试过),无论是用/dev/sda2这样子的,还是udev,应该  详情 回复 发表于 2022-1-9 12:36
回复

使用道具 举报

39#
 楼主| 发表于 2022-1-9 12:36:42 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-1-9 12:50 编辑
my9823 发表于 2022-1-9 12:10
建议你了解下udev这个东西有帮助。

udev我之前看过的。wintoflash介绍过。
tinycore默认的不是用udev,用的就是前面/etc/fstab里面那样子的,/dev/sda2这样子的。
用uuid啥的,应该也行(我没有尝试过),无论是用/dev/sda2这样子的,还是udev,应该都可以,tinycore的脚本默认用的是/dev/sda2这样子的,能够遍历出所有的dev,现在问题不在这里,在于完善一个脚本,让他自启动,启动后自动加载,至于用什么方式,不是重点。
tinycore的脚本都是用的noauto模式不自动挂载(可能是为了加快启动时间?是否挂载的选择留给用户?),而且他挂载的时候,locale编码不适用于中文系统,所以要修改,调整。
晚点我去tinycore官方论坛看看。



回复

使用道具 举报

40#
 楼主| 发表于 2022-1-9 12:46:18 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-1-14 21:39 编辑
my9823 发表于 2022-1-9 11:59
tinycore 的tcz看了下是mksquashfs压缩的吧?反正在windows下用7z能打开,有个tcz叫usbautomount,包里有个 ...


我不太想从corepure64.gz着手,因为每次tinycore一更新,这个会跟着变,所以我的想法是,添加一个挂载命令行到/opt/bootlocal.sh,以便在引导时挂载文件系统。这个/opt/bootlocal.sh是在tinycore里面,但是可以备份到mydata.tcz里面,随系统启动自动运行。

而这个挂载文件系统的脚本,可以从/usr/sbin/rebuildfstab修改而来。

你说的usbautomount.tcz,我之前也有关注到,似乎用的基于label的方式挂载,感觉没必要,因为/usr/sbin/rebuildfstab里面已经有了现成的代码了,他已经在系统启动的时候建立好了所有的/dev/sda2,/dev/sdc3这样子的目录了,设备没有挂载上去,改改应该能用,但我不太会,需要摸索。

回复

使用道具 举报

41#
 楼主| 发表于 2022-1-13 22:52:13 | 只看该作者
tinycore论坛的polikuo和Rich,提供了个挂载分区的代码。调用办法:
chmod 777 MountAll-refactored.sh
MountAll-refactored.sh

但是tinycore所在的分区可能不能被挂载,即使sudo umount -l /dev/xxx,也不行。
        


#!/bin/sh

for F in `ls -1 /mnt/`
do
  case $F in
    sr[0-9]*) # Skip CD/DVD drives.
    #echo "Skipping /mnt/$F"
    continue
    ;;

    fd[0-9]*) # Skip floppy drives
    #echo "Skipping /mnt/$F"
    continue
    ;;

    *)
    # Skip if not listed in fstab
    grep -q "/mnt/$F" /etc/fstab || continue
    # Skip if already mounted.
    grep -q "/mnt/$F" /etc/mtab && continue
    FS=`awk "/\/mnt\/$F/"'{print $3}' /etc/fstab`
    case $FS in
      vfat ) sudo mount -t vfat -o iocharset=utf8 "/dev/$F" "/mnt/$F"
      ;;
      ntfs ) sudo mount -t ntfs-3g "/dev/$F" "/mnt/$F"
      ;;
      * ) sudo mount "/mnt/$F"
      ;;
    esac
    # Change ownership of mount to current user.
    sudo chown "`cat /etc/sysconfig/tcuser`":staff "/mnt/$F"
    ;;
  esac
done



MountAll-refactored.rar

464 Bytes, 下载次数: 0, 下载积分: 无忧币 -2

回复

使用道具 举报

42#
 楼主| 发表于 2022-1-13 22:55:16 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-1-13 22:59 编辑

感觉上来说,还是要折腾/usr/sbin/rebuilderfstab,从底层修改,改完了之后,cpio+gz打包回去,到corepure64.gz里面。
比较麻烦的问题是,tinycore每更新一次就要修改一次,来来回回修改比较麻烦。

OPTIONS="auto,users,exec"
  case "$FSTYPE" in
    ntfs) checkntfs ;;
    vfat|msdos) OPTIONS="${OPTIONS},umask=000,iocharset=utf8" ;;

        
回复

使用道具 举报

43#
 楼主| 发表于 2022-1-14 21:43:02 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-1-14 22:33 编辑

可以自己包個rebuilderfstab.tcz阿,把改寫過的放/usr/local/bin就好了。
記得要加進onboot.lst

想问下怎么把这个rebuildfstab.sh打包进rebuildfstab.tcz?用什么工具?打包进去之后,onboot.lst调用,会不会比系统的/usr/sbin/rebuildfstab调用的晚呢?如果调用的晚,可能不会起作用,因为rebuildfstab提前已经建立了/etc/fstab了啊?

tce-load -i squashfs-tools
mkdir -p packing/usr/local/bin
mv rebuildfstab.sh packing/usr/local/bin/rebuildfstab
chmod +x packing/usr/local/bin/rebuildfstab
mksquashfs packing rebuildfstab.tcz
mv rebuildfstab.tcz /etc/sysconfig/tcedir/optional
echo rebuildfstab.tcz >> /etc/sysconfig/tcedir/onboot.lst
echo rebuildfstab >> /opt/bootlocal.sh
filetool.sh -b

我发现 /opt/bootlocal.sh需要超级管理员权限才能修改。
sudo vi /opt/bootlocal.sh
添加我的
rebuildfstab.sh
mount -a


或者直接在onboot.lst里面添加mountallpartition.tcz,然后在/opt/bootlocal.sh中添加:
mountallpartition.sh
重启试了下,FAT32/NTFS分区自动挂载了,没有乱码。

但是tinycore所在的FAT32分区还是乱码,因为这个分区被挂载晚了,是/etc/fstab里面vfat类型的分区没有iocharset=utf8参数导致。


mountallpartition.rar

2.35 KB, 下载次数: 0, 下载积分: 无忧币 -2

回复

使用道具 举报

44#
发表于 2022-1-15 12:25:58 来自手机 | 只看该作者
/etc/tc-config中有一段判断启动内核参数有没有NOFSTAB,有跳过,没有就运行rebuildfstab并复制udev规则/tmp/98-tc.rules到/etc/udev/rule.d目录。
回复

使用道具 举报

45#
发表于 2022-1-15 12:40:29 来自手机 | 只看该作者
rebuildfstab中有一句是grep -q "^$DEVROOT/$DEVNAME"那行,我猜是如果fstab中有设备的挂载参数略过,没有最后追加一行。
回复

使用道具 举报

46#
发表于 2022-1-15 12:43:01 来自手机 | 只看该作者
你可以尝试用awk获取关于fat32的分区的那行的挂载参数,有没有utf8,没有用就用sed的-i直接修改替换
回复

使用道具 举报

47#
 楼主| 发表于 2022-1-15 14:11:33 来自手机 | 只看该作者
晚点再研究下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-12-12 03:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表