> -----Original Message----- > From: owner-src-committ...@freebsd.org [mailto:owner-src- > committ...@freebsd.org] On Behalf Of Mateusz Guzik > Sent: Tuesday, July 15, 2014 12:16 PM > To: Bryan Drewery > Cc: Devin Teske; src-committ...@freebsd.org; svn-src-...@freebsd.org; svn- > src-h...@freebsd.org > Subject: Re: svn commit: r268641 - head/usr.sbin/service > > On Tue, Jul 15, 2014 at 12:59:05PM -0500, Bryan Drewery wrote: > > On 7/14/2014 9:18 PM, Devin Teske wrote: > > > Author: dteske > > > Date: Tue Jul 15 02:18:55 2014 > > > New Revision: 268641 > > > URL: http://svnweb.freebsd.org/changeset/base/268641 > > > > > > Log: > > > Fix an issue with service(8) where utilities such as screen(1) and > > > tmux(1) > > > would behave differently when utilizing rc-script was invoked manually > vs. > > > service(8). The issue being that these utilities require the TERM > > > environ > > > variable to be set and service(8) was not passing it down. > > > > > > Reported by: Michael Dexter <edi...@callfortesting.org> > > > PR: bin/191869 > > > Reviewed by: allanjude > > > MFC after: 3 days > > > X-MFC-to: stable/10, stable/9 > > > > > > Modified: > > > head/usr.sbin/service/service.sh > > > > > > Modified: head/usr.sbin/service/service.sh > > > > ========================================================== > ==================== > > > --- head/usr.sbin/service/service.sh Tue Jul 15 01:03:29 2014 > (r268640) > > > +++ head/usr.sbin/service/service.sh Tue Jul 15 02:18:55 2014 > (r268641) > > > @@ -139,7 +139,7 @@ cd / > > > for dir in /etc/rc.d $local_startup; do > > > if [ -x "$dir/$script" ]; then > > > [ -n "$VERBOSE" ] && echo "$script is located in $dir" > > > - exec env -i HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin > $dir/$script $* > > > + exec env -i HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin > TERM="$TERM" $dir/$script $* > > > fi > > > done > > > > > > > > > > Hm, I'm not sure about this. The "behaves differently" is exactly the > > reason for service(8). It runs with a clean environment such as the boot > > does. Running an rc script without service(8) will give wrong behavior > > in many scripts that do not match boot-time behavior. > > > > Indeed, the whole point is to NOT inherit anything from calling process. >
If that were the point, then we have an issue. Because as it stands, service(8) does _not_ accurately provide the same environment as boot. Take the following boot script: dte...@scribe9.vicor.com ~ $ cat /etc/rc.d/foo #!/bin/sh # PROVIDE: foo set > /tmp/termtest . /etc/rc.subr name=foo rcvar=foo_enable command="/usr/local/bin/tmux" foo_flags="new -s foo ls" load_rc_config $name run_rc_command "$1" Now reboot to find the following in /tmp/termtest: dte...@scribe9.vicor.com ~ $ cat /tmp/termtest HOME=/ ID=/usr/bin/id IDCMD='if [ -x /usr/bin/id ]; then /usr/bin/id -un; fi' IFS=' ' JID=0 OPTIND=1 PATH=/sbin:/bin:/usr/sbin:/usr/bin PPID=1 PS1='# ' PS2='> ' PS4='+ ' PS='/bin/ps -ww' PWD=/ RC_PID=19 SYSCTL=/sbin/sysctl SYSCTL_N='/sbin/sysctl -n' SYSCTL_W=/sbin/sysctl _arg=faststart _boot=faststart _file=/etc/rc.d/foo _rc_conf_loaded=true _rc_elem=/etc/rc.d/foo _rc_elem_done=' /etc/rc.d/sysctl /etc/rc.d/hostid /etc/rc.d/zvol /etc/rc.d/dumpon /etc/rc.d/ddb /etc/rc.d/initrandom /etc/rc.d/geli /etc/rc.d/gbde /etc/rc.d/encswap /etc/rc.d/ccd /etc/rc.d/swap1 /etc/rc.d/fsck /etc/rc.d/root /etc/rc.d/mdconfig /etc/rc.d/hostid_save /etc/rc.d/mountcritlocal /etc/rc.d/zfs /etc/rc.d/var /etc/rc.d/cleanvar /etc/rc.d/FILESYSTEMS ' _rc_namevarlist='program chroot chdir flags fib nice user group groups' _rc_subr_loaded=: accept_sourceroute=NO accounting_enable=NO allscreens_flags='' allscreens_kbdflags='' always_force_depends=NO amd_enable=NO amd_flags='-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map' amd_map_program=NO amd_program=/usr/sbin/amd apm_enable=NO apmd_enable=NO apmd_flags='' arpproxy_all=NO atm_arps='' atm_enable=NO atm_pvcs='' auditd_enable=NO auditd_flags='' auditd_program=/usr/sbin/auditd auditdistd_enable=NO auditdistd_flags='' auditdistd_program=/usr/sbin/auditdistd autoboot=yes background_dhclient=NO background_fsck=YES background_fsck_delay=60 bhyve_enable=NO bhyve_profiles='virt1 virt2' blanktime=300 bootparamd_enable=NO bootparamd_flags='' bsdextended_script=/etc/rc.bsdextended bsnmpd_enable=NO bsnmpd_flags='' bthidd_config=/etc/bluetooth/bthidd.conf bthidd_enable=NO bthidd_hids=/var/db/bthidd.hids check_quotas=YES chkprintcap_enable=NO chkprintcap_flags=-d cleanvar_enable=YES clear_tmp_X=YES clear_tmp_enable=NO cloned_interfaces='' crashinfo_enable=YES crashinfo_program=/usr/sbin/crashinfo cron_dst=YES cron_enable=YES cron_flags='' cron_program=/usr/sbin/cron cursor=NO ddb_config=/etc/ddb.conf ddb_enable=NO defaultroute_carrier_delay=5 defaultroute_delay=30 defaultrouter=172.16.169.2 devd_enable=YES devd_flags='' devfs_load_rulesets=NO devfs_rulesets='/etc/defaults/devfs.rules /etc/devfs.rules' devfs_set_rulesets='' devfs_system_ruleset='' dhclient_flags='' dhclient_program=/sbin/dhclient dir=/usr/local/etc/rc.d dlv=0 dmesg_enable=YES dummynet_enable=NO dumpdev=NO dumpdir=/var/crash early_late_divider=FILESYSTEMS economy_cpu_freq=NONE economy_cx_lowest=HIGH entropy_dir=/var/db/entropy entropy_file=/entropy entropy_save_num=8 entropy_save_sz=2048 extra_netfs_types=NO fec_interfaces='' file=/usr/local/etc/rc.d/svnserve files='/etc/rc.d/sysctl /etc/rc.d/hostid /etc/rc.d/zvol /etc/rc.d/dumpon /etc/rc.d/ddb /etc/rc.d/initrandom /etc/rc.d/geli /etc/rc.d/gbde /etc/rc.d/encswap /etc/rc.d/ccd /etc/rc.d/swap1 /etc/rc.d/fsck /etc/rc.d/root /etc/rc.d/mdconfig /etc/rc.d/hostid_save /etc/rc.d/mountcritlocal /etc/rc.d/zfs /etc/rc.d/var /etc/rc.d/cleanvar /etc/rc.d/FILESYSTEMS /etc/rc.d/kldxref /etc/rc.d/kld /etc/rc.d/addswap /etc/rc.d/random /etc/rc.d/adjkerntz /etc/rc.d/atm1 /etc/rc.d/hostname /etc/rc.d/ip6addrctl /etc/rc.d/netoptions /etc/rc.d/sppp /etc/rc.d/ipfilter /etc/rc.d/ipnat /etc/rc.d/ipfs /etc/rc.d/serial /etc/rc.d/netif /etc/rc.d/devd /etc/rc.d/ipsec /etc/rc.d/atm2 /etc/rc.d/pfsync /etc/rc.d/pflog /etc/rc.d/pf /etc/rc.d/stf /etc/rc.d/ppp /etc/rc.d/faith /etc/rc.d/routing /etc/rc.d/mroute6d /etc/rc.d/nsswitch /etc/rc.d/rtsold /etc/rc.d/static_ndp /etc/rc.d/static_arp /etc/rc.d/bridge /etc/rc.d/resolv /etc/rc.d/route6d /etc/rc.d/mrouted /etc/rc.d/routed /etc/rc.d/defaultroute /etc/rc.d/ipfw /etc/rc.d/NETWORKING /etc/rc.d/netwait /etc/rc.d/mountcritremote /etc/rc.d/accounting /etc/rc.d/ldconfig /etc/rc.d/devfs /etc/rc.d/ipmon /etc/rc.d/mdconfig2 /etc/rc.d/newsyslog /etc/rc.d/syslogd /etc/rc.d/watchdogd /etc/rc.d/savecore /etc/rc.d/archdep /etc/rc.d/abi /etc/rc.d/SERVERS /etc/rc.d/named /etc/rc.d/ntpdate /etc/rc.d/rpcbind /etc/rc.d/nfsclient /etc/rc.d/nisdomain /etc/rc.d/ypserv /etc/rc.d/ypbind /etc/rc.d/ypset /etc/rc.d/amd /etc/rc.d/atm3 /etc/rc.d/auditd /etc/rc.d/auditdistd /etc/rc.d/tmp /etc/rc.d/cleartmp /etc/rc.d/dmesg /etc/rc.d/hastd /etc/rc.d/ipxrouted /etc/rc.d/kerberos /etc/rc.d/kadmind /etc/rc.d/keyserv /etc/rc.d/kpasswdd /etc/rc.d/nfsuserd /etc/rc.d/gssd /etc/rc.d/quota /etc/rc.d/mountd /etc/rc.d/nfsd /etc/rc.d/statd /etc/rc.d/lockd /etc/rc.d/pppoed /etc/rc.d/pwcheck /etc/rc.d/virecover /usr/local/etc/rc.d/stunnel /etc/rc.d/DAEMON /usr/local/etc/rc.d/svnserve /etc/rc.d/apm /etc/rc.d/apmd /etc/rc.d/bootparams /etc/rc.d/hcsecd /etc/rc.d/bthidd /etc/rc.d/local /etc/rc.d/lpd /etc/rc.d/motd /etc/rc.d/mountlate /etc/rc.d/nscd /etc/rc.d/ntpd /etc/rc.d/powerd /etc/rc.d/rarpd /etc/rc.d/rctl /etc/rc.d/sdpd /etc/rc.d/rfcomm_pppd_server /etc/rc.d/rtadvd /etc/rc.d/rwho /etc/rc.d/timed /etc/rc.d/ugidfw /etc/rc.d/yppasswdd /etc/rc.d/LOGIN /usr/local/etc/rc.d/rsyncd /usr/local/etc/rc.d/p4d /usr/local/etc/rc.d/mcwatchdog /usr/local/etc/rc.d/git_daemon /usr/local/etc/rc.d/dbus /etc/rc.d/ypxfrd /etc/rc.d/ypupdated /etc/rc.d/ubthidhci /etc/rc.d/syscons /etc/rc.d/sshd /etc/rc.d/sendmail /etc/rc.d/cron /etc/rc.d/jail /etc/rc.d/localpkg /etc/rc.d/securelevel /etc/rc.d/othermta /etc/rc.d/nfscbd /etc/rc.d/msgs /etc/rc.d/moused /etc/rc.d/mixer /etc/rc.d/inetd /etc/rc.d/hostapd /etc/rc.d/gptboot /etc/rc.d/geli2 /etc/rc.d/ftpd /etc/rc.d/ftp-proxy /etc/rc.d/foo /etc/rc.d/bsnmpd /etc/rc.d/bgfsck' firewall_allowservices='' firewall_client_net=192.0.2.0/24 firewall_coscripts='' firewall_enable=NO firewall_flags='' firewall_logdeny=NO firewall_logging=NO firewall_myservices='' firewall_nat_enable=NO firewall_nat_flags='' firewall_nat_interface='' firewall_nologports='135-139,445 1026,1027 1433,1434' firewall_quiet=NO firewall_script=/etc/rc.firewall firewall_simple_iif=ed1 firewall_simple_inet=192.0.2.16/28 firewall_simple_oif=ed0 firewall_simple_onet=192.0.2.0/28 firewall_trusted='' firewall_type=UNKNOWN font8x14=NO font8x16=NO font8x8=NO foo_enable=YES forward_sourceroute=NO fsck_y_enable=NO fsck_y_flags='' ftpd_enable=NO ftpd_flags='' ftpd_program=/usr/libexec/ftpd ftpproxy_enable=NO ftpproxy_flags='' gateway_enable=NO gbde_attach_attempts=3 gbde_autoattach_all=NO gbde_devices=NO gbde_lockdir=/etc geli_autodetach=YES geli_default_flags='' geli_devices='' geli_swap_flags='-e aes -l 256 -s 4096 -d' geli_tries='' gif_interfaces='' gptboot_enable=YES gssd_enable=NO gssd_flags='' harvest_ethernet=YES harvest_interrupt=YES harvest_p_to_p=YES hastd_enable=NO hastd_flags='' hastd_program=/sbin/hastd hcsecd_config=/etc/bluetooth/hcsecd.conf hcsecd_enable=NO hostapd_enable=NO hostid_enable=YES hostid_file=/etc/hostid hostname=scribe9.vicor.com ibcs2_enable=NO ibcs2_loaders=coff icmp_bmcastecho=NO icmp_drop_redirect=NO icmp_log_redirect=NO ifconfig_em0=DHCP ike_enable=NO ike_flags='' ike_program=/usr/local/sbin/isakmpd inetd_enable=NO inetd_flags='-wW -C 60' inetd_program=/usr/sbin/inetd ip6addrctl_enable=YES ip6addrctl_policy=AUTO ip6addrctl_verbose=NO ip_portrange_first=NO ip_portrange_last=NO ipfilter_enable=NO ipfilter_flags='' ipfilter_program=/sbin/ipf ipfilter_rules=/etc/ipf.rules ipfs_enable=NO ipfs_flags='' ipfs_program=/sbin/ipfs ipmon_enable=NO ipmon_flags=-Ds ipmon_program=/sbin/ipmon ipnat_enable=NO ipnat_flags='' ipnat_program=/sbin/ipnat ipnat_rules=/etc/ipnat.rules ipsec_enable=NO ipsec_file=/etc/ipsec.conf ipv6_activate_all_interfaces=NO ipv6_cpe_wanif=NO ipv6_default_interface=NO ipv6_defaultrouter=NO ipv6_faith_prefix=NO ipv6_gateway_enable=NO ipv6_ipfilter_rules=/etc/ipf6.rules ipv6_ipv4mapping=NO ipv6_network_interfaces=auto ipv6_privacy=NO ipv6_static_routes='' ipxgateway_enable=NO ipxrouted_enable=NO ipxrouted_flags='' jail_enable=NO jail_list='' jail_parallel_start=NO jail_set_hostname_allow=YES jail_socket_unixiproute_only=YES jail_sysvipc_allow=NO kadmind5_server=/usr/libexec/kadmind kadmind5_server_enable=NO kerberos5_server=/usr/libexec/kdc kerberos5_server_enable=NO kerberos5_server_flags=--detach kern_securelevel=-1 kern_securelevel_enable=NO keybell=NO keyboard='' keychange=NO keymap=NO keyrate=fast keyserv_enable=NO keyserv_flags='' kldxref_clobber=NO kldxref_enable=NO kldxref_module_path='' kpasswdd_server=/usr/libexec/kpasswdd kpasswdd_server_enable=NO ldconfig32_paths=/usr/lib32 ldconfig_insecure=NO ldconfig_local32_dirs=/usr/local/libdata/ldconfig32 ldconfig_local_dirs=/usr/local/libdata/ldconfig ldconfig_paths='/usr/lib/compat /usr/local/lib /usr/local/lib/compat/pkg' ldconfig_paths_aout='/usr/lib/compat/aout /usr/local/lib/aout' linux_enable=NO local_rc=' /usr/local/etc/rc.d/dbus /usr/local/etc/rc.d/git_daemon /usr/local/etc/rc.d/mcwatchdog /usr/local/etc/rc.d/p4d /usr/local/etc/rc.d/rsyncd /usr/local/etc/rc.d/stunnel /usr/local/etc/rc.d/svnserve' local_startup=/usr/local/etc/rc.d log_in_vain=0 lpd_enable=NO lpd_flags='' lpd_program=/usr/sbin/lpd mcwatchdog_enable=YES mixer_enable=YES mountd_enable=YES mountd_flags=-r mousechar_start=NO moused_enable=YES moused_flags='' moused_nondefault_enable=YES moused_port=/dev/psm0 moused_type=auto mroute6d_enable=NO mroute6d_flags='' mroute6d_program=/usr/local/sbin/pim6dd mrouted_enable=NO mrouted_flags='' mrouted_program=/usr/local/sbin/mrouted mta_start_script=/etc/rc.sendmail named_auto_forward=NO named_auto_forward_only=NO named_chroot_autoupdate=YES named_chrootdir=/var/named named_conf=/etc/namedb/named.conf named_enable=NO named_program=/usr/sbin/named named_symlink_enable=YES named_uid=bind named_wait=NO named_wait_host=localhost natd_enable=NO natd_flags='' natd_interface='' natd_program=/sbin/natd natm_static_routes='' netfs_types='nfs:NFS oldnfs:OLDNFS smbfs:SMB portalfs:PORTAL nwfs:NWFS' netwait_enable=YES netwait_if_timeout=30 netwait_timeout=60 network_interfaces=auto newsyslog_enable=YES newsyslog_flags=-CN nfs_access_cache=60 nfs_bufpackets='' nfs_client_enable=NO nfs_reserved_port_only=NO nfs_server_enable=YES nfs_server_flags='-u -t -n 4' nfscbd_enable=NO nfscbd_flags='' nfsuserd_enable=NO nfsuserd_flags='' nfsv4_server_enable=NO nis_client_enable=NO nis_client_flags='' nis_server_enable=NO nis_server_flags='' nis_yppasswdd_enable=NO nis_yppasswdd_flags='' nis_ypset_enable=NO nis_ypset_flags='' nis_ypxfrd_enable=NO nis_ypxfrd_flags='' nisdomainname=NO nscd_enable=NO ntpd_config=/etc/ntp.conf ntpd_enable=NO ntpd_flags='-p /var/run/ntpd.pid -f /var/db/ntpd.drift' ntpd_program=/usr/sbin/ntpd ntpd_sync_on_start=NO ntpdate_config=/etc/ntp.conf ntpdate_enable=YES ntpdate_flags=-b ntpdate_hosts=time-nw.nist.gov ntpdate_program=/usr/sbin/ntpdate oldnfs_server_enable=NO opensm_enable=NO performance_cpu_freq=NONE performance_cx_lowest=HIGH pf_enable=NO pf_flags='' pf_program=/sbin/pfctl pf_rules=/etc/pf.conf pflog_enable=NO pflog_flags='' pflog_logfile=/var/log/pflog pflog_program=/sbin/pflogd pfsync_enable=NO pfsync_ifconfig='' pfsync_syncdev='' pfsync_syncpeer='' populate_var=AUTO powerd_enable=NO powerd_flags='' ppp_enable=NO ppp_mode=auto ppp_nat=YES ppp_profile=papchap ppp_program=/usr/sbin/ppp ppp_user=root pppoed_enable=NO pppoed_flags='-P /var/run/pppoed.pid' pppoed_interface=fxp0 pppoed_provider='*' quota_enable=NO quotacheck_flags=-a quotaoff_flags=-a quotaon_flags=-a rarpd_enable=NO rarpd_flags=-a rc_conf_files='/etc/rc.conf /etc/rc.conf.local' rc_debug=NO rc_fast=yes rc_info=NO rc_startmsgs=YES rcshutdown_timeout=90 rfcomm_pppd_server_enable=NO rfcomm_pppd_server_one_channel=1 rfcomm_pppd_server_profile='one two' rfcomm_pppd_server_two_channel=3 root_rw_mount=YES route6d_enable=NO route6d_flags='' route6d_program=/usr/sbin/route6d routed_enable=NO routed_flags=-q routed_program=/sbin/routed rpc_lockd_enable=YES rpc_lockd_flags='' rpc_statd_enable=YES rpc_statd_flags='' rpc_ypupdated_enable=NO rpcbind_enable=NO rpcbind_flags='' rpcbind_program=/usr/sbin/rpcbind rtadvd_enable=NO rtadvd_interfaces='' rtsol_flags='' rtsold_enable=NO rtsold_flags=-a rwhod_enable=NO rwhod_flags='' savecore_flags='' saver=beastie script_name_sep=' ' scrnmap=NO sdpd_control=/var/run/sdp sdpd_enable=NO sdpd_groupname=nobody sdpd_username=nobody sendmail_enable=NO sendmail_flags='-L sm-mta -bd -q30m' sendmail_msp_queue_enable=YES sendmail_msp_queue_flags='-L sm-msp-queue -Ac -q30m' sendmail_outbound_enable=YES sendmail_outbound_flags='-L sm-queue -q30m' sendmail_pidfile=/var/run/sendmail.pid sendmail_procname=/usr/sbin/sendmail sendmail_rebuild_aliases=NO sendmail_submit_enable=YES sendmail_submit_flags='-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost' skip='-s nostart' source_rc_confs_defined=yes sppp_interfaces='' sshd_enable=YES sshd_flags='-g 300' sshd_program=/usr/sbin/sshd static_arp_pairs='' static_ndp_pairs='' static_routes='' stf_interface_ipv4addr='' stf_interface_ipv4plen=0 stf_interface_ipv6_ifid=0:0:0:1 stf_interface_ipv6_slaid=0000 svr4_enable=NO swapfile=NO synchronous_dhclient=NO syslogd_enable=YES syslogd_flags=-s syslogd_program=/usr/sbin/syslogd sysvipc_enable=NO tcp_drop_synfin=NO tcp_extensions=YES tcp_keepalive=YES timed_enable=NO timed_flags='' tmpmfs=AUTO tmpmfs_flags=-S tmpsize=20m ubthidhci_enable=NO ugidfw_enable=NO update_motd=YES varmfs=AUTO varmfs_flags=-S varsize=32m virecover_enable=YES watchdogd_enable=NO watchdogd_flags='' weak_mountd_authentication=NO wpa_supplicant_conf_file=/etc/wpa_supplicant.conf wpa_supplicant_flags=-s wpa_supplicant_program=/usr/sbin/wpa_supplicant zfs_enable=YES Compare that with the following: dte...@scribe9.vicor.com ~ $ sr service foo start dte...@scribe9.vicor.com ~ $ cat /tmp/termtest HOME=/ IFS=' ' OPTIND=1 PATH=/sbin:/bin:/usr/sbin:/usr/bin PPID=1285 PS1='# ' PS2='> ' PS4='+ ' PWD=/ Looks to me like some things are being inherited. Notably, it would appear that the rc.d scripts are run within the parent namespace which has had source_rc_confs() called (I'm leaving alone for the moment that this indicates that each rc-script is being less than efficient by re-sourcing rc.subr). Given the above (that we are farther from a "clean environment" than one might expect), is it really that big of a deal to expose $TERM? If so, what are the serious issues that could arise? I personally cannot think of any shortcomings or fallout from adding $TERM to be exposed. -- Devin _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"